图像目标分割_4 DeepLab-V1
6.4.1 DeepLab 背景
相比于傳統(tǒng)的視覺算法(SIFT或HOG),Deep-CNN以其end-to-end方式獲得了很好的效果。這樣的成功部分可以歸功于Deep-CNN對(duì)圖像轉(zhuǎn)換的平移不變性(invariance),這根本是源于重復(fù)的池化和下采樣組合層。平移不變性增強(qiáng)了對(duì)數(shù)據(jù)分層抽象的能力,但同時(shí)可能會(huì)阻礙低級(jí)(low-level)視覺任務(wù),例如姿態(tài)估計(jì)、語(yǔ)義分割等,在這些任務(wù)中我們傾向于精確的定位而不是抽象的空間關(guān)系。
Deep-CNN在圖像標(biāo)記任務(wù)中存在兩個(gè)技術(shù)障礙:
-
信號(hào)下采樣:在Deep-CNN中重復(fù)最大池化和下采樣帶來(lái)的分辨率下降問題,分辨率的下降會(huì)丟失細(xì)節(jié)。
- 理解:也就是小物體信息無(wú)法重建 (假設(shè)有四個(gè)pooling layer 則 任何小于 2^4 = 16 pixel 的物體信息將理論上無(wú)法重建。)
-
空間不敏感(invariance):分類器獲取以對(duì)象中心的決策是需要空間變換的不變性,這就限制了Deep-CNN的定位精度
- 比如對(duì)于同一張圖片進(jìn)行空間變換(如平移、旋轉(zhuǎn)),其圖片分類結(jié)果是不變的。對(duì)于圖像分割等Low-Level Vision Task,對(duì)于一張圖片進(jìn)行空間變換后,其結(jié)果是改變的。
High-Level & Low-level vision task
CNN適合于Hight-Level Vision Task(如圖像分類),不太適合于Low-Level Vision Task(如圖像分割、姿態(tài)估計(jì))。
-
lower level feature :也叫高級(jí)的語(yǔ)義信息,包括邊緣檢測(cè),角點(diǎn)檢測(cè),顏色之類的對(duì)細(xì)節(jié)敏感、抽象度比較低的任務(wù)。
-
high level feature:一些表面,表觀的信息,比如紋理、邊緣。目標(biāo)檢測(cè)、圖像分類等對(duì)細(xì)節(jié)信息不敏感、抽象度比較高的任務(wù)。
6.4.2 Deeplab V1介紹
在實(shí)驗(yàn)中發(fā)現(xiàn)DCNNs做語(yǔ)義分割時(shí)精準(zhǔn)度不夠的問題,根本原因是DCNNs的高級(jí)特征的平移不變性(即高層次特征映射)。
- DeepLab是結(jié)合了深度卷積神經(jīng)網(wǎng)絡(luò)(DCNNs)和概率圖模型(DenseCRFs)的方法。
- 系統(tǒng)與其他先進(jìn)模型的主要區(qū)別在于DenseCRFs和DCNN的結(jié)合。是將每個(gè)像素視為CRF節(jié)點(diǎn),利用遠(yuǎn)程依賴關(guān)系,并使用CRF推理直接優(yōu)化DCNN的損失函數(shù)。拓展:Koltun(2011)的工作表明完全連接的CRF在語(yǔ)義分割下非常有效。
- 系統(tǒng)與其他先進(jìn)模型的主要區(qū)別在于DenseCRFs和DCNN的結(jié)合。是將每個(gè)像素視為CRF節(jié)點(diǎn),利用遠(yuǎn)程依賴關(guān)系,并使用CRF推理直接優(yōu)化DCNN的損失函數(shù)。拓展:Koltun(2011)的工作表明完全連接的CRF在語(yǔ)義分割下非常有效。
6.4.2.1 密集分類下的卷積神經(jīng)網(wǎng)絡(luò)
1、結(jié)構(gòu)
?
- 1、把最后的全連接層FC6、7、8改造成卷積層
- 2、pool4的stride由2變?yōu)?,則緊接著的conv5_1, conv5_2和conv5_3中hole size為2。接著pool5由2變?yōu)?, 則后面的fc6中hole size為4。
- 3、fc7,8為標(biāo)準(zhǔn)卷積
注:由于Hole(Atrous convolution)算法讓feature map更加dense,所以網(wǎng)絡(luò)直接用差值升采樣就能獲得很好的結(jié)果,而不用去學(xué)習(xí)升采樣的參數(shù)了(FCN中采用了de-convolution)
問題:FCN中有兩個(gè)關(guān)鍵,一個(gè)是pooling減小圖像尺寸增大感受野,另一個(gè)是upsampling擴(kuò)大圖像尺寸。在先減小再增大尺寸的過程中,肯定有一些信息損失掉了,那么能不能設(shè)計(jì)一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?答案就是dilated conv/atrous conv
2、空洞卷積的使用
DeepLab是采用的atrous(帶孔)算法擴(kuò)展感受野,獲取更多的上下文信息
從兩個(gè)角度考慮空洞卷積:
-
相當(dāng)于在標(biāo)準(zhǔn)概念的kernel(卷積核)中,相鄰點(diǎn)之間添加(rate - 1)個(gè)0,然后使用擴(kuò)張后的kernel(卷積核)與原圖進(jìn)行卷積。下面的圖rate=2,相當(dāng)于標(biāo)準(zhǔn)的3x3卷積核變?yōu)?x5卷積核,每一行中間添加(2-1)個(gè)0
- 也就是說(shuō)3x3的kernel在rate為2的情況下得到相當(dāng)于5x5的空洞kernel,但是只有圖中的9個(gè)點(diǎn)的權(quán)重不為0,其余都為0。 可以看到雖然kernel size只有3x3,但是這個(gè)卷積的感受野已經(jīng)增大到了7x7。
- 也就是說(shuō)3x3的kernel在rate為2的情況下得到相當(dāng)于5x5的空洞kernel,但是只有圖中的9個(gè)點(diǎn)的權(quán)重不為0,其余都為0。 可以看到雖然kernel size只有3x3,但是這個(gè)卷積的感受野已經(jīng)增大到了7x7。
-
1、dilated的好處是不做pooling損失信息的情況下,加大了感受野,讓每個(gè)卷積輸出都包含較大范圍的信息。采樣率為r的空洞卷積插入r?1個(gè)零,將k×k的卷積核變?yōu)閗e=k+(k?1)(r?1)而不增加計(jì)算量。下圖表示含有空洞卷積和不用空洞卷積的效果。結(jié)果就是使用采樣率計(jì)算更加密集的特征映射。
- 2、增大感受野的同時(shí),不增加參數(shù)數(shù)量
3、問題:
- signal down-sampling
- 問題:DCNNs每一層重復(fù)執(zhí)行下采樣 (如max-pooling和downsampling),導(dǎo)致signal分辨率降低。
- 將stride改小,能得到更加dense的feature map,可是卻也帶來(lái)了另外一個(gè)問題即receptive field(RF)變小的問題。
- 將Hole(Atrous convolution)算法應(yīng)用到DCNNs模型上來(lái)擴(kuò)展感受野,獲取更多的上下文信息。
- spatial “insensitivity”(invariance)
- 問題:以獲取圖像中物體為核心的決策(High Level Vision Task,如圖片分類、目標(biāo)檢測(cè)任務(wù))需要空間不變性,即DCNNs的high-level的平移不變性(invariance),導(dǎo)致DCNNs做語(yǔ)義分割時(shí)定位精準(zhǔn)度不夠。
- 將DCNNs層的響應(yīng)和 完全連接條件隨機(jī)場(chǎng)(Fully Connected CRFs)結(jié)合(DeepLab是由兩個(gè)非常成熟的模塊(DCNN和CRFs)級(jí)聯(lián)而成)
5、API實(shí)現(xiàn)
tf.nn.atrous_conv2d(value, filters, rate, padding, name=None)
value: 指需要做卷積的輸入圖像,要求是一個(gè)4維Tensor,具有[batch, height, width, channels]這樣的shape,具體含義是[訓(xùn)練時(shí)一個(gè)batch的圖片數(shù)量, 圖片高度, 圖片寬度, 圖像通道數(shù)]
filters: 相當(dāng)于CNN中的卷積核,要求是一個(gè)4維Tensor,具有[filter_height, filter_width, channels, out_channels]這樣的shape,具體含義是[卷積核的高度,卷積核的寬度,圖像通道數(shù),卷積核個(gè)數(shù)],同理這里第三維channels,就是參數(shù)value的第四維
rate: 要求是一個(gè)int型的正數(shù),正常的卷積操作應(yīng)該會(huì)有stride(即卷積核的滑動(dòng)步長(zhǎng)),但是空洞卷積是沒有stride參數(shù)的,這一點(diǎn)尤其要注意。取而代之,它使用了新的rate參數(shù),那么rate參數(shù)有什么用呢?它定義為我們?cè)谳斎雸D像上卷積時(shí)的采樣間隔,你可以理解為卷積核當(dāng)中穿插了(rate-1)數(shù)量的“0”,把原來(lái)的卷積核插出了很多“洞洞”,這樣做卷積時(shí)就相當(dāng)于對(duì)原圖像的采樣間隔變大了。具體怎么插得,可以看后面更加詳細(xì)的描述。此時(shí)我們很容易得出rate=1時(shí),就沒有0插入,此時(shí)這個(gè)函數(shù)就變成了普通卷積。
padding: string類型的量,只能是”SAME”,”VALID”其中之一,這個(gè)值決定了不同邊緣填充方式。
img =tf.constant(value=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.float32) img =tf.concat(values=[img,img],axis=3) filter =tf.constant(value=1, shape=[3,3,2,5], dtype=tf.float32) out_img1 =tf.nn.atrous_conv2d(value=img, filters=filter, rate=1, padding='SAME') out_img2 =tf.nn.atrous_conv2d(value=img, filters=filter, rate=1, padding='VALID') out_img3 =tf.nn.atrous_conv2d(value=img, filters=filter, rate=2, padding='SAME') #error #out_img4 = tf.nn.atrous_conv2d(value=img, filters=filter, rate=2, padding='VALID') print('rate=1, SAME mode result:') print(sess.run(out_img1.numpy())) print('rate=1, VALID mode result:') print(sess.run(out_img2.numpy())) print('rate=2, SAME mode result:') print(sess.run(out_img3.numpy())) # error #print 'rate=2, VALID mode result:' #print(sess.run(out_img4))6.4.2.2 CRF的應(yīng)用
1、背景
- DCNN的預(yù)測(cè)物體的位置是粗略的,沒有確切的輪廓。圖像輸入CNN是一個(gè)被逐步抽象的過程,原來(lái)的位置信息會(huì)隨著深度而減少甚至消失
2、CRFs for accurate localization
- CRF:簡(jiǎn)單來(lái)講就是每個(gè)像素點(diǎn)作為節(jié)點(diǎn),像素與像素間的關(guān)系作為邊,即構(gòu)成了一個(gè)條件隨機(jī)場(chǎng)。通過二元?jiǎng)莺瘮?shù)描述像素點(diǎn)與像素點(diǎn)之間的關(guān)系,鼓勵(lì)相似像素分配相同的標(biāo)簽,而相差較大的像素分配不同標(biāo)簽。
- CRF在傳統(tǒng)圖像處理上主要做平滑處理。就是在決定一個(gè)位置的像素值時(shí),會(huì)考慮周圍鄰居的像素值,這樣能抹除一些噪音。
- 但對(duì)于CNN來(lái)說(shuō),short-range CRFs可能會(huì)起到反作用,因?yàn)槲覀兊哪繕?biāo)是恢復(fù)局部信息,而不是進(jìn)一步平滑圖像。引入fully connected CRF來(lái)考慮全局的信息。
效果:
3、論文CRF設(shè)置
全連接CRF模型使用的能量函數(shù)E(x)E(x)?E(x)=\sum_i\theta_i(x_i)+\sum_{ij}\theta_{ij}(x_i,y_j)E(x)=?i?∑??θ?i??(x?i??)+?ij?∑??θ?ij??(x?i??,y?j??)
-
x:對(duì)全局pixels的概率預(yù)測(cè)分布
-
xi:其中一個(gè)pixel的概率預(yù)測(cè)分布
-
θi:一元?jiǎng)莺瘮?shù) unary potential function,定義在觀測(cè)序列位置i的狀態(tài)特征函數(shù),用于刻畫觀測(cè)序列對(duì)標(biāo)記變量的影響
- 則:
\theta_i(x_i)=-\log P(x_i)θ?i??(x?i??)=?logP(x?i??)
-
θi:二元?jiǎng)莺瘮?shù) unary potential function,定義在不同觀測(cè)位置上的轉(zhuǎn)移特征函數(shù),用于刻畫變量之間的相關(guān)關(guān)系以及觀測(cè)序列對(duì)其影響(實(shí)質(zhì)是像素之間的關(guān)系)
-
則:
-
其中k^m(f_i,f_j)k?m??(f?i??,f?j??)為(f_i,f_j)(f?i??,f?j??)之間的高斯核,fi是像素i的特征向量,例如像素點(diǎn)i的特征向量fi用(x,y,r,g,b)表示。對(duì)應(yīng)的權(quán)重為w_{m}w?m??
-
\theta_{ij} (x_i,y_j)=u(x_i,x_j)\sum^K_{m=1}\omega_m\cdot k^m(f_i,f_j)θ?ij??(x?i??,y?j??)=u(x?i??,x?j??)?m=1?∑?K??ω?m???k?m??(f?i??,f?j??)
-
在DeepLab中高斯核采用雙邊位置和顏色組合,式為:第一核取決于像素位置(p)和像素顏色強(qiáng)度(I),第二個(gè)核取決于像素位置(p).
- \omega_1\exp-\frac{||p_i-p_j||^2}{2\sigma_{\alpha}^2}-\frac{||I_i-I_j||^2}{2\sigma_{\beta}^2})+\omega_2\exp(-\frac{||p_i-p_j||^2}{2\sigma_{\gamma}^2})ω?1??exp??2σ?α?2????∣∣p?i???p?j??∣∣?2??????2σ?β?2????∣∣I?i???I?j??∣∣?2????)+ω?2??exp(??2σ?γ?2????∣∣p?i???p?j??∣∣?2????)
-
總結(jié):二元?jiǎng)莺瘮?shù)是描述像素和像素之間的關(guān)系,如果比較相似,那可能是一類,否則就裂開,這可以細(xì)化邊緣。一般的二元?jiǎng)莺瘮?shù)只取像素點(diǎn)與周圍像素之間的邊,這里使用的是全連接,即像素點(diǎn)與其他所有像素之間的關(guān)系。
6.4.2.3 主要貢獻(xiàn)
- 速度:帶atrous算法的DCNN可以保持8FPS的速度,全連接CRF平均推斷需要0.5s
- 準(zhǔn)確:在PASCAL語(yǔ)義分割挑戰(zhàn)中獲得了第二的成績(jī)
- 簡(jiǎn)單:DeepLab是由兩個(gè)非常成熟的模塊(DCNN和CRFs)級(jí)聯(lián)而成
6.4.3 DeepLab V1 實(shí)驗(yàn)
- 損失函數(shù):輸出的特征圖與ground truth下采樣8倍做交叉熵和。
- 訓(xùn)練數(shù)據(jù)label:對(duì)原始Ground Truth進(jìn)行下采樣8倍,得到訓(xùn)練label。
- 預(yù)測(cè)數(shù)據(jù)label:對(duì)預(yù)測(cè)結(jié)果進(jìn)行雙線性上采樣8倍,得到預(yù)測(cè)結(jié)果。
測(cè)試細(xì)節(jié):
| 數(shù)據(jù)集 | PASCAL VOC 2012 segmentation benchmark |
| DCNN模型 | 權(quán)重采用預(yù)訓(xùn)練的VGG16 |
| DCNN損失函數(shù) | 交叉熵 |
| 訓(xùn)練器 | SGD,batch=20 |
| 學(xué)習(xí)率 | 初始為0.001,最后的分類層是0.01。每2000次迭代乘0.1 |
| 權(quán)重 | 0.9的動(dòng)量, 0.0005的衰減 |
- DeepLab由DCNN和CRF組成,訓(xùn)練策略是分段訓(xùn)練,即DCNN的輸出是CRF的一元?jiǎng)莺瘮?shù),在訓(xùn)練CRF時(shí)是固定的。
- DeepLab由DCNN和CRF組成,訓(xùn)練策略是分段訓(xùn)練,即DCNN的輸出是CRF的一元?jiǎng)莺瘮?shù),在訓(xùn)練CRF時(shí)是固定的。在對(duì)DCNN做了fine-tune后,對(duì)CRF做交叉驗(yàn)證。這里使用ω2=3和σγ=3在小的交叉驗(yàn)證集上尋找最佳的\omega_1,\sigma_{\alpha},\sigma_{\beta}ω?1??,σ?α??,σ?β??,采用從粗到細(xì)的尋找策略。
CRF和多尺度的表現(xiàn)
經(jīng)過DeepLap之后的效果和之前的效果對(duì)比:
總結(jié)
以上是生活随笔為你收集整理的图像目标分割_4 DeepLab-V1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构之二叉树:二叉查找树的先序、中序
- 下一篇: 【Pytorch神经网络理论篇】 33