黃應(yīng)清,陳曉明,謝志宏,田欽文
(陸軍裝甲兵學(xué)院, 北京 100072)
作為基礎(chǔ)軍事訓(xùn)練項目,實彈射擊在部隊開展的諸多訓(xùn)練項目當(dāng)中是不可或缺的。在射擊訓(xùn)練中,傳統(tǒng)的人工報靶方式通常需要報靶人員提前隱蔽于目標(biāo)附近的靶壕中,利用每輪射擊的間隙離開靶壕觀察靶面并記錄成績。這種方式效率低下,且安全性差,正逐漸被自動報靶的方式所取代。在諸多不同種類的自動報靶系統(tǒng)中,基于計算機(jī)視覺技術(shù)的報靶系統(tǒng)憑借其低成本、使用方便的特點而被各個院校、公司以及科研院所廣泛研究。
彈孔檢測是基于計算機(jī)視覺的自動報靶系統(tǒng)算法中最為重要的部分,直接影響著系統(tǒng)性能的優(yōu)劣。如何精準(zhǔn)、快速地檢測胸環(huán)靶圖像中的彈孔一直是技術(shù)難點。在現(xiàn)有的系統(tǒng)中,基本都是通過傳統(tǒng)的圖像處理方法來實現(xiàn)彈孔檢測的[1-6]。例如,先使用幀差法得到射擊前后兩幀胸環(huán)靶圖的差分圖像,再通過形態(tài)學(xué)方法去除干擾,或是利用彈孔灰度特征,根據(jù)彈孔與背景的灰度值差異進(jìn)行檢測等等。由于傳統(tǒng)圖像處理技術(shù)的局限性,這些算法或多或少在檢測的精度、速度、抗干擾能力以及普適性等方面有所不足,難以滿足實際需求。近年來,深度學(xué)習(xí)技術(shù)逐漸興起,其在計算機(jī)視覺領(lǐng)域的應(yīng)用具有良好前景。本研究另辟蹊徑,使用深度學(xué)習(xí)的方法彌補(bǔ)傳統(tǒng)圖像處理算法中存在的短板,將兩者相結(jié)合,提出一種基于計算機(jī)視覺的彈孔檢測算法,以滿足部隊實際射擊訓(xùn)練需求。
對于彈孔檢測工作而言,圖像的質(zhì)量會對算法設(shè)計與檢測效率產(chǎn)生很大的影響。因此,為確保彈孔檢測的效果,有必要對圖像進(jìn)行預(yù)處理操作。需要注意的是,預(yù)處理應(yīng)當(dāng)適可而止,處理過度不僅會使算法的速度降低,還可能導(dǎo)致圖像的特征信息缺失,反而不利于彈孔的檢測,本文分三步對胸環(huán)靶圖像進(jìn)行預(yù)處理。
為消除胸環(huán)靶圖像在采集和傳輸過程中所產(chǎn)生的噪聲,需通過平滑濾波的方式對其進(jìn)行去噪處理,最常用的方法為中值濾波或高斯濾波。中值濾波可以較好地保留彈孔的邊緣信息,但其屬于非線性濾波,對于高斯噪聲的去噪效果不甚理想。高斯濾波屬于線性濾波,擁有較好的去噪能力,但容易破壞彈孔的邊緣信息,對接下來的樣本標(biāo)注以及模型訓(xùn)練工作造成不利影響。本文選擇雙邊濾波的方法處理樣本圖像,其處理結(jié)果如圖1所示。不難看出,相比于高斯濾波,它可以更好地保護(hù)彈孔的邊緣信息,且去噪性能不遜于中值濾波,能夠在不破壞彈孔特征的同時盡可能地消除噪聲的影響。
經(jīng)過雙邊濾波處理后的胸環(huán)靶圖像基本消除了噪聲的影響,但其仍存在一些以靶場背景環(huán)境為主的區(qū)域。這些背景區(qū)域通常包含大量的無用信息,會嚴(yán)重干擾彈孔檢測工作,因此必須設(shè)法將其剔除。
為提高算法的普適性,并使其能夠適應(yīng)復(fù)雜的靶場環(huán)境,本文使用深度學(xué)習(xí)的方法解決該問題。首先利用Labelme工具標(biāo)注從靶場采集以及通過互聯(lián)網(wǎng)爬取到的胸環(huán)靶圖像并建立數(shù)據(jù)集,之后通過PyTorch深度學(xué)習(xí)框架搭建并訓(xùn)練基于RefineNet[7,11]的語義分割模型,對胸環(huán)靶有效區(qū)域進(jìn)行像素級分割,訓(xùn)練過程中的部分參數(shù)如表1所示。
圖1 平滑濾波結(jié)果圖Fig.1 Smoothing filtering results
表1 模型參數(shù)
本文所搭建的深度神經(jīng)網(wǎng)絡(luò)模型對原有的RefineNet網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了改進(jìn),采用2種不同尺度的輸入,并且修改了RefineNet Block的連接方式,使模型能夠更加充分地學(xué)習(xí)各層級的特征信息,其結(jié)構(gòu)如圖2所示。
圖2 改進(jìn)后的RefineNet網(wǎng)絡(luò)結(jié)構(gòu)示意圖
另外,由于是二類分割任務(wù),引入加權(quán)交叉熵?fù)p失函數(shù)(Weighted cross entropy loss)為正樣本(胸環(huán)靶有效區(qū)域)加權(quán),從而減少假陰性,防止彈孔信息丟失。
經(jīng)過50輪的訓(xùn)練,語義分割模型對于驗證集的平均像素精度(Mean Pixel Accuracy)達(dá)到了96.31%,平均交并比(Mean Intersection over Union)達(dá)到了91.55%,很好地完成了胸環(huán)靶有效區(qū)域的分割任務(wù)。根據(jù)模型的輸出結(jié)果將無用背景剔除,只保留胸環(huán)靶有效區(qū)域,其結(jié)果如圖3所示。
圖3 靶面分割圖Fig.3 Segmentation results of chest ring target
在現(xiàn)有的基于計算機(jī)視覺技術(shù)的自動報靶系統(tǒng)中,一般都是利用攝像機(jī)以固定的仰角去采集胸環(huán)靶圖像的,且當(dāng)子彈擊穿胸環(huán)靶時,會導(dǎo)致靶面振動。上述2種情形會造成采集到的胸環(huán)靶圖像產(chǎn)生不同程度的透視畸變,靶面上的彈孔也會隨之變形。為方便后續(xù)工作,并提高算法的魯棒性,有必要對其進(jìn)行校正。
本文采用透視變換的方法對胸環(huán)靶圖像進(jìn)行校正:
(1)
其中:(xi,yi)為校正前的點;(ui,vi)為其校正后所對應(yīng)的點;pij是校正系數(shù)。為求得校正系數(shù),需在原始圖像中確定4個基準(zhǔn)點及其校正后的位置??紤]到部隊射擊訓(xùn)練的實際情況,依靠人力進(jìn)行基準(zhǔn)點的手動選取顯然是不可行的,這里利用特征匹配的方式來實現(xiàn)基準(zhǔn)點的自動獲取。根據(jù)胸環(huán)靶圖像的特點,選取其左胸、右胸、左肩、右肩的4個角點作為基準(zhǔn)點,分別對應(yīng)著4個固定的校正位置。使用SIFT特征匹配算法,截取胸環(huán)靶圖像左胸、右胸、左肩、右肩適當(dāng)位置各15×15像素大小的矩形區(qū)域作為匹配材料,提取其特征點作為匹配依據(jù)。由于胸環(huán)靶左肩、右肩與頭部左側(cè)、右側(cè)的特征比較相似,可能會出現(xiàn)匹配錯誤的情況。為確保匹配的準(zhǔn)確率,先使用掩模遮擋胸環(huán)靶圖像頭部區(qū)域,之后再執(zhí)行特征匹配操作,從而實現(xiàn)胸環(huán)靶左胸、右胸、左肩、右肩4個位置的精準(zhǔn)定位。最后,根據(jù)各角點在匹配材料中的相對位置來確定胸環(huán)靶圖像中基準(zhǔn)點的位置,并求出校正系數(shù),完成透視畸變校正,其結(jié)果如圖4所示。
圖4 畸變校正圖Fig.4 Distortion correction results
ROI(region of interest)即感興趣區(qū)域。在機(jī)器視覺、圖像處理技術(shù)的應(yīng)用中,進(jìn)行ROI檢測主要是為了專注于圖像的重點區(qū)域,方便接下來要執(zhí)行的操作。合理地進(jìn)行ROI檢測可以有效提高算法的精度與處理速度。對于本文的彈孔檢測工作而言,感興趣區(qū)域自然是胸環(huán)靶圖像中的全部彈孔區(qū)域了。首先,選取合適的閾值對預(yù)處理結(jié)果進(jìn)行二值化處理,將灰度值低于閾值的像素灰度設(shè)置為0,高于閾值的像素灰度設(shè)置為255。由于圖像中彈孔像素的灰度值非常低,在二值化時保留了全部的彈孔特征。之后使用OpenCV庫中的findContours函數(shù),對二值化后的圖像進(jìn)行輪廓提取。最后根據(jù)提取結(jié)果創(chuàng)建其最小包圍盒(Minimum Bounding Box),完成了ROI檢測,檢測結(jié)果如圖5所示。這一步實現(xiàn)了胸環(huán)靶圖像中疑似彈孔區(qū)域的檢測,其中包括所有彈孔區(qū)域以及部分非彈孔區(qū)域,相當(dāng)于彈孔的粗提取。
圖5 ROI檢測結(jié)果圖
經(jīng)過ROI檢測后,已經(jīng)完成了胸環(huán)靶圖像中疑似彈孔區(qū)域的提取。接下來的工作就是要對提取出的感興趣區(qū)域進(jìn)行研究,識別彈孔與非彈孔區(qū)域,將非彈孔區(qū)域全部剔除,最終實現(xiàn)彈孔的精準(zhǔn)檢測。本文使用深度學(xué)習(xí)的方法進(jìn)行彈孔識別,通過搭建并訓(xùn)練基于ResNet50[8,9]的圖像分類模型,判斷胸環(huán)靶圖像中的疑似區(qū)域是否為彈孔,并根據(jù)模型的輸出結(jié)果,保留被判斷為彈孔的部分,從而完成彈孔檢測工作。
深度神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練目標(biāo)是實現(xiàn)輸入的圖像是否為彈孔的判斷,相當(dāng)于一個二分類監(jiān)督學(xué)習(xí)問題,需要大量的正樣本(彈孔)以及負(fù)樣本(非彈孔)圖像來建立數(shù)據(jù)集。最直接的數(shù)據(jù)采集方法是從胸環(huán)靶圖像中手動截取樣本數(shù)據(jù)并對其進(jìn)行分類,這樣做不僅費時費力、效率低下,且負(fù)樣本的采集標(biāo)準(zhǔn)難以衡量,這將會導(dǎo)致樣本的整體質(zhì)量難以保證,容易對模型的彈孔識別效果造成負(fù)面影響。
為避免上述問題,本文使用一種更加便捷、高效的方法來建立數(shù)據(jù)集。首先利用Labelme工具標(biāo)注經(jīng)過預(yù)處理的胸環(huán)靶圖像中的彈孔區(qū)域,根據(jù)json文件生成彈孔區(qū)域的真值圖。然后使用之前提出的ROI檢測方法提取胸環(huán)靶圖像中的疑似彈孔區(qū)域,截取檢測結(jié)果,保存為樣本圖像數(shù)據(jù),并定位其在真值圖中的對應(yīng)區(qū)域。之后計算該區(qū)域中被標(biāo)記為彈孔的像素數(shù)量,若彈孔像素數(shù)量占比超過區(qū)域所含像素總量的65%,則將樣本歸為彈孔類,反之歸為非彈孔類。如此一來,便獲得了適用于本文算法的樣本數(shù)據(jù),如圖6所示。按照上述思路編寫程序,批量處理500張胸環(huán)靶圖像,建立了包含3 483個正樣本,7 204個負(fù)樣本的數(shù)據(jù)集。
圖6 數(shù)據(jù)集展示Fig.6 Display of datasets
搭建基于ResNet50的深度神經(jīng)網(wǎng)絡(luò)模型,并在原有網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上進(jìn)行改進(jìn)。引入注意力機(jī)制捕獲高級語義信息,加強(qiáng)模型對于彈孔特征的學(xué)習(xí),以提高其分類精度。目前,大多數(shù)學(xué)者都致力于開發(fā)更復(fù)雜的注意力模塊以追求更高的性能,導(dǎo)致模型的復(fù)雜度增加,有時反而會影響訓(xùn)練效果[10]。為解決該問題,Qilong Wang等于2020年提出了ECA[14](Efficient Channel Attention)。ECA-Net是一種輕量化的通道注意力模塊,它能夠平衡模型的性能和復(fù)雜性,雖然僅涉及少數(shù)幾個參數(shù),但卻能夠帶來明顯的性能提升,ECA block的結(jié)構(gòu)如圖7所示。
圖7 ECA模型結(jié)構(gòu)示意圖
GAP(Global Average Pooling)為全局平均池化,σ為激活函數(shù)。ECA能夠通過核為k的快速1D卷積實現(xiàn),k表示局部交叉跨通道交互的范圍,圖7中k的取值為5。這里使用一種自適應(yīng)確定k的方法,避免通過交叉通道手動對其進(jìn)行調(diào)整:
(2)
其中,|t|odd表示與t最近的奇數(shù)。本文針對ResNet50模型的Identity block與Conv block進(jìn)行修改,在其基礎(chǔ)卷積塊中插入ECA block。另外,使用Mish[13]激活函數(shù)代替ReLU連接各block,其表達(dá)式:
f(x)=xtanh(ln(1+ex))
(3)
Mish的優(yōu)點在于其正值可以達(dá)到任何高度,避免了由于封頂而導(dǎo)致的飽和。對于負(fù)值的輕微容忍允許更好的梯度流,且平滑的激活函數(shù)能夠使樣本特征信息深入神經(jīng)網(wǎng)絡(luò),從而獲取更強(qiáng)的準(zhǔn)確性和泛化性。綜上,改進(jìn)后的Residual block結(jié)構(gòu)如圖8所示。
基于PyTorch深度學(xué)習(xí)框架搭建模型并進(jìn)行訓(xùn)練,訓(xùn)練過程中的部分參數(shù)如表2所示。
圖8 改進(jìn)后的Residual block結(jié)構(gòu)框圖
表2 模型參數(shù)
為防止過擬合現(xiàn)象,增強(qiáng)模型的泛化性,引入數(shù)據(jù)增強(qiáng)操作,按一定的概率對樣本圖像進(jìn)行旋轉(zhuǎn)、水平翻轉(zhuǎn)處理。另外,由于數(shù)據(jù)集中負(fù)樣本的數(shù)量較多,正負(fù)樣本比例有些失衡,引入焦點損失函數(shù)[12](Focal loss)以降低大量的簡單負(fù)樣本在訓(xùn)練中所占的權(quán)重,其表達(dá)式:
(4)
其中,α取0.25,γ取2。經(jīng)過75輪的訓(xùn)練,驗證集的準(zhǔn)確率(Accuracy)達(dá)到了95.72%,查全率(Recall)達(dá)到了93.61%,很好地完成了彈孔識別任務(wù)。
根據(jù)分類模型的輸出以及ROI檢測結(jié)果,剔除胸環(huán)靶圖像中的非彈孔區(qū)域,最終實現(xiàn)彈孔的檢測。基于Windows 10系統(tǒng),3.60 GHz Intel Core i7-9700K處理器,16 GB內(nèi)存的實驗環(huán)境,利用本文算法對多幅從不同靶場、不同時間采集到的胸環(huán)靶圖像進(jìn)行彈孔檢測測試。記錄各圖像測試中的虛警(False Positive)率、漏檢(False Negative)率以及程序的運(yùn)行時間,如表3所示。在測試中,若出現(xiàn)將多個重疊彈孔誤判為單個彈孔的情形,算作一次正確檢測,其余均計為漏檢。由表3的測試結(jié)果可以看出,算法的準(zhǔn)確率較高,在正常情況下,虛警率和漏檢率均能夠保持在較低的水平,且檢測速度較快,基本能夠適應(yīng)30 fps的圖像傳輸速度。在圖9中,1號樣本和2號樣本分別為傍晚及正午時所采集,且成功檢測出了全部彈孔,由此可見,算法能夠適應(yīng)不同光照條件下的靶場環(huán)境。算法存在的不足之處在于,當(dāng)胸環(huán)靶圖像中的彈孔數(shù)量較多時,對于重合彈孔的檢測精度較低,容易將重疊程度較大的兩個或多個彈孔誤判為一個彈孔,這也是造成漏檢的主要因素。5號樣本和6號樣本的檢測結(jié)果如圖10所示,對于同種類型的靶子,前者的測試結(jié)果明顯優(yōu)于后者,究其原因,是6號樣本中的彈著點過多,存在大量的重疊彈孔,部分被誤判為單個彈孔,造成了漏檢。虛警主要是由于射擊次數(shù)較多時,有時會將靶紙震裂,產(chǎn)生的裂痕會被誤判為彈孔。在實際射擊訓(xùn)練中,這種情況比較少見,且能夠通過調(diào)整分類模型訓(xùn)練集中負(fù)樣本的組成來得到改善。
圖9 彈孔檢測圖Fig.9 Bullet hole detection results
圖10 彈孔檢測圖Fig.10 Bullet hole detection results
本文將傳統(tǒng)的圖像處理方法與深度學(xué)習(xí)的方法相結(jié)合,取長補(bǔ)短,提出了一種基于計算機(jī)視覺技術(shù)的彈孔檢測算法。通過圖像預(yù)處理、ROI檢測以及彈孔識別3個步驟實現(xiàn)了胸環(huán)靶圖像中所有彈孔的檢測。實驗結(jié)果表明,本算法具有較高的精度以及良好的時效性,且適應(yīng)性強(qiáng),有效推動了基于計算機(jī)視覺的自動報靶系統(tǒng)的應(yīng)用進(jìn)程。