整個網絡結構隻有三層,比較簡單,卷積核大小分别為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在此處的第一個改進