司海飛,史 震,胡興柳,楊春萍
1.金陵科技學院 智能科學與控制工程學院,南京211169
2.哈爾濱工程大學 智能科學與工程學院,哈爾濱150001
在移動機器人等移動端系統(tǒng)中,快速精準的環(huán)境感知是研究重點。為了實現(xiàn)快速準確地理解外界環(huán)境,讓移動端有效精準地實現(xiàn)人機及場景交互,傳統(tǒng)方法是給移動端搭配超聲波、視覺傳感器或者激光雷達等多種傳感器獲取四周的場景信息[1-3],即基于人工特征提取的圖像語義分割。近年來,為了節(jié)省成本且不丟失任何場景相對的位置信息,大量學者致力于利用神經(jīng)網(wǎng)絡算法實現(xiàn)圖像語義分割技術,為移動端的信息決策提供參考,達到準確理解環(huán)境信息[4-7]。
在2006年深度學習理論被提出后[8],卷積神經(jīng)網(wǎng)絡的表征學習能力得到了關注,并隨著數(shù)值計算設備的更新得到發(fā)展[9]。美國加州大學的Long等[10]在全球首次提出了全卷積神經(jīng)網(wǎng)絡算法(Fully Convolutional Network,F(xiàn)CN)。此算法基于VGG-16 網(wǎng)絡結構[11],舍棄了VGG的最后全連接層fc6和fc7,這種方法在精度和速度方面都大大超過了傳統(tǒng)的分割方法,但對微小的物體分割還是有局限性。SegNet網(wǎng)絡也是一種和FCN原理類似的方法,由Badrinarayanan等[12]提出,SegNet模型具有較少的參數(shù),更容易進行端到端的訓練,分割精度比FCN稍好一些,總體效率也比FCN略高。Noh等[13]基于SegNet公布了反置卷積(DeconvNet)模型,在特征映射方面取得優(yōu)勢,分割效果要比FCN-8S愈加精密和細致,但精度較差,模型的綜合性能并不強。
DeepLab 網(wǎng)絡是由Chen 等人與google 團隊[14]于2014年提出的,是一個專門用來處理語義分割的模型。目前推出了4 個版本[15]:DeepLab V1、DeepLab V2、DeepLab V3、DeepLab V3+,它們是目前語義分割領域中最新穎優(yōu)秀的一個系列分割算法。對于語義分割任務來說,DeepLab V3+算法已經(jīng)能夠滿足高精度輸出結果的要求,然而對于移動端的實時分割還遠遠不能達到要求。本文旨在保證精度的同時尋求更快的分割速度便于移動端設備的應用,基于DeepLab V3 算法進行改進和調優(yōu),設計出新的輕量化網(wǎng)絡結構,在運行速度方面顯著提升,能夠使卷積神經(jīng)網(wǎng)絡更好地服務于移動端。
圖2 DeepLab V3模型結構
V3 加入圖像級別(image-level)的帶膨脹卷積的空間金字塔池化(Atrous Spatial Pyramid Pooling,ASPP)[16]。ASPP 是一種能夠獲取多尺度上下文的架構,能夠讓任意大小的特征圖利用多尺度特征提取都有確定大小的特征向量來表示。獲取上下文信息的ASPP手段方式如圖1所示。
圖1 ASPP模塊
DeepLab V3編碼部分采用預訓練的ResNet-50/101來提取特征,DeepLab V3 模型結構如圖2 所示。修改了第4 個殘差塊,采用膨脹卷積(模塊內的三個卷積采用不同的膨脹率)方法,并且把批量歸一化(BN層)加入ASPP模塊進行優(yōu)化。
DeepLab V3+是把V3 作為編碼部分的結構,添加了解碼部分[17],構建了一個帶空洞的空間金字塔池化編碼-解碼結構,如圖3所示。先對輸入的空間分辨率進行降采樣,得到較低的分辨率特征圖,經(jīng)訓練可快速地區(qū)分類別的特征圖,然后進行上采樣過程,再將特征表示為完整分辨率的語義輸出圖。
圖3 DeepLab V3+編碼-解碼結構
DeepLab V3+特別注重目標邊緣的分割,優(yōu)化細分結果。而且,利用這種編碼-解碼的構造,可使準確率和運算時間綜合性能最優(yōu),可以通過選擇空洞大小更便捷地確定要提取的編碼部分輸出特征分辨率的大小。
DeepLab V3+總體模型結構如圖4所示。DeepLab V3+采用將帶空洞的卷積塊并連在一起,作為編碼部分,接著連接的是編碼結構的ASPP模塊,DeepLab V3+將深度可分離結構的Xception卷積改進應用其中,并且解碼器模塊同樣應用到,使這種編碼-解碼結構的模型與V3 相比分割速度更快,分割性能更強。編碼部分主干網(wǎng)絡Xception 由Entey flow、大量的Middle flow 和Exit flow組成,且編碼部分空洞rate大小采取6、12、18、24四個分支與一個池化層(最大化法)來控制特征圖的輸出率。因考慮到高采樣比率提取的特征圖信息較少,所以去掉最后一個分支,并且最大池化部分均采用stride=2 的深度卷積替換,每次深度卷積3×3卷積之后都引入了BN和ReLU。其次,在引入底層特征進行多尺度融合時全部首先采取1×1卷積對輸出通道做降維操作。
圖4 DeepLab V3+的整體編碼-解碼模型結構
圖5 改進的DeepLab V3網(wǎng)絡結構圖
對于語義分割任務來說,DeepLab V3+算法已經(jīng)能夠滿足高精度輸出結果的要求,然而對于移動端的實時分割還遠遠不能達到要求。本文為保證精度的同時尋求更快的分割速度便于移動端設備的應用,通過引入并改進了2017年由谷歌團隊創(chuàng)作的一種適用于可移動設備的輕量化網(wǎng)絡MobileNet[16],替換掉DeepLab V3模型編碼部分的ResNet結構,沒有解碼模塊,從而使DeepLab V3 網(wǎng)絡變得輕量化,該網(wǎng)絡可以大大減小計算量從而使運行速度方面效果顯著提升,能夠將卷積神經(jīng)網(wǎng)絡更好地服務于移動端。本文主要使用2018 年更新的V2版本。在面向以移動端為基礎上進行的語義分割領域,MobileNet V2 無疑會是一個高效模型的首選。改進的整體網(wǎng)絡結構如圖5所示。
MobileNet V2 在深度卷積前面增添了逐點卷積的改進,之所以這么做,由于DW 卷積的輸出通道數(shù)只由輸入通道數(shù)決定,自身無法更改通道數(shù)。這面臨的一個問題就是假如上層輸出的輸入通道數(shù)過少,則深度卷積僅僅可以對空間中維度較低的特征進行提取并且激活函數(shù)不可以有效地發(fā)揮在高維空間進行非線性變換提取多樣特征,輸出效果必然不會令人滿意。所以為了處理這個現(xiàn)象,MobileNet V2先構建一個升維系數(shù)是6的PW特意用來期望提升通道維度在高維提取特征,后面再結合一個DW卷積。經(jīng)歷了這樣的階段,無論輸入通道數(shù)多大,深度卷積都可以通過逐點卷積在更高的維度工作來提取特征。
由于利用輕量化結構MobileNet V2替換了特征提取器,使改進后的DeepLab V3 模型的分割速度大幅增加,然而精度不可避免地會下降。因此考慮到防止精度下降過于嚴重,為使模型的綜合性能達到最佳,更好地平衡模型的分割精度和速度,在MobileNet V2 中又引入了一種新的非線性激活函數(shù)Swish,Swish 函數(shù)在2017年10月份由谷歌提出。Swish的定義如下:
非線性激活函數(shù)對于深層神經(jīng)網(wǎng)絡的訓練能否成功起著關鍵的作用。常見的激活函數(shù)一般有下面幾種。
Sigmoid函數(shù):
公式(2)中,σ(x)是Sigmoid函數(shù),β是一個常量或者變量。若β為0,則Swish為一個線性函數(shù);若β趨于無窮大,Sigmoid函數(shù)則接近于0-1函數(shù),Swish則變成了ReLU非線性激活函數(shù)。Swish曲線圖如圖6所示。
圖6 不同β 值的Swish激活函數(shù)
Swish 激活函數(shù)和ReLU 激活函數(shù)相同的是,曲線上方不受限制,下方受到限制。而不同的是,Swish 和ReLU 相比的特點是曲線非單調性且曲線光滑不飽和。實踐證明,當β等于1 時,使模型性能最好[17]。β值不同時在ResNet網(wǎng)絡上的預測性能結果如圖7所示。
圖7 中,橫坐標代表β值的選取,縱坐標代表模型預測的性能??梢园l(fā)現(xiàn)令β為1,普遍模型效果最佳。因此本文選取Swish激活函數(shù)的定義中β取值為1。
谷歌在公布的論文中已經(jīng)說明Swish 激活函數(shù)的性能要優(yōu)于當前的所有激活函數(shù),谷歌團隊在大量實驗中經(jīng)證實Swish 函數(shù)對于深度卷積神經(jīng)網(wǎng)絡的匹配度和效果要勝過ReLU 很多,只是相對會造成一些延遲。例如,在ImageNet 網(wǎng)絡競賽上,將ReLU 用非線性激活函數(shù)Swish 的替換,使Inception-ResNetV2 的準確性可以提高大約1%,移動端的NASNet-A 在top-1 上分類的準確性可增加1.3%。
由于網(wǎng)絡層數(shù)越來越深,會使輸入特征圖的分辨率逐漸減小,考慮到要減弱應用非線性激活函數(shù)的成本,因此在MobileNet V2 網(wǎng)絡的深層部分將ReLU 激活函數(shù)用Swish 替換。谷歌經(jīng)過改變帶有Swish 和ReLU 激活函數(shù)的全連接層級數(shù),測試其在MNIST 數(shù)據(jù)集上的性能變化(取三次運行的中位數(shù)),如圖8 所示,如果全連接網(wǎng)絡的層級在40 層以內,那么不同激活函數(shù)所表現(xiàn)出的性能沒有顯著性區(qū)別。而從40 層增加到50 層中,Swish要比ReLU表現(xiàn)得更加優(yōu)秀,因為隨著層級的增加,優(yōu)化將變得更加困難。在非常深的網(wǎng)絡中,Swish相對于ReLU 能實現(xiàn)更高的測試準確度。因此本文把MobileNet V2 的最后一行序列的激活函數(shù)進行替換。Swish 在網(wǎng)絡深層部分表現(xiàn)比較明顯,雖然會帶來一點延遲,但可以彌補只用ReLU激活函數(shù)的MobileNet V2產(chǎn)生的潛在精度損失。
圖7 在ResNet-32上的不同β 值的預測性能
圖8 Swish和ReLU激活函數(shù)的層級數(shù)與性能關系圖
本文模型訓練主要基于Tensorflow 框架工具和OPenCV視覺庫實現(xiàn)。在2015年11月份,Tensorflow被谷歌團隊開源用于實現(xiàn)CNN算法的一種非常優(yōu)秀的計算框架。Tensorflow 相比于其他框架的模型可以實現(xiàn)分布式計算、易用性高、計算速度快、靈活性強和兼容性強,算法更多并且系統(tǒng)也更穩(wěn)定。Tensorflow 是通過計算圖上每一個節(jié)點來進行模式表達和運算的編程體系[18],通過會話(Session)機制建立運行模型,此外它還可通過Tensorboard 機制提供清晰的可視化界面,更方便參數(shù)調節(jié)。
需要注意的是在應用Tensorflow工具時,需要將輸入數(shù)據(jù)的格式規(guī)范地轉化為TFRecord 形式,這樣有兩處便利,其一是方便將一個樣本不同的數(shù)據(jù)類型所有信息統(tǒng)一起來以二進制數(shù)據(jù)形式進行存儲;其二是可以利用文件隊列的多線程操作,使得數(shù)據(jù)的讀取和批量處理更加方便快捷[19]。
OpenCV 因為API 豐富、性能優(yōu)異,屬性友好,目前是最受歡迎的計算機視覺庫。OpenCV 目前有OpenCV2 和OpenCV3 兩大版本,考慮到版本兼容性和上手裝置困難程度,本論文研究應用OpenCV2 版本。依照功能與需求的差異,OpenCV2有許多差別的API接口,例如core核心模塊,imgproc圖片處置模塊,highGUI具備管理者界面和文件讀寫的API 接口函數(shù)等一系列非常有用的函數(shù)接口。
本文實驗的具體軟硬件環(huán)境配置見表1。
表1 實驗軟硬件環(huán)境配置
如圖9所示,為軟件運行界面及實時分割效果圖。
圖9 軟件運行界面及實時分割效果圖
在實驗的過程中,最終模型訓練需要的其他固定參數(shù)見表2。
本文所有訓練的實驗在把訓練集輸入到網(wǎng)絡之前,先規(guī)定batch尺寸為8,即將訓練集的隨機8張圖片構成一個批次,接著隨機random為每張圖片在[0.5,1.5]范圍之間選擇任意一種尺度比例進行縮放處理;然后再按照0.5 的概率大小對全部圖片做左右變換的翻轉處理;最后一步是將訓練圖片的大小都統(tǒng)一裁剪成513×513。這樣使訓練樣本的圖像尺寸和形狀更豐富,更具有隨機性,從而避免模型造成過擬合的效果。
模型的訓練流程如圖10所示。
表2 超參數(shù)設置
圖10 網(wǎng)絡訓練流程圖
實驗采用基于Imagenet數(shù)據(jù)集進行預訓練的模型,基于預訓練模型checkpoint 在VOC2012 和Cityscapes基礎上分別進行了30 000 次迭代訓練得到最終各自的DeepLab V3+模型。
本文中,基于ImageNet 數(shù)據(jù)集上獲取了三個不同通道的期望值與方差,對應三通道的期望值分別為0.475、0.466、0.416,標準差分別為0.239、0.234、0.235,最終讓訓練數(shù)據(jù)的全部通道均滿足期望值和方差分別是0和1的正態(tài)分布。
DeepLab V3+和改進之后的DeepLab V3參數(shù)設置相同,然后選擇訓練好的DeepLab V3+模型和改進的DeepLab V3模型分別在VOC2012和Cityscapes上進行測試,基于VOC2012 數(shù)據(jù)集的測試對比可視化結果如圖11所示。
從圖11測試結果中可以明顯看出,DeepLab V3+算法將第一張測試圖片中的小男孩和馬分割得特別清楚,與標簽圖片幾乎重合,然而本文設計的算法還存在標記分割顏色重疊的問題,在小男孩(淺粉色)的身上出現(xiàn)了一點馬(深粉色)的標記顏色,此外,對馬分割的邊緣相比DeepLab V3+不夠平滑。第二張測試圖片中的自行車,DeepLab V3+算法與標簽還算貼近,然而由于車體零件比較復雜,對于車鏈、腳蹬顏色不明顯的物體并沒有分割出來,本文算法也存在同樣的問題,另外還存在對于車輪(綠色)分割不完整的問題。但是本文算法與DeepLab V3+對比對于物體的整體輪廓分割并沒有相差太多,改進之后的模型依然可以分割出物體的邊界,清晰識別出物體的種類。
基于Cityscapes數(shù)據(jù)集的測試對比可視化結果分別如圖12所示。從圖12測試的可視化結果中,可明顯看到DeepLab V3+算法分割精度相對較好,其中路燈(白色)、行人(紅色)、車輛(藍色),標志(黃色)、樹木(綠色)和房屋建筑物(灰色)都分割得較清晰,與標簽十分貼近。甚至遠距離微小物體都可以分割清楚,但是由于路燈顏色較淺與背景建筑物顏色十分相近,對于路燈(白色)和不明物體(黑色),DeepLab V3+算法也沒有全部分割清楚。本文算法也同樣沒有解決這個分割問題,對于遠距離的人(紅色),本文分割出大概輪廓,從兩張測試圖片中還可以看到,對于右邊車輛(藍色)和樹木(綠色)的分割染上了指示牌的顏色(黃色),但物體的總體輪廓都能分割清楚,圖片也相對清晰。
本文算法的分割效果與DeepLab V3+算法有略微差距,大致輪廓的分割效果相同。然而在具體訓練模型的過程中,本文設計的新的輕量化網(wǎng)絡具備能夠非常快速地完成分割任務的特點顯而易見。具體對比測試結果見表3,其中運行時間代表的是計算機處理一批(batch=8張)圖片所需要的時間。
從表3可以看出,VOC數(shù)據(jù)集因為每張圖片內容簡單因此訓練都要比Cityscapes 快得多,并且以Xception結構為編碼部分骨干的DeepLab V3+的分割精度較好,但模型占內存最大,運行時間最久。相比較而言,改進后的DeepLab V3 模型縮小了很多,因此運算速度明顯提升。利用改進后的DeepLab V3 模型比DeepLab V3+的模型精度保持基本不變的情況下,計算參數(shù)量下降了約96%,Cityscapes 數(shù)據(jù)集上運行時間為0.8 s,VOC2012數(shù)據(jù)集上可達0.1 s,滿足實時性要求,模型的綜合性能達到最優(yōu)。本文算法在VOC2012和Cityscapes數(shù)據(jù)集上的可視化收斂曲線,分別如圖13和圖14所示,其中,橫坐標為迭代次數(shù),縱坐標為損失值,初始學習速率α=0.045。
圖11 基于VOC2012兩種算法對比分割結果
圖12 基于Cityscapes兩種算法對比分割結果
表3 兩種算法對比測試結果
圖13 基于VOC2012改進的DeepLab V3收斂曲線
圖14 基于Cityscapes改進的DeepLab V3收斂曲線
本文在研究DeepLab V3系統(tǒng)網(wǎng)絡的空洞卷積和編碼-解碼結構的基礎上,將MobileNet V2 網(wǎng)絡結構部分進行改進,將原有的非線性激活函數(shù)部分替換成新的Swish 激活函數(shù)進行精度補償。采用改進后的輕量化MobileNet V2 結構替代DeepLab V3 原有的特征提取器,在Cityscapes和VOC2012標準數(shù)據(jù)集上分別驗證了改進的DeepLab V3 和DeepLab V3+算法的效果。測試結果顯示,在Cityscapes 標準數(shù)據(jù)集上,模型大小從439 MB下降到15 MB,運行時間從5 s縮短至0.8 s。在VOC2012標準數(shù)據(jù)集上,模型大小同樣從439 MB下降到15M,運行時間從0.9 s縮短至0.1 s。并且,頻權交并比和平均交并比變化都不大。因而,改進的DeepLab V3 網(wǎng)絡模型能在維持一定精度的前提下,參數(shù)量和計算復雜度大大減小,計算速度有了明顯提升。經(jīng)對比測試實驗,可以得出改進的DeepLab V3 算法在模型精度和占用內存上可以達到綜合最優(yōu),滿足應用移動端設備實時分割的要求。該算法在精度方面的優(yōu)化提高是今后進一步深入研究的主要方向。