今天開啟新的專欄《圖像分割模型》。在這裡,我們將共同探索解決分割問題的主流網絡結構和設計思想,這是第1篇文章。
今天要說的是占據了圖像分割編解碼結構大半江山的Fully Convolutional Network(FCN)。
作者 | 孫叔橋
編輯 | 言有三
1 什麼是分割
分割,顧名思義,就是把一個完整的東西按照某種方式或規則分成若干個部分。
那麼什麼是圖像分割呢?簡單來說,就是把圖像中屬於同一類別或同一個體的東西劃分在一起,並將各個子部分區分開來。像下圖這樣:
為了訓練神經網絡,圖片中這些像素點會按照某種規則被貼上一個「標籤」,比如這個像素點是屬於人、天空、草地還是樹;更詳細一點,可以再給它們第二個標籤,聲明它們是屬於「哪一個人」或「哪一棵樹」。
對於只有一個標籤的(只區分類別)的任務,我們稱之為「語義分割」(semantic segmentation);對於區分相同類別的不同個體的,則稱之為實例分割(instance segmentation)。由於實例分割往往只能分辨可數目標,因此,為了同時實現實例分割與不可數類別的語義分割,2018年Alexander Kirillov等人提出了全景分割(panoptic segmentation)的概念。
下圖分別展示了(a)原始圖像,(b)語義分割,(c)實例分割和(d)全景分割。
2 FCN
目前在圖像分割領域比較成功的算法,有很大一部分都來自於同一個先驅:Long等人提出的Fully Convolutional Network(FCN),也就是今天我們要討論的網絡結構。FCN將分類網絡轉換成用於分割任務的網絡結構,並證明了在分割問題上,可以實現端到端的網絡訓練。基於此,FCN成為了深度學習解決分割問題的奠基石。
目標識別網絡(分類網絡)儘管表面上來看可以接受任意尺寸的圖片作為輸入,但是由於網絡結構最後全連接層的存在,使其丟失了輸入的空間信息,因此,這些網絡並沒有辦法直接用於解決諸如分割等稠密估計的問題。
考慮到這一點,FCN用卷積層和池化層替代了分類網絡中的全連接層,從而使得網絡結構可以適應像素級的稠密估計任務。如下圖所示,這種全卷積網絡結構不僅能夠支持稠密估計,而且能夠實現端到端的訓練。
輸入:整幅圖像。
輸出:空間尺寸與輸入圖像相同,通道數等於全部類別個數。
真值:通道數為1(或2)的分割圖像。
(1)全連接層轉換成卷積層
如前文所述,將全連接層替換成卷積層的優勢之一,是可以使網絡用於稠密估計任務,並實現端到端訓練。比如下圖中,將全連接層替換成卷積層後,可以使得網絡輸出一個熱度圖(heatmap),而非單個類別標籤。
而這種做法的另外一個優勢就是,通過接收整幅圖像作為輸入,而非以圖塊的形式處理圖片,網絡在處理速度上也有了明顯提升。
(2)連接不同尺度下的層
分類網絡通常會通過設置步長的方式逐漸減小每層的空間尺寸,這種方式可以同時實現計算量的縮小和信息的濃縮。儘管這種操作對於分類任務是很有效的,但是對於分割這樣需要稠密估計的任務而言,這種濃縮就未必是好事了。
比如下面這張圖就是全局步長32下的分割效果。雖然實現了分割,但是結果很粗糙,看不出來目標的細節。
於是,為了解決這個問題,FCN將不同全局步長下的層之間進行連接。具體網絡結構如下圖所示。
這樣一來,隨著細節信息的逐漸加入,分割的結果也越來越好。比如下圖從左到右分別對應了全局步長32、全局步長16和全局步長8下的結果。最右側是真值。
3 實驗結果
FCN可以與大部分分類網絡有效結合,下表中給出了在PASCAL VOC 2011資料庫下,FCN與AlexNet、FCN-VGG16和FCN-GoogLeNet結合的結果。
4 總結與思考
儘管FCN意義重大,在當時來講效果也相當驚人,但是FCN本身仍然有許多局限。比如:
- 沒有考慮全局信息
- 無法解決實例分割問題
- 速度遠不能達到實時
- 不能夠應對諸如3D點雲等不定型數據
基於此,各路研究大神們提出了針對不同局限的各種方法。下圖給出了部分研究成果與FCN的關係。
今天的圖像分割模型到此結束,下回再見。