文章復(fù)現(xiàn):超分辨率網(wǎng)絡(luò)FSRCNN

SRCNN通過三個卷積層來完成對圖像的超分,也就是特征提取俱箱、特征映射和圖像重建国瓮。

但是其輸入需要預(yù)先插值為目標(biāo)尺寸,在速度上有一定的缺陷狞谱,難以應(yīng)用到實時的研究中乃摹,因此Dong等人(SRCNN的第一作者)又改進(jìn)了SRCNN,于是有了FSRCNN跟衅,其中的F代表Fast孵睬。

原文摘要

As a successful deep model applied in image super-resolution
(SR), the Super-Resolution Convolutional Neural Network (SRCNN)
has demonstrated superior performance to the previous hand-
crafted models either in speed and restoration quality. However, the high
computational cost still hinders it from practical usage that demands
real-time performance (24 fps). In this paper, we aim at accelerating the
current SRCNN, and propose a compact hourglass-shape CNN struc-
ture for faster and better SR. We re-design the SRCNN structure mainly
in three aspects. First, we introduce a deconvolution layer at the end
of the network, then the mapping is learned directly from the original
low-resolution image (without interpolation) to the high-resolution one.
Second, we reformulate the mapping layer by shrinking the input feature
dimension before mapping and expanding back afterwards. Third, we
adopt smaller filter sizes but more mapping layers. The proposed model
achieves a speed up of more than 40 times with even superior restora-
tion quality. Further, we present the parameter settings that can achieve
real-time performance on a generic CPU while still maintaining good
performance. A corresponding transfer strategy is also proposed for fast
training and testing across different upscaling factors.

其新的網(wǎng)絡(luò)架構(gòu)為:

FSRCNN

對于原來的SRCNN,其改進(jìn)主要有:

  1. 在網(wǎng)絡(luò)的最后加上了一個deconvolution層伶跷,也就是用來上采樣掰读,這樣子輸入的圖像就不用先進(jìn)行插值操作了秘狞,可以直接輸入LR圖像,然后得到HR圖像蹈集;
  2. 對于中間的特征映射層烁试,采用先收縮特征維,然后再展開的方式來進(jìn)行拢肆;
  3. 用更小的卷積核减响、更多的特征映射層;
  4. 激活函數(shù)使用帶參數(shù)的ReLU善榛,也就是PReLU辩蛋;

模型代碼

之前講過呻畸,用Pytorch寫代碼就是搭積木移盆,看著網(wǎng)絡(luò)結(jié)構(gòu)一點點寫就好,下面這行圖更清晰點(來自參考鏈接【2】):

其結(jié)構(gòu)就像是一個沙漏伤为,整體上是對稱的咒循,兩端比較粗,中間比較細(xì)绞愚。

Interestingly, the new structure looks like an hourglass, which is symmetri-
cal on the whole, thick at the ends, and thin in the middle.

class FSRCNN(nn.Module):
    def __init__(self, inchannels):
        super(FSRCNN, self).__init__()

        self.features = nn.Sequential(
            nn.Conv2d(in_channels=inchannels, out_channels=64, kernel_size=5, stride=1, padding=2, padding_mode='replicate'),
            nn.PReLU()
        )

        self.shrinking = nn.Sequential(
            nn.Conv2d(in_channels=64,out_channels=32,kernel_size=1, stride=1, padding=0, padding_mode='replicate'),
            nn.PReLU()
        )

        self.mapping = nn.Sequential(
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, stride =1, padding=1, padding_mode='replicate'),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, stride =1, padding=1, padding_mode='replicate'),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, stride =1, padding=1, padding_mode='replicate'),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, stride =1, padding=1, padding_mode='replicate'),
            nn.PReLU()
        )

        self.expanding = nn.Sequential(
            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=1, stride=1, padding=0),
            nn.PReLU()
        )

        self.deconv = nn.Sequential(
            nn.ConvTranspose2d(in_channels=64, out_channels=inchannels, kernel_size=9, stride=3, padding=4, padding_mode='replicate')

        )

    def forward(self, x):
        x = self.features(x)
        x = self.shrinking(x)
        x = self.mapping(x)
        x = self.expanding(x)
        x = self.deconv(x)

        return x

代碼解釋

整體上來說叙甸,F(xiàn)SRCNN就是分為上面5個部分:

  1. features
    用于從原始的LR圖像中提取特征,對于圖像的特征來說位衩,一般都是通過卷積來提取的裆蒸。這里注意一個敏感參數(shù)(原文說的是sensitive variable,我理解就是可以根據(jù)自己需求改變的參數(shù))就是filter的個數(shù)糖驴,也就是這一層卷積輸出的channel數(shù)量僚祷。
  2. shrinking
    這一部分的作用按照原作者說的意思就是減少計算量,個人覺得就是壓縮特征的緯度贮缕,比如上面我的代碼中通過這一層把64維的特征壓縮到32緯辙谜,自然減少了計算量。
  3. mapping
    這一層準(zhǔn)確的說叫做非線性映射感昼,Non-linear Mapping装哆,就是通過卷卷卷,對特征進(jìn)行非線性變換定嗓。按照作者的說法蜕琴,這一部分是對模型結(jié)果來說最重要的一部分。后面出文說這個宵溅。
  4. expanding
    這一層就是把上面壓縮的特征維還原凌简。
  5. deconvolution
    反卷積,這一層就是把上面經(jīng)過處理的特征還原成HR圖像层玲。

小總結(jié)

  1. 模型里面有幾個參數(shù)是可以自己根據(jù)自己的研究改變的号醉,包括:
  • 特征圖的數(shù)量:就是第一個卷積層輸出的channel數(shù)
  • 壓縮的特征維度:從上面的特征維壓縮到多少維反症?
  • 非線性映射層的數(shù)量:就是在mapping那一個模塊要有幾個卷積層(注意這里不改變channel數(shù))
  • 反卷積的倍數(shù):就是要將圖像放大多少倍
  1. 整個模型前面四個模塊總體上扮演了從低分LR圖像中提取特征的角色,然后最后一個模塊才是對圖像進(jìn)行上采樣畔派,可以根據(jù)自己不同的上采樣倍數(shù)需求進(jìn)行修改最后一個模塊铅碍,所以作者說比較好進(jìn)行遷移學(xué)習(xí)。
  2. 原作者說padding的方式對最后的結(jié)果微乎其微线椰,所以根據(jù)卷積核的大小都進(jìn)行了相應(yīng)的0填充胞谈,但是個人覺得這一步可以自己根據(jù)自己的研究來調(diào)整padding的方式,尤其是比較關(guān)注像元值的話憨愉。
  3. 為了訓(xùn)練更快烦绳,原作者還用了2步訓(xùn)練法,就是先用91-image dataset訓(xùn)練配紫,等收斂了(satureated径密?)之后再加入General-100數(shù)據(jù)集進(jìn)行fine-tuning。
  4. 對于卷積層使用的lr=10e-3躺孝,最后的反卷積層是lr=10e-4享扔。
  5. 上面代碼用的幾個參數(shù)(sensitive variable)跟原文不一致

思考

  1. 所謂的特征提取植袍,到底提取了什么惧眠?
  2. 所謂的非線性映射,到底做了啥于个?

存疑與注意點

  1. 原文中的結(jié)構(gòu)中非線性映射層是說的應(yīng)該是m個conv層后面跟上一個激活函數(shù)PReLU氛魁,不過我看網(wǎng)絡(luò)上很多人寫的都是每一個conv層后面都跟上一個PReLU,這個區(qū)別待試驗厅篓。秀存。。
  1. 最后一個反卷積層的參數(shù)要自己根據(jù)輸出的倍數(shù)仔細(xì)算一下贷笛。

參考

【1】DONG C, LOY C C, TANG X. Accelerating the Super-Resolution Convolutional Neural Network[C]//Computer Vision – ECCV 2016.Springer International Publishing,2016:391-407. 10.1007/978-3-319-46475-6_25.
【2】https://towardsdatascience.com/review-fsrcnn-super-resolution-80ca2ee14da4
【3】https://github.com/Lornatang/FSRCNN-PyTorch

本文由mdnice多平臺發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末应又,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子乏苦,更是在濱河造成了極大的恐慌株扛,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汇荐,死亡現(xiàn)場離奇詭異洞就,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掀淘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門旬蟋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人革娄,你說我怎么就攤上這事倾贰∶岬” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵匆浙,是天一觀的道長安寺。 經(jīng)常有香客問我,道長首尼,這世上最難降的妖魔是什么挑庶? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮软能,結(jié)果婚禮上迎捺,老公的妹妹穿的比我還像新娘。我一直安慰自己查排,他們只是感情好凳枝,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雹嗦,像睡著了一般范舀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上了罪,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音聪全,去河邊找鬼泊藕。 笑死,一個胖子當(dāng)著我的面吹牛难礼,可吹牛的內(nèi)容都是我干的娃圆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蛾茉,長吁一口氣:“原來是場噩夢啊……” “哼讼呢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谦炬,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤悦屏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后键思,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體础爬,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年吼鳞,在試婚紗的時候發(fā)現(xiàn)自己被綠了看蚜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡赔桌,死狀恐怖供炎,靈堂內(nèi)的尸體忽然破棺而出渴逻,到底是詐尸還是另有隱情,我是刑警寧澤音诫,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布裸卫,位于F島的核電站,受9級特大地震影響纽竣,放射性物質(zhì)發(fā)生泄漏墓贿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一蜓氨、第九天 我趴在偏房一處隱蔽的房頂上張望聋袋。 院中可真熱鬧,春花似錦穴吹、人聲如沸幽勒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啥容。三九已至,卻和暖如春顷霹,著一層夾襖步出監(jiān)牢的瞬間咪惠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工淋淀, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留遥昧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓朵纷,卻偏偏與公主長得像炭臭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袍辞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容