深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015
基于Mutil-Scale CNN的圖片語(yǔ)義分割、法向量估計(jì)
原文地址:http://blog.csdn.net/hjimce/article/details/50443995
作者:hjimce
一、相關(guān)理論
? ?2016年的第一篇博文,新的奮斗征程。本篇博文主要講解2015年ICCV的一篇paper:《Predicting?Depth,?Surface?Normals?and?Semantic?Labels?with?a?Common?Multi-Scale?Convolutional?Architecture》,文獻(xiàn)的主頁(yè):http://www.cs.nyu.edu/~deigen/dnl/。一開(kāi)始看到這篇文獻(xiàn)的名字,有點(diǎn)被嚇到了,我以為作者要采用mutil-task多任務(wù)特征學(xué)習(xí)的方法,用于估計(jì)單幅圖像的深度、法向量、語(yǔ)義分割三個(gè)任務(wù)。還以為paper即將采用跟文獻(xiàn)《Facial?Landmark?Detection?by?Deep?Multi-task?Learning》一樣的思想,進(jìn)行提高精度,最后仔細(xì)通讀全文才知道,其實(shí)這三個(gè)任務(wù)是獨(dú)立的,不是傳說(shuō)中的“多任務(wù)特征學(xué)習(xí)”,終于松了一口氣(因?yàn)橹翱础稒C(jī)器學(xué)習(xí)及其應(yīng)用2015》這本書(shū)的第一章的時(shí)候,講到了“魯邦多任務(wù)特征學(xué)習(xí)”,覺(jué)得好難,看不懂,所以就對(duì)多任務(wù)特征學(xué)習(xí)有點(diǎn)害怕)。這篇paper的思想其實(shí)很簡(jiǎn)單,說(shuō)白了就是在文獻(xiàn)《Depth?map?prediction?from?a?single?image?using?a?multi-scale?deep?network》的基礎(chǔ)上,改一改,精度稍微提高了一點(diǎn)點(diǎn),就這樣。
? ?基于多尺度的語(yǔ)義分割在FCN網(wǎng)絡(luò)中,早有耳聞,所以如果學(xué)過(guò)paper:《Fully Convolutional Networks for Semantic Segmentation?》 ,在學(xué)習(xí)這篇文獻(xiàn)的網(wǎng)絡(luò)架構(gòu)時(shí)會(huì)比較輕松。對(duì)于三維法向量估計(jì),這個(gè)需要懂一點(diǎn)點(diǎn)三維圖像學(xué)的知識(shí),一般只有搞到三維圖像的人才會(huì)去在意這篇paper的法向量估計(jì)算法,不然二維視覺(jué)很少用到,因?yàn)槲乙郧霸?jīng)搞過(guò)三維,所以對(duì)于三維的一些知識(shí)比較了解。還有另外一個(gè)是深度估計(jì),深度估計(jì)基本上沒(méi)變,都是繼承了文獻(xiàn)《Depth?map?prediction?from?a?single?image?using?a?multi-scale?deep?network》的方法。所以總得來(lái)說(shuō)我感覺(jué)這篇文獻(xiàn)的創(chuàng)新點(diǎn)不是很明顯,新的知識(shí)點(diǎn)很少,我們學(xué)起來(lái)也會(huì)比較輕松。
學(xué)習(xí)建議:要學(xué)習(xí)這篇paper,我個(gè)人感覺(jué)還是先要學(xué)《Depth?map?prediction?from?a?single?image?using?a?multi-scale?deep?network》,學(xué)了這篇文獻(xiàn),那么接著就非常容易了。
二、網(wǎng)絡(luò)架構(gòu)
網(wǎng)格結(jié)構(gòu)方面與文獻(xiàn)《Depth?map?prediction?from?a?single?image?using?a?multi-scale?deep?network》基本相似,可以說(shuō)是在這篇paper的基礎(chǔ)上做的修改,區(qū)別在于:
(1)采用了更深層的網(wǎng)絡(luò);
(2)增加了第三個(gè)尺度的網(wǎng)絡(luò),使得我們的輸出是更高分辨率的圖片(之前的paper輸出大小是55*77,現(xiàn)在最后網(wǎng)絡(luò)的輸出大小是109*147);
(3)與之前的思路有點(diǎn)不同,之前采用的方式是,先訓(xùn)練scale1,訓(xùn)練完成后,以scale?1的輸出作為scale?2的輸入。現(xiàn)在所采用的方式是:scale 1和scale 2聯(lián)合訓(xùn)練,最后固定這兩個(gè)尺度CNN,在訓(xùn)練scale 3。
我們先大體看一下網(wǎng)絡(luò)的總體架構(gòu):
網(wǎng)絡(luò)分成三個(gè)尺度的CNN模型,scale 1的輸入是原始圖片;scale 2 的輸入是原始圖片和scale 1的輸出;同樣,scale 3 的輸入是scale 2的輸出和原始圖片??赡芫W(wǎng)絡(luò)的結(jié)構(gòu),看起來(lái)有點(diǎn)龐大,其實(shí)不然,這個(gè)相比于前面的博文《基于DCNN的人臉特征點(diǎn)定位》簡(jiǎn)單多了。
?1、Scale?1?網(wǎng)絡(luò)架構(gòu)
網(wǎng)絡(luò)的輸入:原始圖片,輸入圖片大小為?三通道彩色圖片;
網(wǎng)絡(luò)的輸出:19*14大小的圖片;
下面是網(wǎng)絡(luò)第一個(gè)尺度的相關(guān)參數(shù),這個(gè)和文獻(xiàn)《Depth?map?prediction?from?a?single?image?using?a?multi-scale?deep?network》一樣,基本上是Alexnet。
本尺度的CNN不在細(xì)講,如果不知道怎么架構(gòu),可以好好閱讀文獻(xiàn):《Depth?map?prediction?from?a?single?image?using?a?multi-scale?deep?network》。
2、Scale?2?網(wǎng)絡(luò)架構(gòu)
(1)第一層網(wǎng)絡(luò)
輸入:原始圖片304*228(輸入320*240后,訓(xùn)練的時(shí)候,采用random?crop到304*208),經(jīng)過(guò)卷積后,得到74*55大小的圖片。相關(guān)參數(shù)如下:
[python]?view plaincopy
也就是特征圖個(gè)數(shù)為96,卷積的stride大小為2。池化采用重疊池化,池化stride大小為2。這樣卷積步的stride=2,池化步的stride=2,圖片的大小就縮小為原來(lái)的1/4(具體計(jì)算不再詳解,因?yàn)檫@些計(jì)算是非常基礎(chǔ)的東西了)。
(2)第二層網(wǎng)絡(luò)。輸入:除了第一層得到的特征圖之外,還有scale?1的輸出(把scale1的輸出圖片由19*14,放大4倍,然后進(jìn)行邊界處理,得到74*55的圖片)。
3、Scale?3?網(wǎng)絡(luò)結(jié)構(gòu)
個(gè)人感覺(jué)多加了這個(gè)尺度的網(wǎng)絡(luò),僅僅只是為了獲得更高分辨率的輸出。
(1)第一層網(wǎng)絡(luò)。與scale?2一樣,第一層網(wǎng)絡(luò)的輸入是原始圖片,然后進(jìn)行卷積池化,因?yàn)槲覀僺cale?3要得到更大分辨率的結(jié)果,于是作者就把池化的stride選擇為1,具體代碼如下:
[python]?view plaincopy
這樣經(jīng)過(guò)這一層的操作,我們可以得到147*109的圖片。
(2)第二層網(wǎng)絡(luò)。輸入第一層的特征圖,還有scale?2的輸出圖,在進(jìn)行卷積池化。相關(guān)參數(shù)如下:
[python]?view plaincopy(3)第三層網(wǎng)絡(luò)。后面都差不多,大同小異,具體就不在詳解了,看一下網(wǎng)絡(luò)的相關(guān)配置參數(shù):
[python]?view plaincopy(4)第四層網(wǎng)絡(luò)
[python]?view plaincopy
四、損失函數(shù)構(gòu)建
我覺(jué)得文獻(xiàn)的提出算法,如何構(gòu)造損失函數(shù)也是一大創(chuàng)新點(diǎn),所以我們還是要好好閱讀對(duì)于深度、法向量、語(yǔ)義分割這些損失函數(shù)是怎么構(gòu)建的。
(1)深度估計(jì)損失函數(shù)
這個(gè)與之前的那篇paper的構(gòu)造方法相同,也是采用作者所提出的縮放不變損失函數(shù),同時(shí)后面又加了一項(xiàng)elementwise?L2:
?
其中D和D*分別表示網(wǎng)絡(luò)深度預(yù)測(cè)值、實(shí)際的深度值。然后d=D-D*。
(2)法矢估計(jì)損失函數(shù)
因?yàn)榉ㄏ蛄渴侨S的,因此我們每層scale的輸出,就不應(yīng)該是一個(gè)單通道圖片了,而應(yīng)該改為3通道,用于分別預(yù)測(cè)一個(gè)三維向量的(x,y,z)值。同時(shí)我們要知道法向量指的是長(zhǎng)度為1的歸一化向量,因此在輸出三維V向量后,我們還需要把它歸一化,然后接著才能定義計(jì)算損失函數(shù):
?
因?yàn)轭A(yù)測(cè)值N和真實(shí)值N*向量的模長(zhǎng)都為1,所以其實(shí)上面的損失函數(shù)說(shuō)白了就是以兩個(gè)向量的角度差,作為距離度量。
真實(shí)的法向量的獲取方法:可能是沒(méi)有訓(xùn)練數(shù)據(jù)的原因,所以文獻(xiàn)法向量訓(xùn)練數(shù)據(jù)的獲取方法,是通過(guò)每個(gè)像素點(diǎn)的深度值,獲得三維空間中每個(gè)像素點(diǎn)的位置,也就是相當(dāng)于點(diǎn)云。然后采用最小二乘平面擬合,擬合出每個(gè)點(diǎn)鄰域范圍內(nèi)平面,以平面的法向量作為每個(gè)像素點(diǎn)的法矢(這個(gè)因?yàn)槲抑案氵^(guò)三維的重建、點(diǎn)云處理,所以對(duì)于三維點(diǎn)云法向量的求取會(huì)比較熟悉,如果沒(méi)有接觸過(guò)三維圖形學(xué)的,可以跳過(guò)不看,或者可以學(xué)一學(xué)我的博客:?http://blog.csdn.net/hjimce/article/category/5570255?關(guān)于三維圖形學(xué)的知識(shí),可以直接看點(diǎn)云重建)
(3)語(yǔ)義分割損失函數(shù)
因?yàn)檎Z(yǔ)義分割,就相當(dāng)于給每個(gè)像素點(diǎn)做分類(lèi),也就是相當(dāng)于一個(gè)多分類(lèi)問(wèn)題,所以自然而然采用softmax,損失函數(shù)采用交叉熵:
?
其中:
?
這個(gè)是softmax的相關(guān)知識(shí)了,不熟悉的趕緊補(bǔ)一下。不然后面遇到CNN圖片分類(lèi),就要抓狂了,softmax是基礎(chǔ)知識(shí)。
五、網(wǎng)絡(luò)訓(xùn)練
(1)訓(xùn)練流程
訓(xùn)練方法采用的都是隨機(jī)梯度下降法,首先我們訓(xùn)練把scale?1和scale?2?聯(lián)合起來(lái)訓(xùn)練,也就是說(shuō)我們?cè)谟?xùn)練scale?2的時(shí)候,scale1的參數(shù)也是要更新的,這個(gè)與另外一篇paper:《Depth?Map?Prediction?from?a?Single?Image?using?a?Multi-Scale?Deep?Network》的訓(xùn)練方法不同。然后scale?3的訓(xùn)練和前面兩個(gè)尺度的訓(xùn)練是分開(kāi)的,我們先訓(xùn)練完了scale?1、scale?2,訓(xùn)練完畢后,固定這兩個(gè)尺度的參數(shù),然后繼續(xù)訓(xùn)練scale?3(換一種說(shuō)法就是訓(xùn)練scale?3的時(shí)候,scale?1\2的參數(shù)是不更新的)。
(2)訓(xùn)練參數(shù)
具體的訓(xùn)練參數(shù),還是參考作者給的代碼中的conf網(wǎng)絡(luò)配置文件,里面可以看到每層的學(xué)習(xí)率,以及其它的一些相關(guān)參數(shù)。參數(shù)初始化:除了scale?1前面幾層卷積層是用了Alexnet訓(xùn)練好的參數(shù),作為初始值。其它的全部采用隨機(jī)初始化的方法。Batch?size大小選擇32。
參考文獻(xiàn):
1、《Predicting?Depth,?Surface?Normals?and?Semantic?Labels?with?a?Common?Multi-Scale?Convolutional?Architecture》
2、http://www.cs.nyu.edu/~deigen/dnl/
3、《Depth?map?prediction?from?a?single?image?using?a?multi-scale?deep?network》
**********************作者:hjimce ? 時(shí)間:2016.1.1 ?聯(lián)系QQ:1393852684 ? 地址:http://blog.csdn.net/hjimce? ?原創(chuàng)文章,版權(quán)所有,轉(zhuǎn)載請(qǐng)保留本行信息(不允許刪除)
總結(jié)
以上是生活随笔為你收集整理的深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深度学习(二十四)矩阵分解之基于k-me
- 下一篇: 深度学习(二十六)Network In