當(dāng)UNet遇見(jiàn)ResNet會(huì)發(fā)生什么?
點(diǎn)擊上方“小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
這篇文章主要以幾篇經(jīng)典的分割論文為切入點(diǎn),淺談一下當(dāng)Unet遇見(jiàn)ResNet會(huì)發(fā)生什么?
首先回顧一下UNet,UNet的結(jié)構(gòu)如下圖所示:

「從UNet的網(wǎng)絡(luò)結(jié)構(gòu)我們會(huì)發(fā)現(xiàn)兩個(gè)最主要的特點(diǎn),一個(gè)是它的U型結(jié)構(gòu),一個(gè)是它的跳層連接。」 其中UNet的編碼器一共有4次下采樣來(lái)獲取高級(jí)語(yǔ)義信息,解碼器自然對(duì)應(yīng)了4次上采樣來(lái)進(jìn)行分辨率恢復(fù),為了減少下采樣過(guò)程帶來(lái)的空間信息損失跳層連接被引入了,通過(guò)Concat的方式使得上采樣恢復(fù)的特征圖中包含更多l(xiāng)ow-level的語(yǔ)義信息,使得結(jié)果的精細(xì)程度更好。
使用轉(zhuǎn)置卷積的UNet參數(shù)量是31M左右,如果對(duì)其channel進(jìn)行縮小例如縮小兩倍,參數(shù)量可以變?yōu)?.75M左右,縮小4倍變成2M左右,可以說(shuō)是非常的輕量級(jí)了。UNet不僅僅在醫(yī)學(xué)分割中被大量應(yīng)用,也在工業(yè)界發(fā)揮了很大的作用
3. ResNet
再來(lái)簡(jiǎn)單回顧一下ResNet。
在ResNet之前普遍認(rèn)為網(wǎng)絡(luò)的深度越深,模型的表現(xiàn)就更好,因?yàn)镃NN越深越能提取到更高級(jí)的語(yǔ)義信息。但論文的實(shí)驗(yàn)發(fā)現(xiàn),通過(guò)和淺層網(wǎng)絡(luò)一樣的方式來(lái)構(gòu)建深層網(wǎng)絡(luò),結(jié)果性能反而下降了,這是因?yàn)榫W(wǎng)絡(luò)越深越難訓(xùn)練。實(shí)驗(yàn)如Figure1所示:

因此網(wǎng)絡(luò)的深度不能隨意的加深,前面介紹的GoogLeNet和VGG16/19均在加深深度這件事情上動(dòng)用了大量的技巧。那么到底什么是殘差呢?
首先,淺層網(wǎng)絡(luò)都是希望學(xué)習(xí)到一個(gè)恒等映射函數(shù),其中指的是用這個(gè)特征/函數(shù)來(lái)代表原始的的信息,但隨著網(wǎng)絡(luò)的加深這個(gè)恒等映射變得越來(lái)越難以擬合。即是用BN這種技巧存在,在深度足夠大的時(shí)候網(wǎng)絡(luò)也會(huì)難以學(xué)習(xí)這個(gè)恒等映射關(guān)系。因此ResNet提出將網(wǎng)絡(luò)設(shè)計(jì)為,然后就可以轉(zhuǎn)換為學(xué)習(xí)一個(gè)殘差函數(shù),只要?dú)埐顬?span style="cursor: pointer;">,就構(gòu)成了一個(gè)恒等映射,并且相對(duì)于擬合恒等映射關(guān)系,擬合殘差更容易。殘差結(jié)構(gòu)具體如Figure2所示,identity mapping表示的就是恒等映射,即是將淺層網(wǎng)絡(luò)的特征復(fù)制來(lái)和殘差構(gòu)成新的特征。其中恒等映射后面也被叫作跳躍連接(skip connrection)或者短路連接(shortcut connection),這一說(shuō)法一直保持到今天。同時(shí)我們可以看到一種極端的情況是殘差映射為,殘差模塊就只剩下,相當(dāng)于什么也不做,這至少不會(huì)帶來(lái)精度損失,這個(gè)結(jié)構(gòu)還是比較精巧的。

為什么殘差結(jié)構(gòu)是有效的呢?這是因?yàn)橐霘埐钪蟮奶卣饔成鋵?duì)輸出的變化更加敏感,也即是說(shuō)梯度更加,更容易訓(xùn)練。從圖2可以推導(dǎo)一下殘差結(jié)構(gòu)的梯度計(jì)算公式,假設(shè)從淺層到深層的學(xué)習(xí)特征,其中就是帶權(quán)重的卷積之后的結(jié)果,我們可以反向求出損失函數(shù)對(duì)的提取,其中代表?yè)p失函數(shù)在最高層的梯度,小括號(hào)中的表示殘差連接可以無(wú)損的傳播梯度,而另外一項(xiàng)殘差的梯度則需要經(jīng)過(guò)帶有可學(xué)習(xí)參數(shù)的卷積層。另外殘差梯度不會(huì)巧合到全部為,而且就算它非常小也還有這一項(xiàng)存在,因此梯度會(huì)穩(wěn)定的回傳,不用擔(dān)心梯度消失。同時(shí)因?yàn)闅埐钜话銜?huì)比較小,殘差學(xué)習(xí)需要學(xué)習(xí)的內(nèi)容少,學(xué)習(xí)難度也變小,學(xué)習(xí)就更容易。
4. 當(dāng)UNet初見(jiàn)ResNet
我們知道UNet做下采樣的BackNone是普通的CBR模塊(Conv+BN+ReLU)堆疊的,一個(gè)自然的想法就是如果將學(xué)習(xí)更強(qiáng)的ResNet當(dāng)作UNet的BackBone效果是否會(huì)更好呢?
CVPR 2017的LinkNet給出了答案。LinkNet的網(wǎng)絡(luò)結(jié)構(gòu)如下所示:
其中,conv 代表卷積,full-conv 代表全卷積,/2代表下采樣的步長(zhǎng)是2,*2代表上采樣的因子是2。在卷積層之后添加 BN,后加 ReLU。左半部分表示編碼,右半部分表示解碼。編碼塊基于ResNet18。編解碼模塊如下所示。


這項(xiàng)工作的主要貢獻(xiàn)是在原始的UNet中引入了殘差連接,并直接將編碼器與解碼器連接來(lái)提高準(zhǔn)確率,一定程度上減少了處理時(shí)間。通過(guò)這種方式,保留編碼部分中不同層丟失的信息,同時(shí),在進(jìn)行重新學(xué)習(xí)丟失的信息時(shí)并未增加額外的參數(shù)與操作。在Cittycapes和CamVID數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果證明殘差連接的引入(LinkNet without bypass)使得mIOU獲得了提升。


這篇論文的主要提升技巧在于它的bypass技巧,但我們也可以看到ResNet也進(jìn)一步對(duì)網(wǎng)絡(luò)的效果帶來(lái)了改善,所以至少說(shuō)明ResNet是可以當(dāng)成BackBone應(yīng)用在UNet的,這樣結(jié)果至少不會(huì)差。
5. 當(dāng)UNet再見(jiàn)ResNet
CVPR 2018北郵在DeepGlobe Road Extraction Challenge全球衛(wèi)星圖像道路提取)比賽中勇奪冠軍,他們提出了一個(gè)新網(wǎng)絡(luò)名為D-LinkNet,論文鏈接以及代碼/PPT見(jiàn)附錄。

D-LinkNet使用LinkNet作為基本骨架,使用在ImageNet數(shù)據(jù)集上與訓(xùn)練好的ResNet作為網(wǎng)絡(luò)的encoder,并在中心部分添加帶有shortcut的dilated-convolution層,使得整個(gè)網(wǎng)絡(luò)識(shí)別能力更強(qiáng)、接收域更大、融合多尺度信息。網(wǎng)絡(luò)中心部分展開(kāi)示意圖如下:

這篇論文和ResNet的關(guān)系實(shí)際上和LinkNet表達(dá)出的意思一致,也即是將其應(yīng)用在BackBone部分增強(qiáng)特征表達(dá)能力。
這篇文章其實(shí)是比上兩篇文章早的,但我想放到最后這個(gè)位置來(lái)談一下,這篇文章是DLMIA 2016的文章,名為:「The Importance of Skip Connections in Biomedical Image Segmentation」 。這一網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,對(duì)圖的解釋來(lái)自akkaze-鄭安坤的文章(https://zhuanlan.zhihu.com/p/100440276):

(a) 整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)
使用下采樣(藍(lán)色):這是一條收縮路徑。
上采樣(黃色):這是一條不斷擴(kuò)大的路徑。
這是一個(gè)類(lèi)似于U-Net的FCN架構(gòu)。
并且從收縮路徑到擴(kuò)展路徑之間存在很長(zhǎng)的跳過(guò)連接。
(b)瓶頸區(qū)
使用,因此稱(chēng)為瓶頸。它已在ResNet中使用。
在每次轉(zhuǎn)化前都使用,這是激活前ResNet的想法。
(c)基本塊
兩個(gè)卷積,它也用在ResNet中。
(d)簡(jiǎn)單塊
個(gè)卷積
(b)-(d)
所有塊均包含短跳轉(zhuǎn)連接。
下面的Table1表示整個(gè)網(wǎng)絡(luò)的維度變化:

接下來(lái)是這節(jié)要分析的重點(diǎn)了,也就是長(zhǎng)短跳過(guò)網(wǎng)絡(luò)中兩種不同類(lèi)型的跳躍連接究竟對(duì)UNet的結(jié)果參生了什么影響?
這里訓(xùn)練集以張電子顯微鏡(EM)圖像為數(shù)據(jù)集,尺寸為。張圖像用于訓(xùn)練,其余張圖像用于驗(yàn)證。而測(cè)試集是另外張圖像。
下面的Figure3為我們展示了長(zhǎng)短跳過(guò)連接,以及只有長(zhǎng)跳過(guò)連接,只有短跳過(guò)連接對(duì)準(zhǔn)確率和損失帶來(lái)的影響:


下面來(lái)看一可視化權(quán)重分析:

(a)長(zhǎng)跳和短跳連接
當(dāng)長(zhǎng)跳轉(zhuǎn)和短跳轉(zhuǎn)連接都存在時(shí),參數(shù)更新看起來(lái)分布良好。
(b)僅長(zhǎng)跳連接具有9個(gè)重復(fù)的簡(jiǎn)單塊
刪除短跳過(guò)連接后,網(wǎng)絡(luò)的較深部分幾乎沒(méi)有更新。
當(dāng)保留長(zhǎng)跳連接時(shí),至少可以更新模型的淺層部分。
(c)僅長(zhǎng)跳連接具有3個(gè)重復(fù)的簡(jiǎn)單塊
當(dāng)模型足夠淺時(shí),所有層都可以很好地更新。
(d)僅長(zhǎng)跳連接具有7個(gè)重復(fù)的簡(jiǎn)單塊,沒(méi)有BN。
論文給出的結(jié)論如下:
沒(méi)有批量歸一化的網(wǎng)絡(luò)向網(wǎng)絡(luò)中心部分參數(shù)更新會(huì)不斷減少。
根據(jù)權(quán)值分析的結(jié)論,由于梯度消失的問(wèn)題(只有短跳連接可以緩解),無(wú)法更有效地更新靠近模型中心的層。
所以這一節(jié)介紹的是將ResNet和UNet結(jié)合之后對(duì)跳躍連接的位置做文章,通過(guò)這種長(zhǎng)跳短跳連接可以使得網(wǎng)絡(luò)獲得更好的性能。
7. 總結(jié)
這篇文章只是對(duì)我個(gè)人閱讀ResNet相關(guān)的類(lèi)UNet分割結(jié)構(gòu)的一點(diǎn)小總結(jié),希望能起到一點(diǎn)作用科普和給你帶來(lái)一點(diǎn)點(diǎn)啟發(fā)。
好消息!
小白學(xué)視覺(jué)知識(shí)星球
開(kāi)始面向外開(kāi)放啦??????
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程 在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講 在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車(chē)道線檢測(cè)、車(chē)輛計(jì)數(shù)、添加眼線、車(chē)牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。 下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講 在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。 交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~

