乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      圖像語(yǔ)義分割入門(mén):FCN/U-Net網(wǎng)絡(luò)解析

       新用戶0118F7lQ 2022-03-17

      重磅干貨,第一時(shí)間送達(dá)

      圖像語(yǔ)義分割(Semantic Segmentation)是圖像處理和是機(jī)器視覺(jué)技術(shù)中關(guān)于圖像理解的重要一環(huán),也是 AI 領(lǐng)域中一個(gè)重要的分支。語(yǔ)義分割即是對(duì)圖像中每一個(gè)像素點(diǎn)進(jìn)行分類(lèi),確定每個(gè)點(diǎn)的類(lèi)別(如屬于背景、人或車(chē)等),從而進(jìn)行區(qū)域劃分。目前,語(yǔ)義分割已經(jīng)被廣泛應(yīng)用于自動(dòng)駕駛、無(wú)人機(jī)落點(diǎn)判定等場(chǎng)景中。

      圖片

      圖1 自動(dòng)駕駛中的圖像語(yǔ)義分割

      而截止目前,CNN已經(jīng)在圖像分類(lèi)分方面取得了巨大的成就,涌現(xiàn)出如VGG和Resnet等網(wǎng)絡(luò)結(jié)構(gòu),并在ImageNet中取得了好成績(jī)。CNN的強(qiáng)大之處在于它的多層結(jié)構(gòu)能自動(dòng)學(xué)習(xí)特征,并且可以學(xué)習(xí)到多個(gè)層次的特征:

      1. 1.較淺的卷積層感知域較小,學(xué)習(xí)到一些局部區(qū)域的特征;

      2. 2.較深的卷積層具有較大的感知域,能夠?qū)W習(xí)到更加抽象一些的特征。

      這些抽象特征對(duì)物體的大小、位置和方向等敏感性更低,從而有助于分類(lèi)性能的提高。這些抽象的特征對(duì)分類(lèi)很有幫助,可以很好地判斷出一幅圖像中包含什么類(lèi)別的物體。圖像分類(lèi)是圖像級(jí)別的!

      圖片

      圖2 圖像分類(lèi)

      與分類(lèi)不同的是,語(yǔ)義分割需要判斷圖像每個(gè)像素點(diǎn)的類(lèi)別,進(jìn)行精確分割。圖像語(yǔ)義分割是像素級(jí)別的!但是由于CNN在進(jìn)行convolution和pooling過(guò)程中丟失了圖像細(xì)節(jié),即feature map size逐漸變小,所以不能很好地指出物體的具體輪廓、指出每個(gè)像素具體屬于哪個(gè)物體,無(wú)法做到精確的分割。

      針對(duì)這個(gè)問(wèn)題,Jonathan Long等人提出了Fully Convolutional Networks(FCN)用于圖像語(yǔ)義分割。自從提出后,F(xiàn)CN已經(jīng)成為語(yǔ)義分割的基本框架,后續(xù)算法其實(shí)都是在這個(gè)框架中改進(jìn)而來(lái)。

      FCN論文地址:FCN paper

      https:///abs/1411.4038

      FCN原作代碼:FCN github

      https://github.com/shelhamer/fcn.berkeleyvision.org

      1 FCN改變了什么?

      對(duì)于一般的分類(lèi)CNN網(wǎng)絡(luò),如VGG和Resnet,都會(huì)在網(wǎng)絡(luò)的最后加入一些全連接層,經(jīng)過(guò)softmax后就可以獲得類(lèi)別概率信息。但是這個(gè)概率信息是1維的,即只能標(biāo)識(shí)整個(gè)圖片的類(lèi)別,不能標(biāo)識(shí)每個(gè)像素點(diǎn)的類(lèi)別,所以這種全連接方法不適用于圖像分割。

      圖片

      圖3 全連接層

      而FCN提出可以把后面幾個(gè)全連接都換成卷積,這樣就可以獲得一張2維的feature map,后接softmax獲得每個(gè)像素點(diǎn)的分類(lèi)信息,從而解決了分割問(wèn)題,如圖4。

      圖片

      圖4

      2 FCN結(jié)構(gòu)

      整個(gè)FCN網(wǎng)絡(luò)基本原理如圖5(只是原理示意圖)

      1. 1.image經(jīng)過(guò)多個(gè)conv和+一個(gè)max pooling變?yōu)閜ool1 feature,寬高變?yōu)?/2

      2. 2.pool1 feature再經(jīng)過(guò)多個(gè)conv+一個(gè)max pooling變?yōu)閜ool2 feature,寬高變?yōu)?/4

      3. 3.pool2 feature再經(jīng)過(guò)多個(gè)conv+一個(gè)max pooling變?yōu)閜ool3 feature,寬高變?yōu)?/8

      4. 4. ......

      5. 5.直到pool5 feature,寬高變?yōu)?/32。

      圖片

      圖5 FCN網(wǎng)絡(luò)結(jié)構(gòu)示意圖

      那么:

      1. 1. 對(duì)于FCN-32s,直接對(duì)pool5 feature進(jìn)行32倍上采樣獲得32x upsampled feature,再對(duì)32x upsampled feature每個(gè)點(diǎn)做softmax prediction獲得32x upsampled feature prediction(即分割圖)。

      2. 2. 對(duì)于FCN-16s,首先對(duì)pool5 feature進(jìn)行2倍上采樣獲得2x upsampled feature,再把pool4 feature和2x upsampled feature逐點(diǎn)相加,然后對(duì)相加的feature進(jìn)行16倍上采樣,并softmax prediction,獲得16x upsampled feature prediction。

      3. 3. 對(duì)于FCN-8s,首先進(jìn)行pool4+2x upsampled feature逐點(diǎn)相加,然后又進(jìn)行pool3+2x upsampled逐點(diǎn)相加,即進(jìn)行更多次特征融合。具體過(guò)程與16s類(lèi)似,不再贅述。

      作者在原文種給出3種網(wǎng)絡(luò)結(jié)果對(duì)比,明顯可以看出效果:FCN-32s < FCN-16s < FCN-8s,即使用多層feature融合有利于提高分割準(zhǔn)確性。

      圖片

      圖6

      3 什么是上采樣?

      說(shuō)了半天,到底什么是上采樣?

      實(shí)際上,上采樣(upsampling)一般包括2種方式:

      1. 1. Resize,如雙線性插值直接縮放,類(lèi)似于圖像縮放(這種方法在原文中提到)

      2. 2. Deconvolution,也叫Transposed Convolution

      什么是Resize就不多說(shuō)了,這里解釋一下Deconvolution。

      對(duì)于一般卷積,輸入藍(lán)色4x4矩陣,卷積核大小3x3。當(dāng)設(shè)置卷積參數(shù)pad=0,stride=1時(shí),卷積輸出綠色2x2矩陣,如圖6。

      圖片

      圖6 Convolution forward示意圖

      而對(duì)于反卷積,相當(dāng)于把普通卷積反過(guò)來(lái),輸入藍(lán)色2x2矩陣,卷積核大小還是3x3。當(dāng)設(shè)置反卷積參數(shù)pad=0,stride=1時(shí)輸出綠色4x4矩陣,如圖7,這相當(dāng)于完全將圖4倒過(guò)來(lái)(其他更多卷積示意圖點(diǎn)這里)。

      https://github.com/vdumoulin/conv_arithmetic

      圖片

      圖7 Deconvolution forward示意圖

      傳統(tǒng)的網(wǎng)絡(luò)是subsampling的,對(duì)應(yīng)的輸出尺寸會(huì)降低;upsampling的意義在于將小尺寸的高維度f(wàn)eature map恢復(fù)回去,以便做pixelwise prediction,獲得每個(gè)點(diǎn)的分類(lèi)信息。

      圖片

      圖8 Subsampling vs Upsampling

      上采樣在FCN網(wǎng)絡(luò)中的作用如圖8,明顯可以看到經(jīng)過(guò)上采樣后恢復(fù)了較大的pixelwise feature map(其中最后一個(gè)層21-dim是因?yàn)镻ACSAL數(shù)據(jù)集有20個(gè)類(lèi)別+Background)。這其實(shí)相當(dāng)于一個(gè)Encode-Decode的過(guò)程。

      具體的FCN網(wǎng)絡(luò)結(jié)構(gòu),可以在fcn caffe prototext (https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/pascalcontext-fcn8s/train.prototxt )中查到,建議使用Netscope查看網(wǎng)絡(luò)結(jié)構(gòu)。這里解釋里面的難點(diǎn):

      • 為了解決圖像過(guò)小后 1/32 下采樣后輸出feature map太小情況,F(xiàn)CN原作者在第一個(gè)卷積層conv1_1加入pad=100。

      layer {
      name: 'conv1_1'
      type: 'Convolution'
      bottom: 'data'
      top: 'conv1_1'
      param {
      lr_mult: 1
      decay_mult: 1
      }
      param {
      lr_mult: 2
      decay_mult: 0
      }
      convolution_param {
      num_output: 64
      pad: 100 # pad=100
      kernel_size: 3
      stride: 1
      }
      }

      考慮如果不在conv1_1加入pad=100,會(huì)發(fā)生什么?

      假設(shè)輸入圖像高度為h。由于VGG中縮小輸出feature map只在pooling層,經(jīng)過(guò)每個(gè)pooling后輸出高度變?yōu)椋?/p>

      圖片圖片

      很明顯,feature map的尺寸縮小了32倍,接下來(lái)是fc6卷積層:

      layer {
      name: 'fc6'
      type: 'Convolution'
      bottom: 'pool5'
      top: 'fc6'
      param {
      lr_mult: 1
      decay_mult: 1
      }
      param {
      lr_mult: 2
      decay_mult: 0
      }
      convolution_param {
      num_output: 4096
      pad: 0
      kernel_size: 7
      stride: 1
      }
      }

      圖片

      如果不在conv1_1加入pad=100,那么對(duì)于小于192x192的輸入圖像,在反卷積恢復(fù)尺寸前已經(jīng)feature map size = 0!所以在conv1_1添加pad=100的方法,解決輸入圖像大小的問(wèn)題(但是實(shí)際也引入很大的噪聲)。

      • 由于FCN在conv1_1加入pad=100,同時(shí)fc6卷積層也會(huì)改變feature map尺寸,那么真實(shí)的網(wǎng)絡(luò)就不可能像原理圖3那樣“完美1/2”。

      那么在特征融合的時(shí)候,如何保證逐點(diǎn)相加的feature map是一樣大的呢?這就要引入crop層了。以fcn-8s score_pool4c為例:

      layer {
      name: 'score_pool4c'
      type: 'Crop'
      bottom: 'score_pool4' # 需要裁切的blob
      bottom: 'upscore2' # 用于指示裁切尺寸的blob,和輸出blob一樣大
      top: 'score_pool4c' # 輸出blob
      crop_param {
      axis: 2
      offset: 5
      }
      }

      在caffe中,存儲(chǔ)數(shù)據(jù)的方式為 blob = [num, channel, height, width],與pytorch一樣

      1. 1. 而score_pool4c設(shè)置了axis=2,相當(dāng)于從第2維(index start from 0!)往后開(kāi)始裁剪,即裁剪height和width兩個(gè)維度,同時(shí)不改變num和channel緯度

      2. 2. 同時(shí)設(shè)置crop在height和width緯度的開(kāi)始點(diǎn)為offset=5

      不妨定義:

      crop_w = upscore2 blob width
      crop_h = upscore2 blob height

      用Python語(yǔ)法表示,相當(dāng)于score_pool4c層的輸出為:

      score_pool4c = score_pool4[:, :, 5:5+crop_h, 5:5+crop_w]

      剛好相當(dāng)于從score_pool4中切出upscore2大?。∵@樣就可以進(jìn)行逐點(diǎn)相加的特征融合了。

      4 U-Net

      U-Net原作者官網(wǎng)

      https://link.zhihu.com/?target=https%3A//lmb.informatik.uni-freiburg.de/Publications/2015/RFB15a/

      U-Net是原作者參加ISBI Challenge提出的一種分割網(wǎng)絡(luò),能夠適應(yīng)很小的訓(xùn)練集(大約30張圖)。U-Net與FCN都是很小的分割網(wǎng)絡(luò),既沒(méi)有使用空洞卷積,也沒(méi)有后接CRF,結(jié)構(gòu)簡(jiǎn)單。

      圖片

      圖9 U-Net網(wǎng)絡(luò)結(jié)構(gòu)圖

      整個(gè)U-Net網(wǎng)絡(luò)結(jié)構(gòu)如圖9,類(lèi)似于一個(gè)大大的U字母:首先進(jìn)行Conv+Pooling下采樣;然后Deconv反卷積進(jìn)行上采樣,crop之前的低層feature map,進(jìn)行融合;然后再次上采樣。重復(fù)這個(gè)過(guò)程,直到獲得輸出388x388x2的feature map,最后經(jīng)過(guò)softmax獲得output segment map??傮w來(lái)說(shuō)與FCN思路非常類(lèi)似。

      為何要提起U-Net?是因?yàn)閁-Net采用了與FCN完全不同的特征融合方式:拼接!

      圖片

      圖10 U-Net concat特征融合方式

      與FCN逐點(diǎn)相加不同,U-Net采用將特征在channel維度拼接在一起,形成更“厚”的特征。所以:

      語(yǔ)義分割網(wǎng)絡(luò)在特征融合時(shí)也有2種辦法:

      1. FCN式的逐點(diǎn)相加,對(duì)應(yīng)caffe的EltwiseLayer層,對(duì)應(yīng)tensorflow的tf.add()

      2. U-Net式的channel維度拼接融合,對(duì)應(yīng)caffe的ConcatLayer層,對(duì)應(yīng)tensorflow的tf.concat()

      記得劃重點(diǎn)哦。

      相比其他大型網(wǎng)絡(luò),F(xiàn)CN/U-Net還是蠻簡(jiǎn)單的,就不多廢話了。

      總結(jié)一下,CNN圖像語(yǔ)義分割也就基本上是這個(gè)套路:

      1. 下采樣+上采樣:Convlution + Deconvlution/Resize

      2. 多尺度特征融合:特征逐點(diǎn)相加/特征channel維度拼接

      3. 獲得像素級(jí)別的segement map:對(duì)每一個(gè)像素點(diǎn)進(jìn)行判斷類(lèi)別

      看,即使是更復(fù)雜的DeepLab v3+依然也是這個(gè)基本套路(至于DeepLab以后再說(shuō))。

      圖片

      圖13 DeepLab v3+

      所以作為一篇入門(mén)文章,讀完后如果可以理解這3個(gè)方面,也就可以了;當(dāng)然CNN圖像語(yǔ)義分割也算入門(mén)了。

      參考鏈接 https://zhuanlan.zhihu.com/p/22976342

      來(lái)源:機(jī)器學(xué)習(xí)AI算法工程

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多