對FCN網絡的理解

對FCN網絡的理解

1.對FCN的簡要介紹

自從卷積神經網絡(CNN)被提出後,在圖像檢測,圖像分類的方面取得了很大的突破,並被廣泛應用。

CNN的優點在於它可以自動學習到多層次的特徵。CNN層層遞進,從較淺的卷積層到較深的卷積層,卷積層的感知域逐步增大,因此我們學習到的特徵從局部到抽象,這有助於提高識別性能。

我們通過CNN可以很好的判斷圖像包含的是什麼物體,但是卻很難分割出物體的具體輪廓。

針對圖像分割問題,Jonathan Long等人提出了Fully Convolutional Networks (FCN),該網絡試圖從抽象的特徵中恢復出每個像素所屬的類別。可以說是從圖像級別的分類進一步延伸到像素級別的分類。

總體來說,FCN是圖像分類到圖像分割的一個過渡橋樑。

2.FCN與CNN的比較

在這裏插入圖片描述

CNN:傳統的CNN網絡,在卷積層後一般會連接上若干個全連接層,將卷積後產生的特徵圖(feature map)映射成一個特徵向量,如圖最後輸出一個長度爲1000的特徵向量,相對對應每種類別的預測概率。由此可見,CNN適用於圖像級別的分類和迴歸的任務。

FCN:FCN是對圖像進行像素級的分類,從而解決了語義級別的圖像分割問題。FCN可以接受任意尺寸的輸入圖像,FCN將CNN網絡後面的全連接層換成了卷積層,然後我們可以通過反捲積對最後卷積出來的特徵圖進行上採樣,使它恢復至輸入圖像的相同尺寸,因此可以對每一個像素產生預測,然後通過對每個像素的預測概率在上採樣後的特徵圖中進行像素的分類。因此FCN輸出的是一張已經標記好的圖,而不僅僅是一個概率值。

圖像語義分割:

概念:FCN解決了語義級別的圖像分割問題。因此我們需要對語義分割有個簡單的概念。語義分割是在像素級別上進行討論的。語義就是指圖像內容或者圖像目標,而分割就是在像素角度分割出圖片中的不同目標。(如下圖,我們內容就是人,馬,車,那我們就是需要把這些內容給分割出來)

在這裏插入圖片描述

類型:

  • 標準語義分割(standard semantic segmentation)也稱爲全像素語義分割,它是將每個像素分類爲屬於對象類的過程;
  • 實例感知語義分割(instance aware semantic segmentation)是標準語義分割或全像素語義分割的子類型,它將每個像素分類爲屬於對象類以及該類的實體ID。

主要應用領域:地理信息系統,無人駕駛,醫療影像分析,機器人等。

這是一張無人駕駛通過車載攝像頭或者激光雷達探查的圖像輸入到網絡中分割出來的效果。(爲了讓大家更直觀的感受)
在這裏插入圖片描述

3.FCN的原理

FCN的優越性主要體現在三種技術:

  • 卷積化(Convolutional)
  • 上採樣(Upsample)
  • 跳躍結構(Skip Layer)

卷積化(Convolutional):卷積化其實就是將普通的分類網絡丟掉它們的全連接層換上對應的卷積層。

這裏的分類網絡有VGG16,AlexNet,GoogLeNet等。

論文中達到最高精度的分類網絡是VGG16。
在這裏插入圖片描述

上採樣(Upsample):上採樣的主要目的是放大圖像,在FCN網絡中我們對各個像素進行了分類,且圖像尺寸縮小了,因此我們需要將此時低分辨率的特徵圖還原到高分辨率的原圖大小。因此上採樣也是極爲重要的。

  • 插值法:主要採用雙線性插值(因爲FCN的上採樣幾乎不用這個,因此這裏不過多介紹)

  • 反捲積上採樣:

    img

    上圖是反捲積的一個過程,其實和卷積效果很像,由於我們輸出的圖片尺寸要大於反捲積的圖片尺寸,因此會有一個自動填充(增加padding)的過程。

    這裏我們定義一下,輸入圖片尺寸爲i,卷積核大小爲k,步長爲s,填充大小爲p,輸出圖片尺寸爲o,求輸出尺寸的公式爲
    O=ik+2ps+1 O=\frac{i-k+2*p}{s}+1
    這裏可以計算上面動圖的輸出o=(2-3+2*2)/1+1=4

    通過上面的反捲積過程我們其實可以發現在四周補0,其實對恢復圖片的邊沿信息是不利的,因此我們常見的反捲積應該是在每個像素與像素之間補0,這種反捲積的方式稱作空洞卷積(微步卷積),專門針對初花導致分辨率降低,丟失信息提出的卷積思路。

    img

  • 反池化上採樣(做了解)
    在這裏插入圖片描述

跳躍結構(Skip Layer):這個結構用來優化結果的,這裏相當於把每一個池化層的結果進行上採樣之後優化輸出。
在這裏插入圖片描述

這裏可以理解爲分別將第7個卷積層卷積後的熱圖heatmap(我們把最後卷積出來的特徵圖爲熱圖),第5層池化後的特徵圖,第3層池化後的特徵圖融合後進行反捲積的過程。目的是爲了提高圖片精度。
在這裏插入圖片描述
在這裏插入圖片描述
論文中提出除了圖像融合之外還有一種shift-and-stitch技巧的方法來提高預測精度,這種技巧是一種折衷做法:輸出更加密集且沒有減小filter的接受域範圍,但是相對於原始的設計filter不能感受更精細的信息。(具體信息可以參考論文)
在這裏插入圖片描述

解釋語義分割中的幾個度量(參考:https://blog.csdn.net/majinlei121/article/details/78965435):

Pixel acc(像素精度):標記正確的像素佔總像素的比例。

Mean acc(均像素精度):計算每個類別內被正確分類的像素數的比例,之後求所有類的平均

Mean IU(均交併比):語義分割最重要的度量。計算兩個集合(真實值和預測值)的交集和並集之比,在每個類上計算IOU後平均。

FW IU(頻權交併比):根據每個類出現的評率設置權重。

4.FCN模型的實現過程

img

這是以AlexNet爲基礎,去除其全連接層換上卷積層的模型。

藍色:卷積層

綠色:最大池化層

黃色:求和運算,即圖片的融合過程

灰色:圖片融合前裁剪爲相同尺寸的圖片

虛線:上方爲卷積過程,下方爲反捲積和圖片融合的過程

模型實現過程簡要還原(結合跳躍結構那張圖和上圖一起理解):

對圖像進行前兩次卷積後操作後,圖像縮小到原來的1/4;

對圖像進行第三次卷積操作conv3,pool3後,圖像縮小爲原來的1/8,並保留此時的特徵圖;

對圖像進行第四次卷積操作conv4,pool4後,圖像縮小爲原來的1/16,並保留此時的特徵圖;

對圖像進行第五次卷積操作conv5,pool5後,圖像縮小爲原來的1/32,接着進行卷積操作conv6,conv7後的圖像被稱作熱圖(heatmap);

此時我們存在1/8的特徵圖,1/16的特徵圖,1/32的熱圖,,將熱圖進行反捲積取得FCN -32s,將1/16的特徵圖與upsampling操作(即將上下左右的像素點複製一遍)後的熱圖進行融合,並且進行反捲積得到FCN-16s,再將1/8的特徵圖與剛剛進行了upsampling融合的圖片進行再次融合,再次進行反捲積,得到FCN-8s,就是精度最高的圖片。

可以這麼形象的理解,有一張白紙,我們第一次將conv7卷積核提取的特徵放映到紙上,再依次將conv4,conv3卷積核提取的特徵放映到紙上,那麼我們呈現出來的就是我們提取出的目標 。

5.FCN的簡要總結

FCN相比傳統的CNN主要有兩個優越性,首先FCN可以接受任何尺寸的圖像輸入,其次FCN通過卷積化,反捲積上採樣,跳躍結構等特點在像素上進行分類,更加高效的進行圖像內容的分割。

但是FCN 的缺陷也是存在的,雖說FCN-8s已經達到了一定程度的精確度,但是很明顯得到的結果還是不夠精細,上採樣得到的結果還是存在模糊和平滑的現象,這是因爲通過反捲積上採樣我們無法特別好的找出像素點之間的關係(插值法就是用來找像素點之間的關係的,而反捲積法沒有這種效果),很容易缺乏空間的一致性,因此我們對圖像中的很多細節部分(小目標),沒法很精確的分割。

用論文中提出的例子,很明顯例一的FCN-8s,無法精確的分割出車的位置,例二的FCN-8s無法精確的分割出後面的觀衆。
在這裏插入圖片描述
在這裏插入圖片描述

FCN論文地址及源碼地址

論文地址:https://arxiv.org/pdf/1605.06211v1.pdf

官方源碼地址:https://github.com/shelhamer/fcn.berkeleyvision.org

FCN-tensorflow代碼地址:https://github.com/EternityZY/FCN-TensorFlow

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章