李英杰 張驚雷
1(天津市復雜系統控制理論及應用重點實驗室 天津 300384)2(天津理工大學電氣電子工程學院 天津 300384)
語義分割通過為圖像中每個像素分配特定標簽來解決像素的分類問題[1],長期以來是計算機視覺中重要且具有挑戰性的課題,其成果廣泛應用于自動駕駛、場景分析、醫療影像、圖像搜索等領域[2]。隨著深度學習算法尤其是深度卷積神經網絡(DCNN)[3-4]的迅速發展,傳統的基于人工標記提取圖像低級特征進行模型訓練的語義分割技術逐漸被基于深度學習的方法取代。基于深度卷積網絡的語義分割技術不僅可以實現端到端的訓練,而且能獲得更精確的結果,受到了研究者的廣泛重視。
文獻[5]于2014年提出了全卷積網絡(Fully Convolutional Networks,FCN),這是深度學習首次應用在語義分割領域,其具體操作是用卷積層代替全連接層,在端到端的卷積網絡中進行密集預測,實現圖像任意大小的輸出。此后許多學者提出的算法都是基于這種思想進行改進。Badrinarayanan等[6]提出的SegNet,使用最大池化定位來得到更準確的位置信息; Yu等[7]提出的Dilated Convolutions,通過空洞卷積進行密集預測;Lin等[8]提出的RefineNet,通過改進編碼解碼結構,提升了網絡性能;Zhao等[9]提出的PSPNet,使用金字塔池化模塊聚合多尺度信息,并在ResNet網絡中加入附加損失,獲得了較好的效果;Peng等[10]提出的Large Kernel Matters,雖然可以獲得較大感受野,但大卷積核計算量大、占用內存多,增加了計算成本;Yu等[11]提出的判別特征網絡(Discriminative Feature Network,DFN),解決了圖像中類內不一致和類間無差別的問題。
對于全卷積網絡(FCN),語義分割系統的改進主要集中在兩個方面。一是改進深層次網絡模型的結構。深層網絡的建模能力更強,能應對各種復雜的表示,學習到分辨力更強的特征,提升算法效果。二是使用概率圖模型條件隨機場(CRF)[12]。條件隨機場作為圖像后端處理的工具,能聯系上下文信息將相似的像素歸為一類,優化目標邊緣,得到更加良好的分割效果。
本文在DeepLab v3算法的基礎上對卷積神經網絡進行改進,在激活層使用LeakyReLU激活函數,解決網絡在特征較弱區域無法提取弱特征的問題。經過逐次的下采樣后特征圖分辨率會降低,因此在解碼階段采用密集上采樣卷積(DUC)來獲得最終的輸出預測圖。雙線性上采樣是不可學習的,在恢復原圖大小時會不可避免地丟失細節信息,本文使用的密集上采樣卷積(DUC)能學習到相鄰像素之間的聯系,使得到的物體分割更加準確。在網絡訓練時采用Nadam優化器,有效降低了訓練時間。
DeepLab v3算法是2017年提出的,其使用串行和并行的多孔卷積擴大感受野,采用多孔空間金字塔池化(ASPP)提取不同尺度的特征,在PASCAL VOC 2012數據集上取得了良好的效果。
算法框架如圖1所示。首先將圖像輸入到卷積神經網絡,經過級聯的多孔空間金字塔池化(ASPP)模塊提取稠密特征后,獲得不同尺寸的特征圖;其次將這些尺寸不一的特征圖進行融合,經過1×1的卷積降維后進行雙線性上采樣,得到與輸入圖像大小一致的預測圖;最后逐像素進行預測得到分割結果。

圖1 DeepLab v3算法框圖
深度卷積神經網絡(DCNN)以全卷積的形式已經證明了在語義分割領域的有效性,然而DCNN網絡最初是為圖像分類任務設計的,其按一定步長進行連續的卷積和池化會導致特征映射的空間分辨率明顯降低。為了恢復空間分辨率,研究人員提出了多種方法。早期學者大多使用反卷積(也叫轉置卷積),DeepLab v3算法使用多孔卷積,通過在標準卷積的非零像素之間插入零來進行構造。對于大小為k×k的卷積核,經過擴張后的新卷積核大小為kd×kd,其中kd=k+(k-1)·(r-1)。
假設一個二維信號,x[i]是輸入信號,y[i]是輸出信號,w是卷積核,r是卷積核擴張率,指的是對輸入圖像進行采樣的步長。輸入圖像x在多孔卷積上的計算如下:

(1)
多孔卷積是通過改變擴張率從而在不增加參數的情況下擴大感受野,在這個意義上,標準卷積只是多孔卷積擴張率r=1的一個特例。
多孔空間金字塔池化(ASPP)來源于空間金字塔池化(SPP)[13],包含了4個不同擴張率的多孔卷積,可以有效捕捉多尺度信息。然而隨著擴張率的增大,卷積核的有效權重(即作用于特征區域的像素,而不是填充的零)的數量卻在變少,當作用于分辨率低的特征圖時,擴張率在接近特征映射大小的情況下,只有中心的像素起作用,3×3的卷積核會退化為1×1的卷積核,無法捕捉圖像的完整信息。為了克服這個問題并考慮全局上下文信息,DeepLab v3算法在ASPP中加入全局平均池化。因此,ASPP包括1個1×1卷積、3個3×3卷積(擴張率分別為6、12、18)和全局平均池化模塊,同時在每個卷積核之后加入批歸一化層以提升模型訓練精度。ASPP是對不同尺度的特征進行重采樣,可以對任意尺度的區域進行準確而有效的分類,很好地解決了圖像存在的多尺度問題。
該算法和之前提出的各種算法相比提升效果明顯,但是仍存在以下局限:一是激活函數提取弱特征能力有待加強;二是采用了簡單的雙線性上采樣,恢復原圖大小的預測圖效果不太理想;三是參數較多,計算量大,網絡訓練時間長。
本文算法在DeepLab v3的基礎上進行改進,整體框架如圖2所示。
算法在卷積網絡中采用LeakyReLU激活函數,并重新設計了解碼模塊,使用密集上采樣卷積(DUC)得到輸出預測圖。同時在訓練時采用Nadam優化器,減少了網絡的訓練時間。本文算法語義分割具體流程如圖3所示。

圖3 語義分割流程圖
具體步驟為:
第一步輸入原圖到卷積神經網絡;
第二步ASPP對從卷積神經網絡獲得的圖像特征重采樣,獲得多尺度特征;
第三步將ASPP提取到的特征圖融合降維;
第四步使用DUC得到與輸入大小一致的預測圖,逐像素預測得到分割結果。
本文算法采用密集上采樣卷積(Dense Upsampling Convolution,DUC)直接對特征圖進行卷積運算,得到密集的像素級預測圖。DUC是一種易于實現的,可以達到像素級精度的方法,它可將縮小的特征映射恢復到與輸入圖像大小相同的密集特征映射。
假設輸入一個高度為H、寬度為W、顏色通道為C的圖像,經過像素級語義分割會生成一個大小為H×W的標簽映射,并且每個像素都有一個獨特的類別標簽。圖像經過深度卷積神經網絡后得到尺寸為h×w×c的特征映射圖,其中h=H/d,w=W/d,d為下采樣因子。DUC對從ResNet-101網絡輸出為h×w×c的特征圖進行卷積,得到h×w×(d2×L)的特征圖,其中L是語義分割任務中的類別總數,這表明密集卷積的每一層都在學習像素的預測。經過Softmax層后將特征圖重置為h×w×L,并運行argmax算子得到最終的預測圖。DUC的核心思想是將整個標簽映射分成相同的d2個子圖,其高度和寬度與輸入的特征映射相同。換句話說,DUC將整個標簽圖轉換為具有多個通道的較小標簽圖,這種轉換可直接在輸入特征映射和輸出標簽映射之間應用卷積運算,而不需要像反卷積那樣插入額外的值。
雙線性插值在上采樣時通常會丟失信息,例如本文網絡采用1/16的下采樣率。如果目標的長度或寬度小于16個像素(比如較小的物體),則雙線性上采樣恢復這個對象的效果不佳。DUC是可學習的,它不僅能夠捕獲和恢復雙線性上采樣操作中通常缺少的細節信息,而且可以在原始分辨率下進行預測,實現像素級解碼,獲得比雙線性上采樣更精確的結果。另外,DUC在解碼過程中可以自然地集成到全卷積網絡框架中,實現端到端的訓練。
密集上采樣卷積重塑形狀的代碼如下:
#reshape操作
cls_score_reshape = mx.symbol.Reshape(
data=summ, shape=(
0, label_num, -1),
name=’cls_score_
reshape’)
#reshape操作完成后送入Softmax
cls = mx.symbol.SoftmaxOutput(data=
cls_score_reshape,
multi_output=True,
normalization=’valid’,
use_ignore=True,
ignore_label=ignore_label,
name=’seg_loss’)
本文算法基礎網絡采用的ResNet-101,該網絡由4組卷積塊組成。與原網絡不同的是,本文算法在卷積層后采用的激活函數是LeakyReLU,如圖4所示。

圖4 殘差塊
本文算法中LeakyReLU代碼如下:
#激活層函數
tf.nn.leaky_relu(features,alpha=0.02,
name=None)
在卷積神經網絡中,研究者使用的激活函數主要有Sigmoid、tanh和ReLU。與Sigmoid和tanh函數相比,ReLU函數的優點是收斂速度更快,梯度不會飽和,但在網絡訓練時其通過一個閾值得出激活值,可能會出現神經元“壞死”的現象,即神經元在輸入不大于零的情況下,輸出始終為零使梯度得不到更新,不會響應任何數據,無法提取特征。為了解決這個問題,研究人員對ReLU函數進行改進,提出了多種具有良好效果的改進型。本文使用的LeakyReLU函數就是其中之一,其數學表達式如下:

(2)
式中:α表示的是偏移量。與ReLU函數相比,在輸入信號小于零時,LeakyReLU函數的輸出不為零,求導之后導數為固定值。由于這個特性,數據分布會發生變化,負半軸的一些值會得到保留,信息也不會因此丟失,解決了ReLU函數進入負區間神經元不學習的問題。圖5、圖6為ReLU函數及其導數與LeakyReLU函數及其導數的對比圖。

圖5 ReLU函數及其導數

圖6 LeakyReLU函數及其導數
目前卷積網絡層數越來越深,不斷增加的數據量使得訓練時間也越來越長。為了減少網絡的訓練時間,本文采用了Nadam優化器。
在卷積神經網絡中,常用的優化器主要有隨機梯度下降優化器(Stochastic Gradient Descent,SGD)、Momentum優化器以及自適應優化器。SGD優化器的學習率主要依靠人為經驗選取,選取一個合適的學習率需要不斷的嘗試。此外這種優化器易困在鞍點,得到局部最優解。Momentum優化器相比于SGD優化器可使梯度更新更靈活,但效果仍不及自適應優化器。目前使用較多的自適應優化器是Adam優化器。Adam可以看作是RMSprob和Momentum的結合,通過梯度的一階以及二階矩陣估計調試每一個參數的學習率,將學習率控制在一定的范圍內,使其不會出現較大波動。本文使用的Nadam優化器[14]結合了NAG和Adam的優點,與Adam優化器相比,對學習率的約束性更強,對梯度更新的影響更直接,效果更好。
本文算法采用的編程語言是通俗易懂、解釋性好的Python 3.5,深度學習框架是當前流行的TensorFlow。TensorFlow是谷歌研發的人工智能學習系統,其靈活性好、可擴展性高,廣泛應用于深度學習中。實驗在機架式浪潮NF5280M4服務器上進行,顯卡為GTX 1080Ti,顯存12 GB。操作系統為Ubuntu16.04,cuda版本是v9.0.176。
激活函數LeakyReLU的偏移量α為0.02。此時模型的收斂速度和提取弱特征能力是最優的,既解決了負區間神經元梯度不更新的問題,又使模型收斂較快。
本文實驗采用的數據集是PASCAL VOC 2012[15]。每年挑戰者在計算機視覺挑戰賽上提出的各類算法都會在這個數據集上進行驗證,因此在計算機視覺領域該數據集成為了普遍接受的標準。此數據集主要涉及了日常生活中常見的包括人、動物、交通工具、室內物體等4大類20小類的物體。原始數據集中的訓練集、驗證集、測試集分別包括1 464幅、1 449幅、1 456幅圖像,每幅圖像大小、分辨率均不一樣,目標背景、光照亦不相同。經過數據增強處理后,訓練集圖像可以擴增到10 582幅。
衡量算法優劣的指標通常有多種,本文采用網絡訓練時間和平均交并比(mIoU)作為本文算法的性能指標。mIoU就是真實值和預測值的交集與并集的比值在每個類上求平均值。本文算法與DeepLab v3算法訓練時間對比如表1所示。

表1 兩種算法訓練時間對比
從表1可以看出,本文算法每迭代10次所需時間較原算法降低了0.015 s,雖然降低不多,但總的訓練時間降低了0.68 h,縮短時間明顯。各種算法精度對比如表2所示。

表2 各種算法精度對比
針對遮擋、重疊等因素的影響,本文選取了PASCAL VOC 2012數據集中的4幅圖像來說明本文算法的效果。如圖7所示,第1列為原圖,第2列為DeepLab v3算法效果圖,第3列為本文算法效果圖。從a行可以看出,由于樹木遮擋的原因,樹木后的小羊DeepLab v3算法檢測到的信息較少,有的小特征未檢測到;從b行可以看出,當手掌與兔子重疊之后,DeepLab v3算法檢測到手掌丟失的信息比本文算法多;從c行可以看出,對于近景電動車,由于車身物件的原因,DeepLab v3算法給同一類的物體分配了不同的像素,類內物體檢測錯誤,而本文算法進行了正確的分類;從d行可以看出,靠在樹上的自行車因光線較暗,DeepLab v3算法只檢測到了自行車的大致輪廓,分割較為粗糙。綜上,與DeepLab v3算法相比,相同的圖像在不同因素影響下本文算法對目標的檢測效果更好。

圖7 本文算法與DeepLab v3在PASCAL VOC 2012數據集中部分圖像對比實驗
本文算法在DeepLab v3算法的基礎上充分利用了密集上采樣卷積(DUC)、LeakyReLU激活函數和Nadam優化器的優點,對原算法進行了改進,并在公開數據集上進行實驗。實驗結果表明,相比于同類算法,本文算法分割精度高、訓練時間短,可以廣泛應用在分類服飾、精準農業、無人駕駛等領域。