鄭 菲, 孟朝暉, 郭闖世
(河海大學 計算機與信息學院, 南京 211100)
圖像語義分割是機器視覺中圖像理解的重要一環(huán),其旨在通過一定的方法, 將圖像中的每個像素分為不同的語義類別, 得到不同的分割區(qū)域, 實現(xiàn)從底層到高層的推理過程, 最終獲得一幅具有像素語義標注的圖像[1]. 準確的圖像語義分割是實現(xiàn)諸多計算機視覺任務的基礎, 如場景識別、場景理解和分析. 近年來, 隨著深度神經(jīng)網(wǎng)絡被引入到圖像語義分割任務中來, 該課題研究得到了快速發(fā)展. 應用在自動駕駛領域, 如定位道路、車體和行人, 獲得物體輪廓信息等[2]; 在無人機領域, 如進行落地點檢測、落地點場景識別等[3]; 還有在智能服務機器人、醫(yī)學圖像分析等領域中均取得了巨大的應用成果.
在深度卷積網(wǎng)絡廣泛應用到語義分割領域之前,圖像語義分割任務主要是根據(jù)圖像自身的低階視覺信息來進行分割, 比如圖像的角點、邊緣和色彩等. 彼時的算法研究有簡單的像素級閾值法[4], 基于像素聚類的分割方法[5], 還有“圖割法”的分割方法. 其中 Shi等[6]提出的特征歸一化分割算法是著名的“圖割法”分割方法, 之后微軟劍橋學院[7]提出的Grab-cut也是著名的交互式圖像語義分割方法, 該方法利用圖像中的紋理信息和邊界信息, 盡可能減少了用戶交互操作而得到比較好的前景與背景的分割結果. 在計算機視覺步入深度學習時代之后, 以往的算法在復雜困難的分割任務中所面臨的難題, 如今也得到了很好的提升.
Long等[8]在2014年提出的全卷積神經(jīng)網(wǎng)絡(Fully Convolution Network, FCN), 是深度學習語義分割工作的開山之作. FCN是一個對整幅圖像進行像素級密度預測[9](Pixelwise Dense Prediction)的端對端網(wǎng)絡模型,輸入任意尺寸的圖像可直接得到相應的語義分割圖,F(xiàn)CN直接將傳統(tǒng)卷積網(wǎng)絡的全連接層替換為卷積層然后遷移到語義分割任務中, 通過跳轉結構將深層的語義信息和淺層的位置信息進行融合以達到精確的分割效果. 然而FCN在池化過程中會造成信息丟失, 所以Fishe等[10]提出將VGG網(wǎng)絡的最后兩個池化層去掉,然后將傳統(tǒng)的卷積層替換成擴張卷積層(Dilated Convolution), 這就需要不同擴張尺度的擴張卷積層來保證網(wǎng)絡的感受野不受影響, 從而確保語義分割的準確度. Chen等在語義分割工作中不斷改進和實踐, 至今提出了多種版本的方案. 最初提出的DeepLab v1[11]和DeepLab v2[12]主要做了三個貢獻, 首先用帶孔卷積(Atrous Convolution)實現(xiàn)逐像素的密度預測, 其次提出帶孔空間金字塔池化模型(Atrous Spatial Pyramid Pooling, ASPP)實現(xiàn)多尺度分割任務, 第三是利用深度卷積網(wǎng)絡和概率圖模型相結合準確定位物體邊緣.DeepLab v3[13]改進了帶孔空間金字塔池化模型, 通過帶孔卷積級聯(lián)獲取多尺度的語義信息, 并且采用全連接條件隨機場(DenseCRF)的后處理操作對預測結果進行優(yōu)化. DeepLab v3+[14]為了融合多尺度語義信息,引入編碼器-解碼器的架構, 并提出可任意控制編碼器提取特征的分辨率, 通過帶孔卷積來平衡精度與耗時.
經(jīng)典卷積網(wǎng)絡 (AlexNet[15], VGG[16], GoogLeNet[17]等)中不同的卷積層提取出來的特征包括了從淺層到深層的多尺度特征信息, 且特征圖逐漸變小, 本文根據(jù)這一特性提出的算法主要思想包括兩個方面, 其一通過反卷積網(wǎng)絡將卷積網(wǎng)絡提取到的不同尺寸的特征圖放大到相同大小, 從而對多尺度特征信息進行融合; 其二再對這些特征圖進行最后的反卷積將其放大到原圖像的大小, 連接到Softmax分類器計算每個像素的損失函數(shù), 基于整幅圖像的損失函數(shù)反向訓練網(wǎng)絡. 并且本文提出一種新的數(shù)據(jù)處理方法, 批次中心化算法, 可以對輸入數(shù)據(jù)同時進行激活和中心化操作, 有效提升網(wǎng)絡的收斂速度和算法的平均準確率. 下面將闡述反卷積網(wǎng)絡的概念, 以及批次中心化算法, 并且詳細介紹本文算法和語義分割網(wǎng)絡結構, 以及實驗結果與分析.
2010年Zeiler等[18]提出利用反卷積網(wǎng)絡(Deconvolutional Networks)無監(jiān)督地學習圖片的中低層特征,操作的方向不再是從原圖片到特征圖, 而是從特征圖到圖片, 這里的反卷積就是卷積的前饋操作. 2011年Zeiler M D等[19]又提出新的反卷積網(wǎng)絡用來學習圖片的中高層特征, 不同于以往的是該反卷積網(wǎng)絡中加入了反池化(up-pooling)和反卷積(deconvolution).2013年Zeiler等[20]開始探究深度卷積網(wǎng)絡良好性能背后的原理, 他們想知道深度卷積網(wǎng)絡中每一個中間層的結果, 于是在每一層卷積后面接一個反卷積網(wǎng)絡, 然后通過: 反池化——ReLU——反卷積的過程, 對卷積得到的特征圖進行放大, 實現(xiàn)特征的可視化.
我們都知道池化起到下采樣的作用, 最大池化操作可以得到上一層輸出圖中的最大激活值來幫助分類,這一過程只保留了最大激活值而丟失了其余位置上的值, 因此池化是不可逆的. 但是反池化為了實現(xiàn)上采樣,可以做這樣的近似操作, 通過記錄最大池化過程中激活值的位置坐標, 然后在反池化的時候, 把池化過程中最大激活值所在位置上的值激活, 其他位置的值近似為0. 如圖1所示, 左邊是池化過程, 右邊是反池化過程.
圖1 反池化示意圖
卷積操作是將圖片經(jīng)過卷積后得到特征圖, 而反卷積操作剛好相反. 現(xiàn)假設輸入圖片為x, 特征圖為y,卷積操作可表示為y=Cx, 根據(jù)矩陣的運算性質可知,反卷積的過程則是x=CTy. 所以反卷積就是卷積操作在神經(jīng)網(wǎng)絡結構中正向和反向傳播的相反過程, 其實還是理論意義上的卷積操作, 只是為了突出其特性而稱作——反卷積. 采用卷積過程中轉置后的卷積核對特征圖進行反卷積, 并且由于其相反于卷積操作的特性還可以將特征圖放大. 舉例說明:若輸入圖片尺寸為i、卷積核尺寸為k、步長為s、邊緣擴充為p、輸出特征圖尺寸為o, 則卷積操作計算公式為:
現(xiàn)通過反卷積將特征圖還原到原圖像大小, 計算公式為:
反卷積示意圖如圖2所示.
圖2 反卷積示意圖
本文算法中將利用分層的反卷積網(wǎng)絡對特征圖進行上采樣并學習特征, 最后將特征圖上采樣到原圖像的像素空間, 以便逐像素計算損失反饋到網(wǎng)絡中訓練,對圖像的每一個像素進行類別預測.
在訓練過程中網(wǎng)絡的收斂速度跟輸入數(shù)據(jù)是有關的, 如果一組訓練樣本具有較強的相關性, 則使訓練網(wǎng)絡很容易收斂. Sergey Ioffe等[21]提出的批次歸一化算法 (Batch Normalize, BN), 主要是對每一層輸出的小批量數(shù)據(jù)進行歸一化, 從而加快網(wǎng)絡收斂. BN算法將中心化和歸一化合并完成, 然后輸出采用ReLU激活函數(shù).
受BN算法的啟發(fā), 本文提出一種新的數(shù)據(jù)處理方法, 批次中心化算法 (Batch Centralization, BC).BC算法在訓練時仍采用小批量數(shù)據(jù)(Mini-batch)處理的方式, 可以對輸入數(shù)據(jù)同時進行激活和中心化操作. 針對一個有m個樣本的小批量數(shù)據(jù), 計算公式如公式(3)所示:
其中,μj是一個輸入樣本的均值, 其下標表示上一層第j個神經(jīng)元,y(k)表示BC層處理后的輸出, 上標表示第k個樣本,wj則是上一層第j個神經(jīng)元到該神經(jīng)元的權重.f(x)是Sigmoid型激活函數(shù), 用于對神經(jīng)元輸入的激活, 如公式(4)所示:
由于一般在使用Sigmoid函數(shù)對輸入值進行激活后, 在神經(jīng)網(wǎng)絡梯度反向傳播時, 由于接近兩端的數(shù)據(jù)梯度較小而容易造成梯度消失. 所以提出在Sigmoid函數(shù)中加入敏感性強度參數(shù)α(α>0), 函數(shù)圖像如圖3所示.
圖3 Sigmoid函數(shù)
敏感性強度參數(shù)α對Sigmoid函數(shù)進行橫向壓縮,由圖3中不同敏感性強度參數(shù)的對比可知,α值越大則中間部分的圖像越陡, 梯度越大, 則對中間區(qū)域的值越敏感. BC算法的思想就是首先按照公式(3)對輸入數(shù)據(jù)進行中心化處理, 然后通過一個變型Sigmoid函數(shù)f(x)對中心化后的值激活. 使得有效數(shù)據(jù)盡可能集中在中心區(qū)域, 這就保證了中心化后的數(shù)據(jù)具有較大的梯度, 在一定程度上避免了在反向傳播過程中梯度減小進而出現(xiàn)梯度消失的情況.
我們都知道對于一個深層卷積網(wǎng)絡, 其最初一兩層學習到的基本上是顏色、邊緣等低層特征; 再往后就開始學習稍微復雜的特征, 比如紋理、線條等這些比較有區(qū)別性的特征; 更深層次的網(wǎng)絡學習的特征就更加完整, 具有明顯的辨別性特征, 比如物體的輪廓以及顯著的位置信息.
圖像中的語義信息和物體位置信息是以非線性金字塔的形式進行編碼的, 然后作為圖像的淺層和深層特征. 語義分割任務中, 圖像的語義信息和圖像中物體的位置信息存在一種關系: 全局語義信息解決的是“是什么”的問題, 而局部位置信息解決的是“在哪里”的問題. 如圖4左邊的特征金字塔所示. 想要對圖像進行準確的語義分割, “在哪里”和“是什么”顯然是問題的關鍵, 如何將二者結合也是該領域一直在探索的話題. 所以在語義分割網(wǎng)絡中, 不僅要提取圖像的淺層特征, 還要提取深層特征, 將這些多尺度特征進行融合進而對圖像的每個像素準確分類.
本文算法提出, 將淺層卷積、深層卷積以及更深層卷積提取到的多尺度特征分別通過相應的反卷積進行融合, 如圖4所示. 這里之所以要使用反卷積, 是因為卷積和池化過程中會使特征圖變小, 并且卷積層數(shù)越多特征圖越小, 為了方便融合需要將不同尺度的特征圖統(tǒng)一上采樣到相同尺寸, 還要保證盡可能少的丟失特征信息.
圖4 多尺度特征融合
在3.1小節(jié)中詳細介紹了本文算法是如何進行多尺度特征融合的, 下面介紹整個反卷積特征學習網(wǎng)絡的結構, 闡明該網(wǎng)絡結構是如何實現(xiàn)圖像語義分割的.
目前的深度卷積網(wǎng)絡, 如 A l e x N e t[15]、GoogLeNet[17]、VGG[16]以及 ResNet[22]等, 通過不斷加深的卷積網(wǎng)絡結構能夠更好地學習圖像中的特征, 根據(jù)每年ILSVRC挑戰(zhàn)賽的結果可知, 網(wǎng)絡結構層次越深往往分類的準確率越高. 這就說明卷積網(wǎng)絡學習圖像特征的本領已經(jīng)非常強大了, 那么如何將這些用于分類的卷積網(wǎng)絡的本領發(fā)揮到圖像語義分割任務中來,就需要充分理解語義分割任務和分類任務的區(qū)別.
以往的分類識別任務是對圖像進行特征提取, 將特征學習的結果送入分類器中, 最后得到標簽TOP5的概率得分以此判斷圖像所屬類別. 而在語義分割任務中需要通過特征學習來預測每個像素所屬的類別,得到一副具有像素語義標注的圖像. 因此語義分割任務中需要計算每個像素的損失函數(shù), 對圖像進行逐像素的密度預測. 而在卷積網(wǎng)絡提取特征的過程中, 卷積和池化操作改變了原圖像的尺寸, 為了完成逐像素預測就要將特征圖放大到原圖像的像素空間.
Long等[8]提出的全卷積神經(jīng)網(wǎng)絡, 是在第7層卷積之后添加一層1×1卷積核的、通道數(shù)為21的卷積來預測特征圖每個像素位置上粗糙的分類得分, 后面緊跟一個反卷積層用來將這個粗糙的預測得分雙線性上采樣到原圖像的像素密度預測. 顯然這種只通過一層反卷積就簡單粗暴地將最后的特征圖上采樣到原圖像的像素空間, 丟失了許多特征信息, 這對最后的像素級密度預測非常不利. 而本文算法提出將每一步卷積和池化的過程都逐步反向操作來實現(xiàn)上采樣, 逐步還原特征圖中的信息, 減少特征信息的丟失.
下面介紹本文反卷積特征學習的語義分割網(wǎng)絡,示意圖如圖5所示. 第2節(jié)所介紹的批次中心化算法(BC), 是對數(shù)據(jù)同時進行中心化和激活操作, 其作用就相當于經(jīng)典分類卷積網(wǎng)絡中的ReLU激活層和歸一化層.本文算法將卷積網(wǎng)絡中的激活層和歸一化層替換為BC層, 其可行性和優(yōu)越性將在第4節(jié)實驗中進行驗證.
本文的語義分割網(wǎng)絡輸入的原圖像尺寸為H×W,其后融合了第三層卷積后的特征圖、第四層卷積后的特征圖和最后一層卷積的特征圖, 實現(xiàn)了將圖像中淺層到深層的多尺度特征進行融合. 圖5中Conv1-11-96表示第一層11×11的卷積核、通道數(shù)96的卷積操作,Maxpool1-3-96表示第一層3×3的窗口、通道數(shù)為96的最大池化. 而我們都知道卷積和池化操作會改變圖像的尺寸, 尤其在本文算法中需要融合不同尺寸的特征圖, 為了方便特征融合, 可以先分別將每一層的特征圖經(jīng)過反卷積層上采樣到相同尺寸, 再進行融合.
圖5 網(wǎng)絡結構
這里反卷積網(wǎng)絡采用反池化-反激活-反卷積的操作順序. 本文中的反池化操作采用文獻[19,20]中提出的方法. 對于反激活, 在卷積網(wǎng)絡中激活函數(shù)是用于保證每層輸出的激活值都是正數(shù), 那么對于反卷積過程我們依然需要保證每層特征圖為正值, 因此這個反激活其實跟激活沒有區(qū)別, 依然采用我們之前的BC層.而反卷積操作中的所有參數(shù)都要參與訓練, 以達到特征學習的目的. 圖5中Uppool1-3-21表示第一層3×3的窗口、通道數(shù)21的反池化操作, Deconv1-5-21表示第一層5×5的卷積核、通道數(shù)21的反卷積操作. 本文卷積-反卷積的網(wǎng)絡結構是根據(jù)編碼器-解碼器原理設計的, 所以算法中添加的反卷積網(wǎng)絡是根據(jù)前面特征提取過程中卷積和池化操作來設計的, 這里可以理解為“鏡像原理”, 前面一組卷積和池化對應于后面的一組反池化和反卷積, 逐漸將特征圖放大到原圖大小. 這樣一來可以更大程度上減少特征信息的損失,二來反卷積網(wǎng)絡也要進行特征學習, 幫助更精確地完成分割.
融合后再接一層反卷積網(wǎng)絡, 將特征圖還原到原圖大小, 這里設計成21通道是對應數(shù)據(jù)集PASCAL VOC的21類語義標簽. 最后將21張?zhí)卣鲌D中每個對應位置的像素值送入Softmax層進行語義類別的預測,利用預測結果和標簽計算最終的損失函數(shù). 如公式(5)所示:
上式表示圖像中一個像素點的損失計算. 其中,1{·}是示性函數(shù). 針對一個有m個樣本的小批量數(shù)據(jù)集,x={x(1),x(2),…,x(m)}, 原圖像經(jīng)過上述語義分割網(wǎng)絡的處理, 得到對圖像中每個像素的預測, 結果為Ph,w(x(i)|θ), 下標h,w表示圖像中 (h,w)的位置,θ表示網(wǎng)絡中的參數(shù)向量.yk表示語義標簽的第k類.λ表示正則項的超參數(shù).
由公式(5)可以推出最終整幅圖像的損失計算如公式(6)所示:
本文實驗目的主要有兩個, 其一是驗證所提出的批次中心化(BC)在本文算法中的可行性和優(yōu)越性. 其二主要評估本文算法在SIFT Flow和PASCAL VOC2012兩個數(shù)據(jù)集上的性能表現(xiàn), 以及與其他算法的對比實驗結果.
本節(jié)實驗所使用到的數(shù)據(jù)集有PASCAL VOC2012和SIFT-Flow.
(1) Pascal VOC 2012
PASCAL VOC挑戰(zhàn)賽是視覺對象的分類識別和檢測的一個基準測試, 提供了檢測算法和學習性能的標準圖像注釋數(shù)據(jù)集和標準的評估系統(tǒng). PASCAL VOC數(shù)據(jù)集包括20個對象.
所有的標注圖片都有物體檢測需要的標簽, 但只有部分圖片有圖像分割的標簽. 對于物體檢測任務,VOC2012的訓練集、驗證集和測試集包含VOC2008-VOC2011的所有對應圖片; 對于圖像分割任務, VOC2012的訓練集和驗證集包含VOC2007-VOC2011的所有圖片, 測試集只包含VOC2008-VOC2011. 對于分割任務的標簽有兩個部分, 其一是語義分割(Semantic Segmentation)標注出每一個像素的類別, 如圖6(b)所示; 其二是實例分割(Instance Segmentation)標注出每一個像素屬于哪一個對象如圖6(c)所示.
圖6 PASCAL VOC數(shù)據(jù)集
本文所研究的語義分割屬于第一種類別分割, 通過本文算法提出的網(wǎng)絡對每個像素進行類別預測.
(2) SIFT-Flow數(shù)據(jù)集
SIFT-Flow數(shù)據(jù)集中包含2688張圖片, 是針對森林、城市街景、道路、建筑物等室外場景, 其中包含語義分割和幾何分割兩種標簽. 語義分割的標簽0表示背景、1~33表示33種類別, 幾何分割的標簽-1表示背景、1-3分別表示天空、水平和垂直. 如圖7所示, 該數(shù)據(jù)集中對應原圖像的每個像素在語義標簽中是用數(shù)字表示的, 28表示天空, 6表示建筑, 要通過Matlab將標簽圖顯示出來.
本實驗首先討論批次中心化算法(BC)中, Sigmoid函數(shù)的敏感性強度參數(shù)α的設置對最終準確率的影響.選取α=1開始, 以0.25的步長進行多次實驗, 在PASCAL VOC2012數(shù)據(jù)集上的結果如圖8所示.
圖7 SIFT-Flow數(shù)據(jù)集
圖8 α取值對準確率的影響
由圖 8 可知,α=3.75 時本文算法的準確率最優(yōu), 因此下面所有的實驗中α取值均為3.75.
下面驗證批量中心化(BC)算法在本文網(wǎng)絡模型中的性能. 在SIFT-Flow和PASCAL VOC2012兩個數(shù)據(jù)集上, 首先將網(wǎng)絡結構中的激活層和歸一化層采用ReLU和BN進行訓練, 再將網(wǎng)絡結構中的ReLU和BN用一層BC來代替進行訓練. 最終測試結果如表1所示.
表1中給出了是否使用BC算法對本文語義分割算法最終的平均準確率, 明顯得到使用BC算法的準確率更高, 網(wǎng)絡結構的性能更好.
表1 BC算法驗證結果
本節(jié)主要評估本文算法在SIFT-Flow和PASCAL VOC2012兩個數(shù)據(jù)集上的性能表現(xiàn), 以及與其他算法的對比實驗結果.
首先在數(shù)據(jù)集SIFT-Flow上進行對比實驗, 因為該數(shù)據(jù)集包含了語義分割和幾何分割兩種標簽, 所以我們在這兩種任務上獨立訓練本文的模型. 將整個數(shù)據(jù)集分為訓練集、驗證集和測試集, 訓練集包含1612張圖片, 驗證集包含806張圖片, 測試集包含270張圖片. 使用Caffe框架實現(xiàn)圖5的網(wǎng)絡結構, 整個網(wǎng)絡是端對端的結構, 在數(shù)據(jù)集SIFT-Flow中圖片尺寸均是256×256, 輸入到網(wǎng)絡中進行訓練. 訓練中使用了小批量隨機梯度下降(Mini-Batch Gradient Descent, MBGD)算法, 調整學習率為 1×10-1, 正則項的超參數(shù)λ設置為0.0005, 沖量(momentum)設置為0.99, batch 大小設置為 5, 迭代訓練 150 000 次. 在相同數(shù)據(jù)集上和Liu等[23]的算法、Tighe等[24,25]的算法、Farabet等[26]的算法以及Long等[8]提出的FCN-16s進行對比, 對最終的結果進行分析, 如表2所示.
表2 SIFT-Flow上實驗結果對比
SIFT-Flow上的語義分割(中間部分)和幾何分割(右邊部分)的實驗結果是獨立的. 其中Pixel acc.指語義分割的像素準確率, Mean acc.指平均準確率, Mean IoU指的是不同語義類別識別準確度的平均值, Geom acc.指幾何分割的像素準確率. 可以看出本文算法在語義分割上的像素準確率達到88.3%, 幾何分割上的像素準確率達到96.8%, 表現(xiàn)較好.
下面在PASCAL VOC2012數(shù)據(jù)集上進行實驗, 選取1747張訓練集、874張驗證集以及1165張測試集.使用Caffe框架實現(xiàn)圖5的網(wǎng)絡結構, 先將所有圖片統(tǒng)一縮放到500×500, 輸入到網(wǎng)絡中進行訓練. 訓練中仍采用小批量隨機梯度下降算法, 學習率、超參數(shù)、沖量、batch大小以及迭代次數(shù)分別設置為1×10-2、0.0005、0.9、5、150 000. 并且和 FCN-8s[8]、DeepLab v1[11]、DeconvNet[27]三種語義分割網(wǎng)絡進行對比. 在PASCAL VOC2012數(shù)據(jù)集上各種類別的準確率和平均準確率的結果對比分析如表3所示.
表3中列出了PASCAL VOC2012中20種語義類別和背景(bkg), 觀察得到本文算法在大部分語義類別上的準確率表現(xiàn)較好, 并且平均準確率達到73.5%相比其他算法也有一定的提高. 現(xiàn)選取FCN-8s、DeepLab v1和本文算法在部分測試集上的語義分割圖作對比, 如圖9所示, 其中最右側是語義分割標簽圖. 可見本文算法分割結果更好, 物體邊緣分割更明顯.
表3 PASCAL VOC2012上實驗結果對比
圖9 語義分割對比實驗結果
本文提出了一種新的圖像語義分割算法, 首先融合卷積網(wǎng)絡中的多尺度特征信息, 再通過反卷積網(wǎng)絡將融合后的特征圖放大到原圖像大小, 最后對圖像的每個像素點進行密度預測. 本文提出的批次中心化算法在網(wǎng)絡中表現(xiàn)也較好, 在SIFT-Flow數(shù)據(jù)集上語義分割的平均準確率達到45.2%, 幾何分割的準確率達到96.8%, 在PASCAL數(shù)據(jù)集上的平均準確率達到73.5%. 當前語義分割任務的實時性是一個亟待解決的問題, 本文語義分割網(wǎng)絡需要進一步優(yōu)化和提升, 在保證分割準確率的同時提升速度.