全卷積神經網絡的英語名字是Fully Convolutional Networks,簡稱FCN。不過,本黃鴨強烈建議寶寶們不要使用這個簡稱,因為它很可能會被誤解成Fully Connected Networks,也就是全連接神經網絡。在《人工智慧・循環神經網絡》一文中,本黃鴨曾經說過,之所以全連接神經網絡不適合處理一維、二維連續數據,是因為它沒辦法提取到足夠的、與順序相關的特徵。所以,以二維連續數據作為輸入的圖像分割問題絕不可能只用全連接層就取得比較高的平均準確度。
所謂「全卷積神經網絡」,顧名思義,就是只含卷積層、不含全連接層的神經網絡。寶寶們應該對這種網絡並不陌生,因為在《人工智慧・Multi-task CNN》一文中出現過的Proposal Net(P-Net)就是一種只含有卷積層(和池化層)的神經網絡,它能從圖像中有效地提取特徵,推斷出多個人臉檢測的候選框。
然而,P-Net與圖像分割問題的輸出肯定是不同的。前者的輸出是face classification、bounding box regression,以及facial landmark localization;而後者的輸出是一張與原圖大小相等的分類圖。在一般情況下,卷積運算後得到的feature map的尺寸都比運算前的feature map或者原圖小,除非把參數padding的值設置為「same」,才能得到與原圖大小相同的output feature map。這是因為當padding = 「same」的時候,會先在圖像的外面補上幾圈零,再做卷積運算。
那麼,全卷積神經網絡中的、參數padding的值是不是都必須設置為「same」呢?答案是否定的,因為論文《Fully Convolutional Networks for Semantic Segmentation》的作者在文中寫道:「our approach draws on recent successes of deep nets for image classification and transfer learning」。這句話的中文意思是:全卷積神經網絡將以遷移學習的方式,充分地借鑑在圖像分類問題中準確度比較高的深度神經網絡。
所謂「圖像分類問題」,就是推斷圖像中物體的類別,例如是鴨還是鵝、是三種鳶尾花中的哪一種、是笑臉還是哭臉、是新冠肺炎還是其他疾病,等等。也就是說,本黃鴨以前用VGG16、ResNet、Google Net解決的問題基本都是圖像分類問題。這些神經網絡的輸出會比輸入的圖像小很多,要麼是一維的,要麼與one-hot encoding之後的、標籤的維數相等。
所謂「遷移學習」,就是先找一個用公開數據集訓練好的深度學習模型,再把模型的data argumentation/ CNN and pooling/ 特徵提取的部分直接拿過來用,得到一個或多個比輸入圖像小很多的feature map(s)。然後,把這些feature map(s)輸入到自己設計的深度學習網絡中。最後,用新數據集來訓練自己設計的網絡。
雖然基本概念全搞清楚了,但現在距離代碼的編寫仍然還有幾萬光年。
One problem is我們應該選用圖像分類問題的哪個預訓練模型來做遷移學習呢?Theoretically speaking,應該先充分地了解儘可能多的預訓練模型,知道它們是用怎樣的公開數據集訓練出來的,然後選用數據集與圖像分割問題的數據集最為相似的。Practically speaking,我們可以建立並訓練多個模型,看它們在訓練集、測試集、驗證集上的平均準確度或者平均交並比,分割效果最好的就是我們應該選用的。
圖1:evaluation of fully convolutional networks | 圖片來源:論文
從上圖中,我們可以看出,論文的作者做了一些實驗,分割效果最好的是VGG16,其次是GoogleLeNet和AlexNet。
這裡還有一點需要補充,那就是VGG16的分類全連接層不是被刪掉了,而是被改成了1* 1卷積。在前文中,本黃鴨曾經說過,1* 1卷積的作用是升降維,即在保持長度和寬度不變的情況下,改變feature map的通道數;也就是說,輸入B* W* H* C,輸出B* W* H* C』。
圖2:transforming fully connected layers into convolution
layers | 圖片來源:論文
And the other problem is我們應該如何設計深度學習網絡,才能放大feature map(s),使得輸出與原圖的大小相同呢?答案是up sampling。
First and foremost,請寶寶們千萬不要記錯,池化層的作用是下(降)採樣,在《人工智慧・提升訓練速度》一文中介紹過的反卷積才是上採樣。由此可見,全卷積神經網絡與U-Net在結(眉)構(眼)上(處)有幾分相似,因為它們都是先下採樣,再用反卷積做上採樣。
Furthermore,上採樣的方法包含但不僅限於反卷積。鑑於這個問題可能會在面試中被問到,所以還是要稍微了解一下的。
如下圖所示,只要使用初等數學的方法,就能計算出P點的坐標。
P點可以被視為插入到Q11、Q12、Q21、Q22中間的一個像素點。
之所以不是線性插值,而是雙線性插值,是因為圖像是二維連續數據,要在X和Y方向上分別差值。
這種上採樣方法不僅簡單快捷,而且還能取得不錯的效果。
圖3:在二維空間內,已知Q11、Q12、Q21、Q22的坐標,yy2 = 0.5* yy1,xx2 = 0.6* xx1,求P點坐標 | 圖片來源:網絡
圖4:反最大池化、反平均池化 | 圖片來源:網絡
儘管解決了兩個重要的問題,可以開始編寫代碼了,但是論文的作者會滿足於這樣的模型嗎?答案是否定的,因為在當年寫論文的時候,skip connection已經走紅了,所以與(趕)時(時)俱進(髦)的作者就把這種網絡結構加到了自己的模型中,形成了fully convolutional networks with multi-layer fusion。
圖5:fully convolutional networks with multi-layer fusion | 圖片來源:論文
圖6:evaluation of fully convolutional networks with multi-layer fusion | 圖片來源:論文
從上圖中,我們可以看出,有且僅有FCN-32s模型沒有用到skip connection architecture,直接把VGG16特徵提取部分輸出的feature map上採樣到了原圖的大小,與本黃鴨在前一段文字中描述的模型完全相同。然而,實驗證明,FCN-32s的分割效果遠遠比不上FCN-8s。
所謂「FCN-8s」,就是把VGG16特徵提取部分輸出的feature map做兩倍上採樣,然後和pool4層的輸出element-wise地加在一起;再做兩倍上採樣,接著和pool3層的輸出element-wise地加在一起;最後做八倍上採樣,使得輸出圖像的大小與原圖相等。
圖7:VGG16
值得注意的是,with multi-layer fusion,fully convolutional networks與U-Net在結(眉)構(眼)上(處)又多了幾分相似,只是在前者的skip connection是把兩個矩陣element-wise地加在一起,而後者是把兩個矩陣concatenate在一起。
於是,問題來了,除了具體的計算方法和步驟之外,矩陣的element-wise加法與concatenation之間有沒有區別呢?Theoretically speaking,我們應該關注的是實驗結果,誰的平均準確度或者平均交並比高就選誰。But in reality,在做element-wise加法之前,必須先裁減矩陣,因為二倍上採樣輸出的feature map的形狀與pool4輸出的形狀是不同的。
欲知為何不同,且聽下回分解。
往期回顧
點擊圖片,傳送到《人工智慧・圖像分割(1)》 | 圖片來源:網絡
點擊圖片,傳送到《人工智慧・CT影像診斷新冠肺炎》 | 圖片來源:網絡
點擊圖片,傳送到《人工智慧・醫療文本分類》 | 圖片來源:網絡