蘭天翔,向子彧,劉名果,陳 凱
1.河南大學 物理與電子學院 開封市智能制造工程技術研究中心,河南 開封475000
2.電子科技大學 格拉斯哥學院,成都611731
語義分割是一項像素級精度的分類任務,其將輸入視覺圖像分為不同的語義類別并對相應像素點作標記。早期語義分割主要使用聚類算法,而全卷積語義分割網(wǎng)絡的出現(xiàn),使得深度學習技術在語義分割領域快速推廣。全卷積語義分割網(wǎng)絡始于Long等人提出的FCN網(wǎng)絡(Fully Convolutional Networks)[1],核心思想是使用卷積層替換網(wǎng)絡中原有的線性層,使得網(wǎng)絡能夠適應任意尺寸的輸入。FCN在網(wǎng)絡層級間使用了跳級結構,將低級特征引入到高級特征中,在語義分割任務中取得了不錯的效果。其后在FCN網(wǎng)絡的基礎上,Ronneberger等人提出了U-Net網(wǎng)絡[2],通過使用多次跳躍連接,增加低層特征細節(jié),從而提高網(wǎng)絡的精度;Noh等人提出了DeconvNet網(wǎng)絡[3],改善了FCN網(wǎng)絡感受野固定、上采樣粗糙的問題;Badrinarayanan等人參考U-Net及DeconvNet,提出了SegNet網(wǎng)絡[4],大幅減少了DeconvNet的參數(shù)量,并保證了網(wǎng)絡分割精度;Google公司提出空洞卷積方式,有效地擴大了語義分割網(wǎng)絡的感受野,使用空間金字塔空洞卷積從多個尺度提取圖片中的特征,由此發(fā)展出deeplab網(wǎng)絡系列[5-8];其他還有諸如E-Net、Link-Net、Mask R-CNN、PSPNet等[9-14]基于FCN發(fā)展而來的網(wǎng)絡模型,在語義分割和目標檢測方面起到了重要的作用。雖然各種神經(jīng)網(wǎng)絡在分割精度上不斷提升,但模型對計算量的要求也在不斷增加,工業(yè)自動化方向的需求并沒有得到滿足。在工業(yè)自動化生產(chǎn)過程中,如何使用較少的資源,既好又快地完成指定任務是難點之一。目前對于輕量化模型的研究并不多見,主要的輕量化模型結構有Xception、SqueezeNet、Shufflenet、MobileNet等[15-18],雖能夠有效地降低模型的參數(shù)和計算量,但仍存在訓練過程復雜、模型精度不高的缺點。
本文針對工業(yè)應用方向改進了U-Net語義分割網(wǎng)絡。改進思想主要參考MobileNet-V2[19]對深度可分離卷積(depthwise separable convolution)的運用,并在其基礎上高效利用深層特征,確保網(wǎng)絡的準確率;綜合利用普通卷積及bottleneck模塊的優(yōu)勢,進一步降低了網(wǎng)絡的參數(shù)量和計算量,針對工業(yè)生產(chǎn)對圖像實時處理的要求,設計了輕量化LU-Net(Light U-Net)網(wǎng)絡。LU-Net網(wǎng)絡相比U-Net網(wǎng)絡,在精度更高的同時,運行在不同設備上均能取得更快的速度,在保證分割效果的前提下,滿足實時處理的要求。經(jīng)過實驗驗證,LU-Net網(wǎng)絡在公開的DRIVE數(shù)據(jù)集上預測圖片平均交并比(mean Intersection over Union,mIoU)達到了0.77,在CPU上檢測一張圖片平均延遲為1.0 s,在GPU上運行平均延遲為0.080 s;在凹陷符號數(shù)據(jù)集上預測圖片平均mIoU值為0.94,在CPU上檢測一張360×270大小的圖片平均延遲為0.3 s,在GPU上運行平均延遲為0.025 s。LU-Net網(wǎng)絡同時兼顧了語義分割的速度與精度,能夠滿足工業(yè)生產(chǎn)對實時處理的需求。
工業(yè)生產(chǎn)中,許多任務需要準確地將同類目標從背景中剝離,U-Net網(wǎng)絡架構十分適合此類任務。
然而U-Net網(wǎng)絡并不是專門面向工業(yè)生產(chǎn)所提出的網(wǎng)絡模型,將其直接運用在工業(yè)生產(chǎn)領域時存在著一些問題:(1)模型參數(shù)多,占用內(nèi)存大,對硬件要求高;(2)計算量大,分割速度慢,不能滿足工業(yè)中實時檢測的需求。因此,須要對U-Net網(wǎng)絡進行輕量化設計,以減少參數(shù),提高其運行速度。
在輕量化設計中,本文將U-Net與bottleneck結構[19]有機融合,替代傳統(tǒng)卷積操作,在保證分割精度的前提下,利用bottleneck的深度可分離卷積層來減少網(wǎng)絡整體的參數(shù)量和計算量。深度可分離卷積不同于普通卷積,它將普通卷積的通道相關性與空間相關性分離,輸入特征張量的每個通道都對應一個單獨卷積核,卷積后輸出特征張量。
假設輸入特征張量為H×W×Ci(其中H為特征張量高度,W為特征張量寬度,Ci為特征張量通道數(shù)),普通卷積的卷積核為F×F×Ci,共有Co個卷積核,對此特征張量進行四周填充卷積操作,則輸出特征張量為H×W×Co,普通卷積參數(shù)量為:
計算量為:
深度可分離卷積參數(shù)量為:
計算量為:
由公式中可以看出,深度可分離卷積能夠明顯降低卷積操作的參數(shù)量與計算量。但由于深度可分離卷積在通道間并沒有信息交流,要配合1×1卷積核的普通卷積共同使用。
圖1中的兩個結構為不同功能的bottleneck結構。圖中左側bottleneck作用是替代傳統(tǒng)卷積,將普通卷積分解為兩個卷積核尺寸為1×1的普通卷積和一個3×3深度可分離卷積,以保持網(wǎng)絡精度;右側結構主要作用是縮小輸入特征向量尺寸,與池化層的作用相似,但可以保留更多特征信息。兩種結構都會在第一次1×1卷積時對輸入通道數(shù)進行擴張,擴張倍數(shù)通常為6倍。因此結構中間的深度可分離卷積層需要同時并行處理大量的卷積操作,在CPU上運行時會嚴重影響網(wǎng)絡速度。因此,直接使用bottleneck結構替換U-Net卷積操作并不可取。
圖1 MobileNet-V2 bottleneck結構Fig.1 Structure of MobileNet-V2 bottleneck
同時,Bottleneck替換后的U-Net網(wǎng)絡相比于原U-Net網(wǎng)絡,網(wǎng)絡參數(shù)量為41×106,多增加10×106,計算量增加了20%,其中1×1卷積操作參數(shù)量占網(wǎng)絡整體參數(shù)量的99.2%,計算量占網(wǎng)絡整體計算量的97.5%,仍然有提高改進的空間。因此,綜合bottleneck卷積結構和普通卷積的優(yōu)缺點,本文提出了LU-Net網(wǎng)絡,網(wǎng)絡結構如圖2所示。
圖2 LU-Net結構Fig.2 Structure of LU-Net
LU-Net沿用了U-Net的整體架構,使用編碼器解碼器結構。圖2中模塊1及其左側網(wǎng)絡部分為編碼器,模塊3及其右側部分為解碼器。網(wǎng)絡使用跳躍連接的方式將低級特征與高級特征拼接,使低級特征與高級特征進行信息交流,加強網(wǎng)絡對圖像細節(jié)的處理能力。相較于U-Net,本網(wǎng)絡在以下方面進行了改進:
(1)減少了網(wǎng)絡卷積層數(shù),省去重復的特征提取步驟。
(2)在模塊1及模塊3位置使用了bottleneck結構。在此位置,張量尺寸縮小為原圖的四分之一,bottleneck結構能夠更好地提取張量特征,且不會產(chǎn)生過多并行計算的負擔。
(3)編碼器與解碼器交接位置使用模塊2對接。模塊2與bottleneck相似,但中間層增加2層深度可分離卷積(如圖2所示),在參數(shù)量與計算量增加不多的情況下,使用多層深度可分離卷積增強網(wǎng)絡對抽象特征的提取能力,提高深層特征的利用效率,增加網(wǎng)絡精度。
(4)解碼器使用雙線性插值法代替反卷積對特征圖進行上采樣。相較于反卷積上采樣方式,雙線性插值法能夠有效避免反卷積中可能產(chǎn)生的棋盤效應導致的訓練困難。
(5)網(wǎng)絡中的激活函數(shù)均采用leaky-relu激活函數(shù),使網(wǎng)絡具有非線性的同時,避免因激活函數(shù)導致卷積神經(jīng)元的失活影響網(wǎng)絡的訓練。
經(jīng)過上述改進,LU-Net網(wǎng)絡參數(shù)量縮小至原參數(shù)量的7.4%,計算量約為原計算量的42.2%;深度可分離卷積的引入既保證了準確率,也提升了網(wǎng)絡處理速度。
網(wǎng)絡最終輸出張量經(jīng)過沿通道維的softmax函數(shù)后形成預測圖像。
實驗在服務器中進行,使用語言為Python3.7.3,深度學習框架為tensorflow1.13,服務器系統(tǒng)為windows sever 2012,內(nèi)存為32 GB,GPU為Tesla K40,顯存為12 GB。測試時使用CPU為Intel Core i7-6700。
實驗在兩個數(shù)據(jù)集上進行,分別使用公開的DRIVE數(shù)據(jù)集及石墨板上的凹陷符號數(shù)據(jù)集。DRIVE數(shù)據(jù)集是一個醫(yī)療圖像數(shù)據(jù)集,由40張圖片組成,其中20張為訓練集,20張為測試集;圖片尺寸為565×584;每張圖片都有對應的手工標記標簽。凹陷符號數(shù)據(jù)集共有30張凹陷字符圖片,每張圖片大小為1 440×1 080,其中20張作為訓練集,10張作為測試集;圖片特征的標記均由實驗人員手工完成。由于訓練集樣本量小,需要對訓練集進行擴充處理。實驗中使用對原始訓練圖片隨機剪裁的方法擴充訓練集,剪裁圖像大小為200×200。
網(wǎng)絡的損失函數(shù)選擇softmax交叉熵函數(shù),其公式為:
其中,p(x)代表真實概率分布,q(x)代表神經(jīng)網(wǎng)絡函數(shù)輸出的預測概率分布,H()p,q即代表了預測概率與真實概率之間的差異。網(wǎng)絡在訓練過程中,通過神經(jīng)網(wǎng)絡優(yōu)化器的不斷優(yōu)化網(wǎng)絡參數(shù),縮小預測結果與真實結果之間的空間距離,優(yōu)化神經(jīng)網(wǎng)絡的預測結果。
實驗評估標準選擇通用的準確率(AC)、精確率(precision)、召回率(recall)與平均交并比(mIoU)。其公式如下:
上述公式中TP(True Positives,真正例)為正確分割的物體像素數(shù),TN(True Negatives,真負例)為正確分割的背景像素數(shù),F(xiàn)P(False Positives,假正例)為錯誤分割為物體的背景像素數(shù),F(xiàn)N(False Negatives,假負例)為錯誤分割為背景的物體像素數(shù)。公式(6)表示正確預測的像素數(shù)與圖片像素數(shù)的比,即為預測準確率;公式(7)為精確率,表示預測為正例的樣本中正確的個數(shù)比例;公式(8)為召回率,表示實際的正例樣本中能夠被正確預測的比例;公式(9)為平均交并比公式,A為手動標記圖像,B為網(wǎng)絡預測圖像,為兩張圖像的交并比,mean為求均值。
實驗中,LU-Net-64網(wǎng)絡普通卷積層的通道數(shù)與原U-Net網(wǎng)絡對應層通道數(shù)相同,bottleneck結構擴張倍數(shù)為3倍,LU-Net-32普通卷積層的通道數(shù)為原U-Net網(wǎng)絡對應層通道數(shù)的一半,bottleneck結構擴張通道倍數(shù)為6倍。訓練使用Adam優(yōu)化器對網(wǎng)絡參數(shù)進行優(yōu)化,學習率設置為1E?4,訓練輪數(shù)設置為3 000輪。
首先實驗在凹陷字符數(shù)據(jù)集上進行,本實驗將原始圖像縮放至360×270分辨率,再進行隨機剪裁擴充處理。
網(wǎng)絡實驗結果如圖3所示。從圖3(b)中可以看出,使用傳統(tǒng)閾值分割方法分割出的圖像,雖已經(jīng)過濾波處理,仍然含有大量的噪點,字符圖像有殘缺,圖像分割效果差;神經(jīng)網(wǎng)絡預測圖像清晰完整,能夠清楚地辨認圖像中的字符。相較于U-Net網(wǎng)絡,LU-Net-64網(wǎng)絡預測圖像中字符的細節(jié)部分略差,而對字符整體的預測更優(yōu),圖像分割質量與U-Net基本相同。LU-Net-32網(wǎng)絡預測圖像相對于LU-Net-64網(wǎng)絡,質量略為下降,但同樣能夠清晰看到分割出的字符。
圖3 凹陷字體實驗效果對比圖Fig.3 Result of hollow symbol dataset experiment
實驗的詳細參數(shù)對比如表1所示。從表1中可以看出,在CPU上運行,U-Net處理圖片需要1.82 s,不能達到實時處理的要求;LU-Net-32處理圖片需要0.30 s,能夠做到實時處理。LU-Net-32不論是在串行能力強的CPU還是在并行能力強的GPU上運行時間均為最短。LU-Net網(wǎng)絡模型平均準確率與mIoU均優(yōu)于U-Net網(wǎng)絡,LU-Net-32精確率更高,而LU-Net-64召回率更高。LU-Net-64網(wǎng)絡參數(shù)量為U-Net參數(shù)量的7.4%,運算量為原來的42.2%,運行時間提高了2倍。LU-Net-32網(wǎng)絡的參數(shù)量、運算量及預測所需時間相對于LU-Net-64網(wǎng)絡均不及其50%,準確率雖略為下降,但下降幅度不大,而預測所需時間的縮短、參數(shù)量的減小十分明顯。因此在一些需要實時預測的任務中,使用LU-Net-32網(wǎng)絡比較合適,而在一些更注重標注準確率或召回率的任務中,LU-Net-64網(wǎng)絡更加合適。
表1 凹陷字符數(shù)據(jù)集不同網(wǎng)絡分割測試結果Table 1 Segmentation results of models on hollow symbol dataset
實驗驗證LU-Net網(wǎng)絡在公開數(shù)據(jù)集DRIVE上的效果,實驗結果如圖4、圖5所示。
圖5 部分實驗放大圖Fig.5 Local enlarged drawing of experiment
從圖4中能夠看出,LU-Net網(wǎng)絡分割圖像能夠取得與U-Net網(wǎng)絡同樣的效果。在CPU上運行時,U-Net分割一張圖片需要5.285 s,不能達到實時處理的要求,LU-Net-64需要2.878 s,而LU-Net-32需要1.004 s,將速度提升了5倍。在GPU運行條件下U-net網(wǎng)絡分割一張完整圖片需要0.367 s,LU-Net-64網(wǎng)絡需要0.197 s,LUNet-32網(wǎng)絡則只需0.080 s,LU-Net網(wǎng)絡不但分割效果更優(yōu),且將運行速度提升了一倍以上。
圖4 DRIVE實驗效果對比圖Fig.4 Result of DRIVE dataset experiment
圖5為圖4中部分實驗結果圖的放大效果,能夠更明顯地看到不同網(wǎng)絡處理圖像的細節(jié)。U-Net網(wǎng)絡分割效果在細節(jié)部分處理得更好,能夠分割出部分細小血管,但精確率(precision)低,圖中能夠明顯看出存在較多假正例(FP)標注現(xiàn)象;LU-Net-64網(wǎng)絡對粗血管分割效果更加貼近于人工標記圖像,但相對的細小血管部分分割精度下降,手工標記中存在的部分細小血管并沒有在圖上標出。圖片整體的分割準確率與精確率有所提高,假正例標注相對減少;而LU-Net-32網(wǎng)絡具有與LU-Net-64基本相同的分割效果,召回率則略低于LU-Net-64網(wǎng)絡。圖像整體的分割精確率進一步提高,網(wǎng)絡整體的運算量更少,速度表現(xiàn)更快。實驗的詳細結果參數(shù)如表2所示。
表2 DRIVE數(shù)據(jù)集不同網(wǎng)絡分割測試結果Table 2 Segmentation results of models on DRIVE dataset
從表中能夠看到,在此數(shù)據(jù)集上,LU-Net在兩種計算設備上均獲得了預測所需時間的最佳成績。LU-Net-32網(wǎng)絡計算速度提升相對更加明顯,且在除了召回率的各方面表現(xiàn)均為最優(yōu)。
通過以上對比實驗充分證明,LU-Net能夠在保持精度的同時快速完成語義分割的任務。LU-Net-64在準確率與召回率方面略有優(yōu)勢,LU-Net-64則更快,模型更小。在實際應用時可以從LU-Net-32與LU-Net-64中根據(jù)需求自行選擇,運用在工業(yè)生產(chǎn)等需要快速分割的場景中。
神經(jīng)網(wǎng)絡的輕量化使網(wǎng)絡更易于應用在工業(yè)生產(chǎn)領域。本文針對工業(yè)生產(chǎn)環(huán)境中深度學習網(wǎng)絡的實時性問題,基于U-Net網(wǎng)絡架構,結合MobileNet-V2網(wǎng)絡的思想,綜合利用深度可分離卷積與普通卷積的優(yōu)點,設計了一種快速語義分割網(wǎng)絡LU-Net。LU-Net網(wǎng)絡降低了參數(shù)量,減少了計算量,不論是在CPU還是在GPU上運行,均能夠在保證精確度的同時,提高語義分割的速度。經(jīng)過實驗驗證,LU-Net網(wǎng)絡處理一張尺寸為360×270的圖片在CPU上平均耗時為0.30 s,在GPU上平均耗時為0.025 s;處理一張尺寸為565×584的圖片在CPU上平均耗時為1.004 s,在GPU上平均耗時為0.079 7 s。網(wǎng)絡在DRIVE數(shù)據(jù)集及凹陷字體數(shù)據(jù)集上的準確率均在0.96以上。相比于U-Net,本文算法在提升準確率的同時將網(wǎng)絡參數(shù)量縮小至0.59×106,為其1.9%;計算量縮小至57.9 GFlops,為其8.8%。網(wǎng)絡大幅減少了設備的計算負擔,加快了分割速度,能夠滿足工業(yè)生產(chǎn)實時處理的需求。