圖像去模糊有突破,新方法適用于所有CV二維任務?
圖像處理領域里,圖像去模糊技術一直備受矚目,成為熱門討論焦點。而傳統方法的不足促使研究者們持續尋找創新解決方案。
傳統CNN的局限
傳統的卷積神經網絡在圖像去模糊上存在不少缺陷。比如,在處理監控攝像頭捕捉的畫面這類實際應用中,它們主要依賴局部操作。這種做法難以全面把握圖像信息。因此,面對大面積模糊,它們只能局部改善,效果并不理想。而且,從時間效率來看,基礎的局部操作速度較慢,因為需要逐個處理局部區域,無法迅速實現整體去模糊。
面對傳統方法在處理空間變化特性上的局限,研究路徑亟需調整。圖像內容的空間變化往往復雜多變,而傳統方法難以有效適應這種復雜性,導致圖像去模糊的效果難以達到高效和高質量。
Transformer的潛力與挑戰
Transformer模型技術日益進步,成為新的期待。在眾多高級視覺任務中,它展現出卓越的全局上下文建模實力。不論是在科研室的測試,還是在工業拍攝場景中的實際應用,其表現都相當出色。
Transformer中的scaled dot-product attention機制存在二次的時空復雜度問題。這個問題必須引起重視。特別是當處理高分辨率圖像時,這種復雜度會減慢處理速度,并提升成本。以高端相機拍攝的高分辨率圖像為例,在去模糊處理過程中,這種計算復雜度的提升會導致過程變得異常緩慢,同時消耗大量資源。
頻域下的解決方案
為了解決這些問題,文章提出了一種基于頻域的高效Transformer算法。該方法用元素相乘操作替換了空間域中的矩陣運算,以估算縮放點積注意力。這種改動非常關鍵。
從理論層面來看,元素乘積操作在簡化復雜度方面表現更佳。我們無需執行繁復的矩陣運算,仍能實現相似效果。在具體實驗中,眾多高分辨率圖像在此新法下,處理速度明顯加快。這不僅是理論上的突破,更是實際應用中得以證實的成效。
高效的頻域自注意力求解器
FSAS求解器應運而生。該求解器運用快速傅里葉變換(FFT)在頻域內對Fq與Fk的相關性進行估算。這一方法依據卷積定理,即在空間域中進行的卷積操作,在頻域中可以轉化為逐元素相乘的操作。
FSAS在很多大型圖像數據集中表現突出。它顯著減少了傳統自注意力機制的計算負擔。從數據處理的角度看,它在處理大尺寸、高清晰度圖像時,大幅降低了計算成本,減輕了噪聲干擾。在眾多圖像編輯軟件的應用中,這種改進使得用戶在圖像去模糊處理時,能夠獲得更快的速度和更優的質量。
判別性頻域前饋網絡
提出了判別性頻域前饋網絡,簡稱DFFN。此網絡借鑒了JPEG壓縮技術,并加入了門控功能。設計初衷是為了在恢復圖像清晰度時,合理選擇保留哪些低頻與高頻信息。
在實際操作時,不同種類的圖像在低頻與高頻信息上所承載的意義各異。以風景照為例,低頻信息通常關聯到整體形狀,而高頻則與細節緊密相連。通過這種有目的的信息保留,圖像去模糊的處理效果能更貼合各類圖像的特性,從而更有效地還原圖像的本來面目。
實驗結果展示
在GoPro數據集上進行了對比測試。結果顯示,新方法制作出的去模糊圖像,無論是從PSNR(峰值信噪比)還是SSIM(結構相似性)指標來看,都表現更佳。視覺效果同樣出色。這表明,結合了FSAS和DFFN的編碼器-解碼器架構網絡是有效的。該方法具有實際應用價值,對圖像去模糊技術的實際應用具有積極推動作用。
最后我想請教各位,關于圖像去模糊技術,你們認為今后還有哪些途徑可以實現更深入的改進?
class FSAS(nn.Module):
? ? def?__init__(self, dim, bias=False):
? ? ? ??super(FSAS, self).__init__()
? ? ? ? self.to_hidden = nn.Conv2d(dim, dim *?6, kernel_size=1, bias=bias)
? ? ? ? self.to_hidden_dw = nn.Conv2d(dim *?6, dim *?6, kernel_size=3, stride=1, padding=1, groups=dim *?6, bias=bias)
? ? ? ? self.project_out = nn.Conv2d(dim *?2, dim, kernel_size=1, bias=bias)
? ? ? ? self.norm =?LayerNorm(dim *?2, LayerNorm_type='WithBias')
? ? ? ? self.patch_size =?8
? ? def?forward(self, x):
? ? ? ? hidden = self.to_hidden(x)
? ? ? ? q, k, v = self.to_hidden_dw(hidden).chunk(3, dim=1)
? ? ? ? q_patch =?rearrange(q,?'b c (h patch1) (w patch2) -> b c h w patch1 patch2', patch1=self.patch_size,
? ? ? ? ? ? ? ? ? ? ? ? ? ? patch2=self.patch_size)
? ? ? ? k_patch =?rearrange(k,?'b c (h patch1) (w patch2) -> b c h w patch1 patch2', patch1=self.patch_size,
? ? ? ? ? ? ? ? ? ? ? ? ? ? patch2=self.patch_size)
? ? ? ? q_fft = torch.fft.rfft2(q_patch.float())
? ? ? ? k_fft = torch.fft.rfft2(k_patch.float())
? ? ? ? out = q_fft * k_fft
? ? ? ? out = torch.fft.irfft2(out, s=(self.patch_size, self.patch_size))
? ? ? ? out =?rearrange(out,?'b c h w patch1 patch2 -> b c (h patch1) (w patch2)', patch1=self.patch_size,
? ? ? ? ? ? ? ? ? ? ? ? patch2=self.patch_size)
? ? ? ? out = self.norm(out)
? ? ? ? output = v * out
? ? ? ? output = self.project_out(output)
? ? ? ? return output
if __name__ ==?'__main__':
? ? fsas=?FSAS(32).to(device)
? ? input = torch.rand(1,?32,?256,?256).to(device) ?# 輸入張量
? ? output =?fsas(input) ?# 前向傳播
? ??print(f"n輸入張量形狀: {input.shape}")
? ??print(f"輸出張量形狀: {output.shape}")
作者:小藍
鏈接:http://m.huanchou.cn/content/8018.html
本站部分內容和圖片來源網絡,不代表本站觀點,如有侵權,可聯系我方刪除。