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