天天看點

圖像超分辨率重構SRCNN代碼中幾個問題

整個網絡結構隻有三層,比較簡單,卷積核大小分别為9、1、 5

網絡輸入image為33*33, 網絡的輸出為21*21

最原始的訓練資料隻有91張圖檔(bmp),每張圖檔的大小尺寸各不相同,通過分割,轉換成33*33和21*21的sub_images各有28800多張,形成了訓練資料集。33*33為網絡輸入,21*21為期望輸出(即為标簽)

問題一、

将原始圖檔經過插值放大再縮小,雖然得到的資料大小沒有變化,通過這種方法得到的資料作為LR的images(即LR_input),将原始圖檔作為HR的images(即HR_output),其實最終網絡所拟合的不過是這種放大再縮小的過程,這樣的做法來構造資料集似乎存在很大的局限性,是否有更好的方法。

問題二、

輸出為何是21*21

(已解決,33-(9-1)-(1-1)-(5-1)=21)

問題三、(已解決)

各版本的代碼在構造網絡訓練的輸入(33*33)和标簽(21*21)時,發現這兩塊圖檔并不是原始圖的同一個區域,這樣的資料對作為輸入和标簽好像沒有什麼太大的意義,這一塊不隻是了解的偏差還是應該就是這樣的

sub_input = input_[x:x+config.image_size, y:y+config.image_size] # [33 x 33]
sub_label = label_[x+int(padding):x+int(padding)+config.label_size, y+int(padding):y+int(padding)+config.label_size] # [21 x 21]
           

sub)input 是訓練的輸入,sub_label是訓練的标簽,期望輸出,通過中括号裡面的切片來看兩個不是同一個區域的

(已解決,每一張21*21的圖檔都是33*33的中間部分,兩邊都去掉了padding=6)

問題四:

論文中提到SRCNN首先使用雙三次(bicubic)插值将低分辨率圖像放大成目标尺寸,接着通過三層卷積網絡拟合非線性映射,最後輸出高分辨率圖像結果。但從代碼實作來看,如何展現将低分辨率圖像放大到目标尺寸???

         低分辨率圖像的得來:對原始的圖檔進行縮小再放大,圖像的像素大小并沒有改變(

代碼:https://github.com/tegg89/SRCNN-Tensorflow/blob/master/utils.py 中第58,59行) 

input_ = scipy.ndimage.interpolation.zoom(label_, (1./scale), prefilter=False)
input_ = scipy.ndimage.interpolation.zoom(input_, (scale/1.), prefilter=False)
           

經過這兩段代碼的操作得到的是否是低分辨率圖檔。

了解:代碼的第一行得到的是低分辨率,尺寸較小的圖檔,這是整個實驗的原始輸入,代碼的第二行表示利用插值技術将圖檔放大到目标尺寸,此步屬于實驗的資料預處理,因放大圖檔,增加了計算的複雜度,于是才有了FSRCNN在此處的第一個改進

繼續閱讀