計算機視覺面試考點(12)全卷積神經網絡(FCN)

計算機視覺工程師在面試過程中主要考察三個內容:圖像處理、機器學習、深度學習。然而,各類資料紛繁複雜,或是簡單的知識點羅列,或是有着詳細數學推導令人望而生畏的大部頭。爲了督促自己學習,也爲了方便後人,決心將常考必會的知識點以通俗易懂的方式設立專欄進行講解,努力做到長期更新。此專欄不求甚解,只追求應付一般面試。希望該專欄羽翼漸豐之日,可以爲大家免去尋找資料的勞累。每篇介紹一個知識點,沒有先後順序。想了解什麼知識點可以私信或者評論,如果重要而且恰巧我也能學會,會盡快更新。最後,每一個知識點我會參考很多資料。考慮到簡潔性,就不引用了。如有冒犯之處,聯繫我進行刪除或者補加引用。在此先提前致歉了!

卷積神經網絡 Convolutional Neural Network CNN 分類
全卷積神經網絡 Fully Convolutional Network FCN 分割

原理
比如1000分類任務
CNN輸出的是1000x1
每個維度代表圖像屬於對應類別的概率

FCN輸出的是1000xHxW
H和W代表輸入圖像的高和寬
相當於對每一個像素進行1000分類
從而實現了圖像分割

上採樣與反捲積
網絡中需要卷積和池化提取和選擇特徵
然而,卷積和池化是一個下采樣的過程
所以,提取的特徵的寬和高小於輸入圖像
爲了輸出的寬和高恢復到和輸入相同
需要進行上採樣
FCN中用到的上採樣方法是反捲積(轉置卷積)

注:上採樣是目的,反捲積是方法,兩者不可混爲一談

反捲積的過程
藍色是反捲積輸入
灰色是反捲積卷積核
綠色是輸出
白色是填充
可以看出,經過反捲積,輸出相比輸入變大了
實現了上採樣
注:卷積的stride指的是滑動的步長,反捲積的stride指的是填充的大小或者相鄰像素的距離,下圖中的stride是2
在這裏插入圖片描述

輸入的圖像大小是任意的?
這句話是不嚴格的
應該是:輸入圖像的大小可以是超過最小尺寸的任意大小
(當然,太大也不太好,僅僅是可以)
舉個極端反例
輸入圖像是2x2的,網絡中的池化層就沒得池化了。。。

輸入圖像的大小可以是超過最小尺寸的任意大小
FCN使用卷積取代了CNN中的全連接
這也是FCN名字的含義

在CNN中,使用全連接
輸出固定,網絡的結構也是固定的,所以輸入大小固定

在FCN中,使用全卷積
反捲積對feature map維度的恢復與卷積的下采樣是對稱的
舉個例子(以下指的是寬和高的大小)
feature map = input/5/3/2
output = feature map x5 x3 x2 = input
feature map的大小不需要固定,所以不需要輸入的大小是固定的

跳級結構skips
直觀感受
用15x15的feature map反捲積成255x255的圖像
這是十分粗糙的,所以結果也不精確
所以使用網絡中間尺寸大一些的特徵也進行反捲積
將反捲積的結果相加,得到精確一些的結果
如圖所示
在這裏插入圖片描述
可以看出,結果精確了一些:
在這裏插入圖片描述

爲什麼跳級結構中是求和而不是取最大值?
求和更容易求導,從而反向傳播。

CNN強行實現圖像分割的方法
對圖像進行滑動
比如每個窗口30x30
對每個窗口進行分類
進而判定窗口中心像素的類別
從而實現圖像分割

缺點:
滑動窗口重疊過多,重複計算太多,計算量大
感受野太小
(FCN的感受野是基於整個圖像的,上述做法只基於30x30)

FCN缺點
全篇看下來,FCN更像是憑感覺設計出來的優秀黑箱子
還是缺乏十分嚴謹的數學支撐,屬於深度學習的固有屬性吧
所以精確度肯定無法達到很高的水準

沒有了全連接層,削弱了特徵之間的組合關係
具體到分割任務,就是削弱了像素之間空間位置的聯繫


歡迎討論 歡迎吐槽

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