王小康,陶青川
(四川大學(xué)電子信息學(xué)院,成都610065)
射擊訓(xùn)練作為軍隊里士兵不可或缺的重要實訓(xùn)項目,可以讓官兵在實戰(zhàn)化訓(xùn)練中發(fā)現(xiàn)短板,提升士兵的專業(yè)水準,對于促進軍隊現(xiàn)代化具有重要意義。傳統(tǒng)的成績計算方式是由人工實時報靶,但該方式存在人為誤報、工作量巨大并且還存在一定的風險等問題,近些年隨著視頻圖像處理領(lǐng)域技術(shù)的不斷積累,基于計算機視覺的自動報靶系統(tǒng)因其精準實時、穩(wěn)定性強、安全低成本等優(yōu)點被廣泛研究[1]。由此又出現(xiàn)了一系列基于數(shù)字圖像處理的自動報靶系統(tǒng)。在基于圖像處理的自動報靶系統(tǒng)設(shè)計中,由于彈孔面積過小,且在多次射擊同一張靶面后可能會存在不同程度的重合問題,如何正確區(qū)分彈孔和非彈孔,準確判斷孤立彈孔還是重合彈孔,一直是彈孔檢測中研究的重難點。目前針對彈孔檢測方法主要是一些傳統(tǒng)方法[2]:①差影法:原理是在快速射擊過程中,連續(xù)兩次射擊得到的兩幀畫面近似沒有變化,故可以對兩幀靶面圖進行減法運算,由此認為得到的彈孔是新增的彈孔。該方法簡單直觀,但抗干擾性較差,如果前后兩幀靶面由于外部因素造成抖動出現(xiàn)明顯位移,則剪影結(jié)果會出現(xiàn)較大誤差。②顏色特征:把彈孔的RGB色彩信息作為判別標準,通過設(shè)定先驗彈孔的RGB范圍,過濾不在顏色范圍內(nèi)的區(qū)域,只把符合條件的區(qū)域判定為彈孔。但該方法的缺點是RGB色彩空間具有局限性,無法應(yīng)對靶面亮度等外部環(huán)境變化帶來的干擾,魯棒性較低。③幾何特點:在實際射擊場景中,情景比較固定單一,多次射擊后的彈孔形狀規(guī)則且相似,故可以在篩選階段通過彈孔的這些幾何特性對彈孔進行分類和篩選,但這種方法過于依賴彈孔圓率、大小等先驗值的設(shè)定,在極端情況下依舊會和靶面上的劃痕以及其他非彈孔混淆,造成誤檢。
卷積神經(jīng)網(wǎng)絡(luò)最初于二十世紀80至90年代被提出,到了二十一世紀后,隨著深度學(xué)習(xí)理論的提出和計算機等硬件設(shè)備的計算能力的大幅提升,卷積神經(jīng)網(wǎng)絡(luò)得到了快速發(fā)展,其研究成果逐漸被應(yīng)用于工業(yè)界。R-CNN[3]框架于2013年由Girshick等人提出后,開啟了新時代以深度學(xué)習(xí)為基礎(chǔ)的目標檢測熱潮。當前基于深度學(xué)習(xí)的目標檢測模型主要分為兩類:twostage檢測模型和one-stage檢測模型,二者都是基于錨框(anchor)的目標檢測算法。Two-stage檢測模型典型代表有R-CNN、Faster R-CNN[4]。基于二階段的檢測模型優(yōu)點是檢測精確度較高,缺點是是耗時過長,實時性較差。one-stage檢測模型主要包括:YOLO[5]、SSD[6]、YOLOv2[7]、YOLOv3[8]等。one-stage檢測模型因其檢測一步完成,故能實現(xiàn)端到端的檢測,相較于two-stage檢測模型有著更快的檢測速度,但是隨之帶來的問題是檢測精度會有所降低。但使用錨框的問題是,由于檢測器被訓(xùn)練用以分類每個錨框是否能最大程度匹配真實框,所以需要在檢測階段預(yù)設(shè)大量的預(yù)選框以待匹配,然而實際上最終只有一小部分框能精準匹配到目標,就會導(dǎo)致正負樣本的極度不平衡,減慢訓(xùn)練速度。
隨著近些年基于anchor-free的目標檢測算法的興起,這些問題逐漸得到解決。所謂基于關(guān)鍵點的anchor-free的目標檢測,其實質(zhì)仍是one-stage網(wǎng)絡(luò),但是不再預(yù)設(shè)錨框,相較anchor-based算法速度上有不小的提高。本文提出一種基于改進CenterNet模型的快速彈孔檢測方法,改進特征提取網(wǎng)絡(luò)的卷積層,精簡網(wǎng)絡(luò)層數(shù),在保持原有網(wǎng)絡(luò)的精度的前提下,降低網(wǎng)絡(luò)參數(shù)量,提高模型的檢測速度,在彈孔檢測階段代替?zhèn)鹘y(tǒng)的閾值分割等算法完成檢測。實驗證明,本文所提出的檢測算法相較改進之前,檢測速度有明顯提升,可以更好地滿足實時性要求,同時比傳統(tǒng)算法有更高的準確性和魯棒性,可以應(yīng)用于大部分彈孔檢測識別的場景。
基于視頻圖像處理的自動報靶系統(tǒng)在算法流程上,目前主要處理方法如下,對視頻中獲取的原始幀圖片進行一系列形態(tài)學(xué)預(yù)處理,包括靶面提取、靶面傾斜校正、靶面圖像增強等等操作,具體算法流程如下圖1所示,目的是為后續(xù)提供一個干擾盡可能小的檢測環(huán)境,然后在此基礎(chǔ)上,再做彈孔檢測和環(huán)值判定工作。環(huán)值判定一般有幾種普遍的做法,一種是基于環(huán)區(qū)的判定方法,其思想是將每一個環(huán)區(qū)先檢測出來,然后分別打上標簽和該環(huán)區(qū)的環(huán)值相對應(yīng),判定時直接讀出彈孔所在環(huán)區(qū)的環(huán)值即可。由于靶面的環(huán)間距是相等的,所以還有一種方法是預(yù)先檢測到靶面圖像的中心點,然后只需要計算所檢測彈孔和中心點之間的歐式距離和環(huán)間距就能計算出具體環(huán)數(shù)。相比較于第一種方法,第二種方法簡單直觀,并且射擊結(jié)果可以精確到小數(shù)點后數(shù)位,調(diào)控方便??紤]到在實訓(xùn)環(huán)境中,靶面一般放置在距離地面一人高的位置上,為了避免在射擊過程中子彈擊壞攝像頭,攝像頭一般放置在靶面正前方靠近地面的位置,所以在實際采集到的圖像幀中,靶面會存在一定角度上的傾斜,對于第二種方法,這種三維畸變會導(dǎo)致距離測量產(chǎn)生誤差繼而影響后續(xù)的環(huán)值判定,故在進行彈孔檢測之前,需要先把靶面圖像進行幾何校準等一系列預(yù)處理操作,如圖2所示。
圖1 算法流程圖
圖2 預(yù)處理效果圖
CenterNet算法是于2019年4月提出的一種anchor-free類型的算法,該算法大致思想是將待檢測目標看作一個單點模型,不同于一階段檢測算法或是二階段檢測算法需要預(yù)先設(shè)定很多不同尺寸的錨框,只需要通過關(guān)鍵點估計算法找到目標中心,而后再回歸目標的尺寸、姿態(tài)估計、3D坐標信息等其他屬性[9]。由于每個目標中心點只有一個,一旦確定中心點就可以唯一確定一個目標,因此也不需要非極大值抑制后處理,這將大大減少了網(wǎng)絡(luò)的計算量和模型的訓(xùn)練時間。加之損失函數(shù)中不僅有目標中心點的位置損失和該位置偏置損失,還加入了目標大小損失,這也能提高算法的準確度。
原文分別使用了三種主干網(wǎng)絡(luò),分別是RseNet-18[10]、DLA-34[11]、Hourglass-104[12]。根據(jù)作者實驗網(wǎng)絡(luò)在經(jīng)典數(shù)據(jù)集上的表現(xiàn),Hourglass-104雖然速度略有不及其他主干網(wǎng)絡(luò)但是在精度上表現(xiàn)更好。所以本文實驗網(wǎng)絡(luò)選用Hourglass-104作為主干,CenterNet的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 CenterNet算法流程圖
CenterNet算法大致流程為,輸入尺寸為I∈RW×H×3的圖像,經(jīng)過卷積特征提取網(wǎng)絡(luò)Hourglass后會生成一張關(guān)鍵點的熱點圖(keypoint heatmap):
其中W和H分別代表圖像的寬和高,R代表下采樣的步長,原文中將R設(shè)置為4,C為檢測目標的類別,原文中取C為80,即待檢測目標的類別。熱力圖輸出范圍表示成功檢測到關(guān)鍵點,表示檢測到背景。最終預(yù)測目標位置時候,總的損失函數(shù)分為三個部分,分別為目標中心點預(yù)測損失函數(shù)、目標中心點位置的偏置損失函數(shù)和目標尺寸大小的損失函數(shù)。中心點預(yù)測損失函數(shù)采用Focal Loss進行邏輯回歸,如下式(2)所示:
α和β為Focal Loss的超參數(shù),作為經(jīng)驗值設(shè)置為2和4,可以更好地提高算法檢測精度。目標中心位置偏置損失函數(shù)如式(3):
總的損失函數(shù)為三個損失函數(shù)加權(quán)總和,如式(5)所示:
在進行目標的檢測時,首先提取每個類的熱值圖的峰值,具體做法是在預(yù)測階段,在熱力圖中選取所有滿足自身值大于或等于其8個鄰接值的點作為峰值,并保持前100個這樣的峰值,最終可以通過下式(6)得到預(yù)測框的坐標,完成由關(guān)鍵點到位置框的回歸。
彈孔檢測算是小目標檢測的一種,由于小目標自身包含像素較少,占原始輸入圖像比例非常小,自身攜帶的信息也很少,一般經(jīng)過特征提取網(wǎng)絡(luò)的幾次下采樣之后特征信息已經(jīng)所剩無幾,這樣就會導(dǎo)致小目標在圖像中的高層語義不夠明顯,在復(fù)雜環(huán)境中不利于檢測,盡管特征圖越接近底層的特征對應(yīng)到原圖的感受野越小更適合于小目標的檢測,但是僅僅使用底層特征帶來的問題是卷積層數(shù)不夠,會缺乏上下文信息和一些必要的高層語義信息,這對于一些需要更高層更抽象的語義特征才能分類辨別的任務(wù)不夠友好。Hourglass-104網(wǎng)絡(luò)由兩個連續(xù)Hourglass模塊組成,并且模塊之間引入中間監(jiān)督進行端到端的訓(xùn)練。組成Hourglass模塊的基本單元是殘差模塊(Residual Module),如圖4所示。圖5為1階Hourglass圖,一階模塊由上下兩個半路組成,都包含若干殘差模塊,逐步提取更深層次特征。不同的是上半路在原尺度進行,下半路經(jīng)歷了先下采樣再上采樣的過程。每個Hourglass模塊根據(jù)階數(shù)的不同,所采用的下采樣次數(shù)和上采樣次數(shù)均不一樣,隨著階數(shù)升高,可以在圖中的虛線框部分嵌套加入同樣的一階Hourglass模塊圖,如此遞歸便可逐漸生成對應(yīng)的多階Hourglass模塊。網(wǎng)絡(luò)整體形狀類似沙漏,故又稱沙漏網(wǎng)絡(luò)。
圖4 殘差模塊
圖5 一階Hourglass模塊
Hourglass模塊階數(shù)越高,下采樣和上采樣的次數(shù)越多,對應(yīng)的高層語義越豐富,特征融合也更多樣,檢測精度就越高,但是更深的網(wǎng)絡(luò)層次會使殘差模塊的卷積操作愈加的頻繁,導(dǎo)致計算量更大模型檢測更耗時。考慮到實際檢測環(huán)境中,檢測背景比較單一,最終彈孔尺寸比較固定。為了減少參數(shù)量,加快計算速度,本文在盡量不損失精度的情況下在網(wǎng)絡(luò)深度和卷積模塊上做出如下改進:
(1)原文中輸入到網(wǎng)絡(luò)中的為原始圖像大小4倍下采樣之后的圖,而后會依次經(jīng)過5次下采樣,最高下采樣層數(shù)可以到128倍,但是實際中輸入圖像為512×512,彈孔所占比例在圖中較為固定,一般小于15,如果采用原文中的下采樣結(jié)構(gòu)到高層特征已經(jīng)無法有效提取,因此本文改為輸入圖像為原始圖像的2倍下采樣,依次經(jīng)過4倍、8倍,最多16倍的下采樣,這樣在原網(wǎng)絡(luò)基礎(chǔ)上裁剪掉32、64、128倍數(shù)的下采樣和上采樣過程,相比原文網(wǎng)絡(luò),相當于降低Hourglass模塊階數(shù)、大大節(jié)省計算量。
(2)原文算法應(yīng)用在經(jīng)典數(shù)據(jù)集上,一般用來做多目標多尺度檢測,默認為80類別,所以原特征提取網(wǎng)絡(luò)對于彈孔檢測這種單類目標檢測而言,特征提取器過于復(fù)雜冗余,其中卷積核個數(shù)較多,導(dǎo)致卷積計算過多,計算量太大。針對此種情況,本文旨在減少計算量,深度可分離卷積(Depthwise Separable Convolution)可以解決這個問題,在一些流行的輕量級的網(wǎng)絡(luò)如MobileNet[13]就有使用,其高效的原因是將常規(guī)一步卷積方式拆分為逐通道卷積和逐點卷積兩個部分,將原本3×3卷積的計算量轉(zhuǎn)移到逐點卷積,大大減少總的計算量,舉例說明,假設(shè)輸入特征圖大小為W_in×H_in×M,輸出特征圖大小為W_out×H_out×N,卷積核大小為K×K,那么對應(yīng)標準卷積參數(shù)量為:K×K×M×N,對應(yīng)深度可分離卷積參數(shù)量為:K×K×M+M×N,相比之下,參數(shù)量為原來的,本文中將基本殘差單元中的3×3卷積替換為深度可分離卷積,在精度基本保持不變的情況下,參數(shù)量和計算量變?yōu)樵瓉淼母倪M之后殘差單元如圖6所示。
圖6 加入深度可分離卷積的基本殘差塊
本文在實際訓(xùn)練環(huán)境中實驗平臺配置如下:處理器為Intel Core i5-9700,內(nèi)存8G,操作系統(tǒng)為Ubuntu 16.04,顯卡為NVIDIA GeForce GTX1080Ti,顯存11G。在訓(xùn)練部署過程中,參考一些小目標檢測解決方案,在彈孔樣本數(shù)據(jù)集上采用數(shù)據(jù)增強技術(shù),對訓(xùn)練集的樣本進行隨機翻轉(zhuǎn),由于彈孔形狀都為圓形且比較固定,對樣本進行角度變換不會影響到最終的檢測結(jié)果,故也可以通過旋轉(zhuǎn)來增強樣本擴充數(shù)據(jù)集。最終經(jīng)過擴充之后共有6480張樣本。設(shè)置其中5000張作為訓(xùn)練集,剩余1480張作為測試集。訓(xùn)練時,在訓(xùn)練集上以512×512的分辨率作為輸入,輸出分辨率為256×256,批量大?。˙atch size)設(shè)置為16。學(xué)習(xí)率設(shè)置為0.001。
本文采用在深度學(xué)習(xí)中經(jīng)常被用來衡量模型性能優(yōu)劣的精確率(Precision)和召回率(Recall)作為評判指標,對本文中改進的網(wǎng)絡(luò)模型和和原網(wǎng)絡(luò)模型進行對比。精確率可以代表誤檢情況,召回率可以代表漏檢情況。其中精確率和召回率越高,代表模型更優(yōu),對應(yīng)計算方法如下:
在上式中:TP(True Positive)代表實際為彈孔并被正確判定為彈孔的個數(shù);FP(False Positive)代表實際為非彈孔但是被判定為彈孔的個數(shù);FN(False Negative)代表實際為彈孔但是被判定為非彈孔的個數(shù)。
最終實驗結(jié)果圖如下圖7所示,其中(a)為待檢測圖,(b)為檢測結(jié)果圖,(c)、(d)、(e)為局部放大的細節(jié)圖,可以清晰看到,本文改進后網(wǎng)絡(luò)可以較好地檢測出密集射擊情景下的彈孔,針對部分重合的彈孔也能獲得較好的效果。
圖7 檢測結(jié)果圖
在做最終效果檢測時,將本文改進網(wǎng)絡(luò)與原始的CenterNet-Hourglass算法在測試集上進行一個效果對比,主要對比精確率、召回率和單張圖片的平均檢測速度,結(jié)果如表1所示。由于本文結(jié)合實際場景對征提取網(wǎng)絡(luò)的層數(shù)做出針對性的剪裁,并且將Hourglass模塊中的基本殘差塊進行改進。實驗結(jié)果顯示,與原CenterNet網(wǎng)絡(luò)相比,本文提出算法在測試集上總體精度和召回率有微小下降,但是檢測速度大大提升,單張平均測速達到36ms,完全能夠滿足在實際射擊場景中的實時計算的要求。
表1 結(jié)果對比
針對目前傳統(tǒng)算法在彈孔檢測問題上出現(xiàn)準確率低、自適應(yīng)性差、速度較慢等問題,本文提出一種基于改進的CenterNet關(guān)鍵點估計的彈孔檢測算法,結(jié)合實際應(yīng)用場景,改進特征提取網(wǎng)絡(luò),保留網(wǎng)絡(luò)提取小目標能力的同時精簡網(wǎng)絡(luò)層數(shù),并改變特征提取網(wǎng)絡(luò)中的基本殘差塊的卷積方式,減少參數(shù)量和計算量,加快計算速度。實驗結(jié)果表明,和原CenterNet網(wǎng)絡(luò)相比,本文算法雖在檢測精度上略有不及,但檢測速度提升十分巨大,極大地增加了其在實際中的應(yīng)用價值。但是目前對于完全重合的彈孔,還沒有很好的解決辦法,存在一定的漏檢情況,后續(xù)還需對網(wǎng)絡(luò)做進一步的優(yōu)化并結(jié)合其他的辦法嘗試解決該問題。