郁 云,曹 瀟
(1.南京信息職業(yè)技術(shù)學院數(shù)字商務學院,江蘇 南京 210046;2.中國電力科學研究院有限公司新能源研究中心,北京 100192)
不銹鋼管是一種中空長條圓形鋼材,作為鋼鐵廠的成品產(chǎn)品在石化、醫(yī)療輕工業(yè)和建筑業(yè)得到廣泛應用。建筑行業(yè)和鋼管租賃行業(yè)目前主要采用人工計數(shù)法對鋼管進行計數(shù)。堆垛的鋼管規(guī)模通常在500 根~1 500 根不等,整個人工計數(shù)過程耗時長、效率低,勞動強度非常大。研究用于鋼管生產(chǎn)廠家和鋼管租賃廠家,通過拍攝圖片進行鋼管自動識別方法,可以減輕計數(shù)工人的勞動強度,提高計數(shù)效率。
對圖像中圓形目標進行自動識別的傳統(tǒng)圖像識別方法得到廣泛應用的主要是基于Hough 變換的圓檢測算法[1-5]與結(jié)合輪廓提取和形態(tài)學重構(gòu)的圖像分割算法[6-8]。Suzuki 等[9]提出了基于梯度法的Hough 變換圓檢測改進算法,對于目標與背景反差較大的場景有很高的準確率,但對于由于變形、堆垛不整齊、拍攝角度、陰影等因素導致的非整圓鋼管圖像,以及雜亂背景下的鋼管圖像,精度急劇下降,無法滿足工程應用的需要。結(jié)合輪廓提取和形態(tài)學重構(gòu)的幾種方法相互類似,都是通過輪廓提取把圖像分割為若干互不相交的子區(qū)域,再通過設定閾值來篩選符合條件的子區(qū)域,通過形態(tài)學對子區(qū)域的形狀進行重構(gòu),最終實現(xiàn)對目標物體的識別[9]。該方法可以在一定程度上解決目標鋼管非正圓的識別問題,同時雜亂背景下的鋼管識別具有一定精度。但該方法在復雜光照條件下,無法區(qū)分鋼管陰影與堆垛間隙;并且隨著圖片中待識別鋼管的數(shù)量增多,單個鋼管所包含有效像素點變少,導致復雜背景與待識別目標之間的輪廓特征差異性降低,對子區(qū)域的篩選閾值變得困難,最終導致識別精度的快速下降。
基于深度學習的目標檢測方法近年來在實例分割、關(guān)鍵點提取以及目標識別等領域取得了應用突破,在精度、泛化能力和實用性等方面均顯著超越傳統(tǒng)機器視覺方法[10-14]。其中,谷歌提出的YOLOv3目標檢測方法,利用多尺度特征進行對象檢測[13]。通過設置13×13、26×26 以及52×52 三種不同分辨率的特征圖,在圖像中分別適配不同尺度的目標,在保持速度優(yōu)勢的前提下,提升了預測精度,尤其是加強了對小物體的識別能力,因此比較適合于本文所研究的密集堆垛鋼管的檢測。然而該算法與其他基于深度學習的目標檢測算法一樣,都是通過學習畫出目標的一系列候選識別框,然后通過設置非極大抑制(NMS)閾值[15],祛除多余的候選框,最終定位目標。對于密集堆垛又有相互遮擋的小目標,NMS會變得非常敏感,較大或較小的NMS 值都容易造成漏檢或誤檢,識別精度顯著下降。另一方面,基于深度學習的目標檢測方法極度依賴重度人工標注,相比與圖像分類,目標檢測任務不僅需要人工對訓練集中圖像進行分類,還需要在圖像中標注所有待檢測物體的位置、大小等信息。對于需要構(gòu)造至少包含大于10 000 張已標注圖片的訓練集,而每個圖片上包含大于1 000 個小目標的密集堆垛鋼管檢測任務,該方法又會帶來極大的人工勞動強度,導致算法失去工程應用價值。
通過上述算法存在的問題,結(jié)合工程應用的實際需求,本文提出了一種通過實現(xiàn)半自動標注來降低人工標注勞動強度,然后通過優(yōu)化YOLOv3 目標檢測模型的損失函數(shù),來提高密集堆垛鋼管識別精度的優(yōu)化方法。該方法首先利用變分自編碼模型(VAE)[12]結(jié)合少量人工篩選訓練樣本實現(xiàn)了對訓練樣本集的半自動標注,然后將已標注訓練集輸入計及排斥力損失的目標檢測模型進行訓練,最終用訓練后的模型輸出鋼管檢測結(jié)果。算法流程圖見圖1。該方法通過引入排斥力損失函數(shù)(Repulsion Loss)優(yōu)化了YOLOv3 模型的目標位置回歸損失函數(shù),降低了NMS 的敏感性,提高了模型對相互遮擋的密集鋼管截面的檢測精度?,F(xiàn)場拍攝的密集鋼管堆垛圖像的實際檢測驗證了算法的有效性和精度。
圖1 算法流程圖
現(xiàn)有的深度學習模型需要大量的人工標注樣本作為訓練集來保證模型的精度。而相對于圖像分類任務,目標檢測任務需要強標注信息作為模型的輸入,勞動強度極大。因此,實現(xiàn)無需人工參與,或僅需要少量人工修正的半自動標注方法成為深度學習模型推廣應用的前提。
變分自編碼器(VAE)[12]是一種引入先驗分布的自編碼模型(AE)[16],可以作為圖像特征提取器使用。通過將包含較少鋼管截面的低分辨率圖像輸入變分自編碼器進行特征提取,利用模型輸出的特征,設定閾值,對圖像子區(qū)域進行無監(jiān)督聚類,區(qū)分目標子區(qū)域(鋼管、鋼材、木材的截面)和非目標子區(qū)域(背景、空隙、陰影,非完整截面等)。據(jù)此,本文的思路是將高分辨率的鋼管堆垛圖像分割成低分辨率的圖像,然后利用變分自編碼器模型的無監(jiān)督聚類功能,對每個圖像的目標子區(qū)域與非目標子區(qū)域進行劃分,最后結(jié)合子區(qū)域的中心點位置數(shù)據(jù)實現(xiàn)對目標子區(qū)域的自動標注。其具體步驟如下:
步驟1 利用滑動窗將高分辨率的堆垛橫截面圖像集G中的每張圖片gi分割成N個R×R像素的低分辨率圖像組成的圖像集GLi(i=1,…,N),其中R由目標檢測算法的推薦輸入圖像尺寸決定;
步驟2 利用滑動窗將GLi中的每個圖像分成M個R0×R0像素的子區(qū)域集GSj(j=1,…,M),其中R0是人工預估的目標子區(qū)域的基準半徑,并記錄每個子區(qū)域在原圖像中的位置POSj;
步驟3 將GSj作為訓練集輸入變分自編碼器模型(VAE),對GLi中目標子區(qū)域GPj與非目標子區(qū)域GNj進行無監(jiān)督聚類,我們采用式(1)作為VAE 用來聚類的損失函數(shù)(Loss);
式中:x是待分類的樣本數(shù)據(jù)變量,(z,y)是通過VAE 模型學習提取的特征隱變量,z代表分類編碼,y是一個離散值,代表類別標簽?!玴(x) 是通過一批采樣數(shù)據(jù)統(tǒng)計獲得的樣本經(jīng)驗分布,p(z|x)假設為滿足均值為μ(x)、方差為σ2(x)的正態(tài)分布,q(x|z)為方差為常數(shù)的正態(tài)分布,q(z|y)是均值為μ(y)方差為1 的正態(tài)分布,q(y)假設為均勻分布時是一個常數(shù)。p(y|z)即為對隱變量z的分類器,可以通過訓練一個softmax 網(wǎng)絡[17]來擬合,擬合后的結(jié)果即可實現(xiàn)對輸入圖像的分類和標注。結(jié)合POSj實現(xiàn)對GLi中每個圖像的自動標注,形成已標注數(shù)據(jù)集M(GPj,POSj)。
步驟4 人工對對數(shù)據(jù)集M中誤差較大的標注數(shù)據(jù)樣本進行篩除。
至此,我們實現(xiàn)了僅需要少量人工篩選的密集鋼管堆垛圖像的半自動標注。
目標檢測是很多計算機視覺應用的基礎,比如實例分割、人體關(guān)鍵點提取、人臉識別等,它結(jié)合了目標分類和定位兩個任務。鋼管截面識別也是一種典型的目標檢測任務。YOLOv3 模型因為不需要優(yōu)化中間輸出結(jié)果,采用的底層深度神經(jīng)網(wǎng)絡骨架可替換,對小物體的識別精度較高,非常適合本文所述場景的工程應用。
YOLOv3 模型的目標檢測策略是:
步驟1 向模型輸入經(jīng)過重度標注的訓練集進行目標分類和大小、位置的訓練。訓練中用來計算預測目標與真實目標之間的大小、位置的誤差(即目標位置回歸損失函數(shù))被稱為IOU。IOU 被定義為預測目標區(qū)域框(Box) 與真實目標區(qū)域框(Ground Truth,GT)之間的面積交并比。定義公式如式(2)
步驟2 向模型輸入待檢測的測試數(shù)據(jù)集,利用k-means 聚類算法對所有預測識別框進行聚類分析,找出最優(yōu)的k個框,作為檢測模型的備選結(jié)果框。k-means 算法適用的距離函數(shù)如式(3)
步驟3 利用已訓練模型,計算所有備選結(jié)果框的預測置信度,選出置信度最大的框作為中心框,計算其他備選框到中心框之間的IOU,再通過非極大抑制法(NMS),設定IOU 閾值,祛除IOU 小于閾值的備選框,最終輸出測試集中的預測目標框。為保證識別精度,IOU 閾值一般設置為0.6 以上。
然而,密集堆垛的鋼筋截面圖像中往往包含上千根鋼管,對于多數(shù)拍攝角度,均存在密集遮擋問題,即待檢測目標(鋼管)之間相互遮擋,即同類遮擋。對于上述的同類遮擋(見圖2),由于密集遮擋的兩個目標的類別是相同的,所以兩個目標之間的特征是相似的,檢測器很可能無法定位。本應該屬于目標A 的候選框很可能會向目標B 發(fā)生偏移,導致定位不準確,而目標B 本身有自己的候選框,在接下來的非極大值抑制中,目標A 的候選框很可能被目標B 的候選框所抑制,進而造成了目標A 的漏檢。因此,對于密集遮擋問題,NMS 的閾值是很敏感的,閾值過高,造成誤檢,閾值低,造成漏檢。
圖2 同類遮擋示意圖
針對上述問題,本文算法在YOLOv3 模型訓練階段引入了排斥力損失來優(yōu)化YOLOv3 的目標位置回歸損失函數(shù)。該損失函數(shù)在強化目標之間的吸引因素的同時,也計及周圍目標框之間的排斥因素,有效解決了上述的漏檢和誤檢問題,提高了目標檢測的精度。
定義1排斥力損失
一種優(yōu)化的目標位置回歸損失函數(shù)。其包括一個吸引項和兩個排斥項,吸引項使預測框(如圖3-目標A 預測框)和所對應的真實目標框(如圖3-目標A 真實框)的距離縮小,而排斥項使得其與周圍非對應目標框(如圖3-目標B 真實框)的距離加大。
圖3 排斥力損失定義示意圖
計算公式如式(4)
通過兩個相關(guān)系數(shù)α和β來平衡三項損失值。其中,LAttr見式(5)為吸引項,優(yōu)化目標是使預測框盡量靠近目標對象。
式中:ρ+為所有正樣本的集合,P為其中一個候選回歸,BP為回歸P的預測框。
排斥項LRepGT見式(8)。目標是讓預測框離除了分配給它的真實框之外的極大值框盡可能遠。
而排斥項LRepBox見式(10)。目標是讓分配了不同真實框目標的候選框盡可能遠。
根據(jù)真實目標框?qū)ⅵ眩譃椴煌蛹?,LRepBox的優(yōu)化目標是使得來自與不同子集的候選框之間覆蓋(IOU 值)盡可能小。其中,分母為示性函數(shù),表示:必須是有交集的預測框才計入損失值,如果兩個預測框完全不相鄰,則不計入。
式中:σ為敏感性參數(shù),在實驗中,RepGT 和RepBox損失分別在σ=1 和σ=0 取得更好的效果。
綜上,計及排斥力損失的密集堆垛鋼管識別與計數(shù)方法的具體步驟如下:
步驟1 導入含有預訓練網(wǎng)絡權(quán)重的YOLOv3模型,并對模型進行超參數(shù)設置:一般情況下設置IOU 閾值>0.6。
步驟2 用排斥力損失計算代替YOLOv3 模型中用于計算目標位置回歸損失函數(shù),構(gòu)造新的目標檢測模型YOLO-Rep。
步驟3 將已標注的訓練數(shù)據(jù)集M 輸入YOLORep 目標檢測模型,進行模型精調(diào),調(diào)整模型中網(wǎng)絡節(jié)點的預訓練權(quán)重。
步驟4 將待檢測圖像經(jīng)過YOLOv3 模型目標檢測策略步驟1 中的方法進行分割后將子圖像集輸入YOLO-Rep 模型進行目標檢測,輸出含預測目標框的已檢測子圖像集。
步驟5 合并已檢測子圖像集并統(tǒng)計總計數(shù)結(jié)果。
本文的實驗驗證選用在某鋼管租賃公司腳手架用鋼管的圖像5 000 張作為圖像實驗訓練集,選取1 000 張作為圖像測試集,規(guī)格均為3 000×2 000 像素。選取2 種圖像:圖像A(共3 000 張,其中訓練集2 500 張,測試集500 張,見圖4),場景為堆垛形式的倉庫儲存狀態(tài);圖像B(共3 000 張,其中訓練集2 500 張,測試集500 張,見圖5),場景為裝車待運輸狀態(tài),分別代表鋼管總數(shù)在500 根以下和1 000根以上的場景。
圖4 識別結(jié)果1
實驗中,采用目標區(qū)域分類效果實驗及圖像整體計數(shù)精度實驗等兩組實驗來全面評價本文算法(YOLO-Rep)與傳統(tǒng)的基于輪廓提取方法(Contours-Find)以及YOLOv3 原始算法的實際效果。
將待訓練的圖像按照YOLOv3 對輸入圖片尺寸的要求,分割成416?416 像素的低分辨率圖像集。按本文第1 節(jié)所述進行半自動標注后,作為YOLOV3 及本文算法的訓練集輸入進行模型訓練,對于輪廓提取方法則不需要訓練集。在YOLOv3 算法及本文算法中,均設置IOU =0.7。在排斥力損失計算中,設置相關(guān)系數(shù)α=0.5 和β=0.5。
為全面客觀地評價算法效果,采用二分類算法通用的評價指標:精度(Precision,P)、召回率(Recall,R)以及F1 得分(F1-score)作為指標來評價上述3 種算法。
精度
式中:TP代表目標區(qū)域(鋼管)被正確分類的樣本數(shù),F(xiàn)P代表非目標區(qū)域(雜物、背景)被錯誤分類為目標區(qū)域的樣本數(shù)。精度指標體現(xiàn)了算法對目標區(qū)域識別的準確率。
召回率
式中:FN代表目標區(qū)域被錯誤分類為非目標區(qū)域的樣本數(shù)。召回率指標體現(xiàn)了算法對目標區(qū)域樣本的利用率。
F1 得分
F1 得分是精度和召回率的調(diào)和平均數(shù),用來全面平衡地評價算法性能。
為檢驗鋼管數(shù)量較多的復雜環(huán)境下各算法的目標檢測性能,實驗中將上述圖像測試集中的圖像B測試集(單個圖像中含1 000 根以上的鋼管截面)分割成416?416 像素的低分辨率圖像集作為實驗輸入。通過人工在算法輸出的低分辨率圖像上判斷樣本分類的正確性,對結(jié)果進行統(tǒng)計。得到的上述三種方法分類結(jié)果的評價對比如表1。
表1 三種算法對圖像B 測試集分類性能對比
從表1,我們可以得出結(jié)論,基于輪廓提取的算法F1 得分僅為0.72,不適合用作含1 000 根以上鋼管堆垛的計數(shù)。而本文算法在精度、召回率以及F1得分上均顯著優(yōu)于YOLOv3 算法。
將圖像A 和圖像B 測試集輸入已由上述實驗訓練集訓練好的YOLOv3 模型和本文算法模型,直接輸出帶鋼管區(qū)域識別標記的結(jié)果圖像(識別出的每根鋼管在輸出圖像中用1 個點來標記),并自動統(tǒng)計識別出的鋼管總數(shù)。在實驗結(jié)果檢驗中,由人工觀察帶標記的結(jié)果圖像,通過統(tǒng)計漏標和錯標鋼管數(shù)量,修正算法統(tǒng)計的鋼管總數(shù),最終確定鋼管總數(shù)的真值。
利用本文算法對鋼管圖像A 和圖像B 兩種圖像的識別結(jié)果如圖4(a)與圖5(a)所示。相應地,圖4(b)與圖5(b)分別為利用YOLOv3 模型對圖像A 和圖像B 進行鋼管識別的結(jié)果。
圖5 識別結(jié)果2
將圖4(a)與圖4(b)對比可以看到,對于鋼管數(shù)量在500 根以下的圖像,單個鋼管所占像素點較多,鋼管之間沒有明顯遮擋,YOLOv3 算法與本文算法計算結(jié)果相對接近。但圖4(b)中出現(xiàn)了由于排列不齊導致鋼管截面不在一個平面上,造成鋼管圖像被遺漏的情況。將圖5(a)與圖5(b)對比可以看到,對于鋼管數(shù)量在1 000 根以上的圖像,單個鋼管所占像素點較少,鋼管之間出現(xiàn)相互遮擋,在此種情況下,YOLOv3 模型的精度下降較快,堆垛邊緣以及有遮擋的鋼管均沒有被成功識別;而本文算法模型在有相互遮擋、單個鋼管有效像素點快速下降的情況下,保持了穩(wěn)定的識別精度,體現(xiàn)了在工程實踐中良好的實用性與易用性。表2 說明了采用上述兩種算法分別對圖像A 和圖像B 進行識別的計數(shù)精度統(tǒng)計。
表2 兩種算法對圖像A 與圖像B 測試集識別精度對比
本文提出了首先利用變分自編碼器對圖像訓練集進行半自動標注,然后提出了計及排斥力損失的密集堆垛目標檢測算法,最終實現(xiàn)了端到端的密集堆垛鋼管自動識別計數(shù)。通過與傳統(tǒng)基于輪廓提取的圖像分割算法以及現(xiàn)有的基于深度學習的目標檢測方法相比較,結(jié)合現(xiàn)場實際檢測結(jié)果對比驗證,本文提出的算法具有以下優(yōu)點:(1)具有很強的抗干擾性和魯棒性,對圖像拍攝者和拍攝光照條件的要求較低。(2)通過無監(jiān)督學習方法,實現(xiàn)了圖像的自動標注,極大降低了人工標注的工作量,提高了模型訓練效率。(3)對于包含大量相互遮擋的密集堆垛目標的圖像識別,表現(xiàn)出優(yōu)秀的性能,適合廣泛應用于各種密集堆垛目標自動計數(shù)的場景。
實驗與分析結(jié)果證明,本文所提出的算法具有很強的抗干擾性和魯棒性,對圖像拍攝者的要求較低。特別是對于包含大量鋼管目標的圖像識別,在較低算法復雜度下,表現(xiàn)出優(yōu)秀的性能。因此,對工程應用的復雜場景具有廣泛的實用性和易用性。