APP下载

一种基于计算机视觉的胸环靶弹孔检测方法

2021-12-03黄应清陈晓明谢志宏田钦文

兵器装备工程学报 2021年11期
关键词:弹孔校正滤波

黄应清,陈晓明,谢志宏,田钦文

(陆军装甲兵学院, 北京 100072)

1 引言

作为基础军事训练项目,实弹射击在部队开展的诸多训练项目当中是不可或缺的。在射击训练中,传统的人工报靶方式通常需要报靶人员提前隐蔽于目标附近的靶壕中,利用每轮射击的间隙离开靶壕观察靶面并记录成绩。这种方式效率低下,且安全性差,正逐渐被自动报靶的方式所取代。在诸多不同种类的自动报靶系统中,基于计算机视觉技术的报靶系统凭借其低成本、使用方便的特点而被各个院校、公司以及科研院所广泛研究。

弹孔检测是基于计算机视觉的自动报靶系统算法中最为重要的部分,直接影响着系统性能的优劣。如何精准、快速地检测胸环靶图像中的弹孔一直是技术难点。在现有的系统中,基本都是通过传统的图像处理方法来实现弹孔检测的[1-6]。例如,先使用帧差法得到射击前后两帧胸环靶图的差分图像,再通过形态学方法去除干扰,或是利用弹孔灰度特征,根据弹孔与背景的灰度值差异进行检测等等。由于传统图像处理技术的局限性,这些算法或多或少在检测的精度、速度、抗干扰能力以及普适性等方面有所不足,难以满足实际需求。近年来,深度学习技术逐渐兴起,其在计算机视觉领域的应用具有良好前景。本研究另辟蹊径,使用深度学习的方法弥补传统图像处理算法中存在的短板,将两者相结合,提出一种基于计算机视觉的弹孔检测算法,以满足部队实际射击训练需求。

2 预处理

对于弹孔检测工作而言,图像的质量会对算法设计与检测效率产生很大的影响。因此,为确保弹孔检测的效果,有必要对图像进行预处理操作。需要注意的是,预处理应当适可而止,处理过度不仅会使算法的速度降低,还可能导致图像的特征信息缺失,反而不利于弹孔的检测,本文分三步对胸环靶图像进行预处理。

2.1 平滑滤波

为消除胸环靶图像在采集和传输过程中所产生的噪声,需通过平滑滤波的方式对其进行去噪处理,最常用的方法为中值滤波或高斯滤波。中值滤波可以较好地保留弹孔的边缘信息,但其属于非线性滤波,对于高斯噪声的去噪效果不甚理想。高斯滤波属于线性滤波,拥有较好的去噪能力,但容易破坏弹孔的边缘信息,对接下来的样本标注以及模型训练工作造成不利影响。本文选择双边滤波的方法处理样本图像,其处理结果如图1所示。不难看出,相比于高斯滤波,它可以更好地保护弹孔的边缘信息,且去噪性能不逊于中值滤波,能够在不破坏弹孔特征的同时尽可能地消除噪声的影响。

2.2 靶面分割

经过双边滤波处理后的胸环靶图像基本消除了噪声的影响,但其仍存在一些以靶场背景环境为主的区域。这些背景区域通常包含大量的无用信息,会严重干扰弹孔检测工作,因此必须设法将其剔除。

为提高算法的普适性,并使其能够适应复杂的靶场环境,本文使用深度学习的方法解决该问题。首先利用Labelme工具标注从靶场采集以及通过互联网爬取到的胸环靶图像并建立数据集,之后通过PyTorch深度学习框架搭建并训练基于RefineNet[7,11]的语义分割模型,对胸环靶有效区域进行像素级分割,训练过程中的部分参数如表1所示。

图1 平滑滤波结果图Fig.1 Smoothing filtering results

表1 模型参数

本文所搭建的深度神经网络模型对原有的RefineNet网络结构进行了改进,采用2种不同尺度的输入,并且修改了RefineNet Block的连接方式,使模型能够更加充分地学习各层级的特征信息,其结构如图2所示。

图2 改进后的RefineNet网络结构示意图

另外,由于是二类分割任务,引入加权交叉熵损失函数(Weighted cross entropy loss)为正样本(胸环靶有效区域)加权,从而减少假阴性,防止弹孔信息丢失。

经过50轮的训练,语义分割模型对于验证集的平均像素精度(Mean Pixel Accuracy)达到了96.31%,平均交并比(Mean Intersection over Union)达到了91.55%,很好地完成了胸环靶有效区域的分割任务。根据模型的输出结果将无用背景剔除,只保留胸环靶有效区域,其结果如图3所示。

图3 靶面分割图Fig.3 Segmentation results of chest ring target

2.3 畸变校正

在现有的基于计算机视觉技术的自动报靶系统中,一般都是利用摄像机以固定的仰角去采集胸环靶图像的,且当子弹击穿胸环靶时,会导致靶面振动。上述2种情形会造成采集到的胸环靶图像产生不同程度的透视畸变,靶面上的弹孔也会随之变形。为方便后续工作,并提高算法的鲁棒性,有必要对其进行校正。

本文采用透视变换的方法对胸环靶图像进行校正:

(1)

其中:(xi,yi)为校正前的点;(ui,vi)为其校正后所对应的点;pij是校正系数。为求得校正系数,需在原始图像中确定4个基准点及其校正后的位置。考虑到部队射击训练的实际情况,依靠人力进行基准点的手动选取显然是不可行的,这里利用特征匹配的方式来实现基准点的自动获取。根据胸环靶图像的特点,选取其左胸、右胸、左肩、右肩的4个角点作为基准点,分别对应着4个固定的校正位置。使用SIFT特征匹配算法,截取胸环靶图像左胸、右胸、左肩、右肩适当位置各15×15像素大小的矩形区域作为匹配材料,提取其特征点作为匹配依据。由于胸环靶左肩、右肩与头部左侧、右侧的特征比较相似,可能会出现匹配错误的情况。为确保匹配的准确率,先使用掩模遮挡胸环靶图像头部区域,之后再执行特征匹配操作,从而实现胸环靶左胸、右胸、左肩、右肩4个位置的精准定位。最后,根据各角点在匹配材料中的相对位置来确定胸环靶图像中基准点的位置,并求出校正系数,完成透视畸变校正,其结果如图4所示。

图4 畸变校正图Fig.4 Distortion correction results

3 ROI检测

ROI(region of interest)即感兴趣区域。在机器视觉、图像处理技术的应用中,进行ROI检测主要是为了专注于图像的重点区域,方便接下来要执行的操作。合理地进行ROI检测可以有效提高算法的精度与处理速度。对于本文的弹孔检测工作而言,感兴趣区域自然是胸环靶图像中的全部弹孔区域了。首先,选取合适的阈值对预处理结果进行二值化处理,将灰度值低于阈值的像素灰度设置为0,高于阈值的像素灰度设置为255。由于图像中弹孔像素的灰度值非常低,在二值化时保留了全部的弹孔特征。之后使用OpenCV库中的findContours函数,对二值化后的图像进行轮廓提取。最后根据提取结果创建其最小包围盒(Minimum Bounding Box),完成了ROI检测,检测结果如图5所示。这一步实现了胸环靶图像中疑似弹孔区域的检测,其中包括所有弹孔区域以及部分非弹孔区域,相当于弹孔的粗提取。

图5 ROI检测结果图

4 弹孔识别

经过ROI检测后,已经完成了胸环靶图像中疑似弹孔区域的提取。接下来的工作就是要对提取出的感兴趣区域进行研究,识别弹孔与非弹孔区域,将非弹孔区域全部剔除,最终实现弹孔的精准检测。本文使用深度学习的方法进行弹孔识别,通过搭建并训练基于ResNet50[8,9]的图像分类模型,判断胸环靶图像中的疑似区域是否为弹孔,并根据模型的输出结果,保留被判断为弹孔的部分,从而完成弹孔检测工作。

4.1 数据集

深度神经网络模型的训练目标是实现输入的图像是否为弹孔的判断,相当于一个二分类监督学习问题,需要大量的正样本(弹孔)以及负样本(非弹孔)图像来建立数据集。最直接的数据采集方法是从胸环靶图像中手动截取样本数据并对其进行分类,这样做不仅费时费力、效率低下,且负样本的采集标准难以衡量,这将会导致样本的整体质量难以保证,容易对模型的弹孔识别效果造成负面影响。

为避免上述问题,本文使用一种更加便捷、高效的方法来建立数据集。首先利用Labelme工具标注经过预处理的胸环靶图像中的弹孔区域,根据json文件生成弹孔区域的真值图。然后使用之前提出的ROI检测方法提取胸环靶图像中的疑似弹孔区域,截取检测结果,保存为样本图像数据,并定位其在真值图中的对应区域。之后计算该区域中被标记为弹孔的像素数量,若弹孔像素数量占比超过区域所含像素总量的65%,则将样本归为弹孔类,反之归为非弹孔类。如此一来,便获得了适用于本文算法的样本数据,如图6所示。按照上述思路编写程序,批量处理500张胸环靶图像,建立了包含3 483个正样本,7 204个负样本的数据集。

图6 数据集展示Fig.6 Display of datasets

4.2 网络结构

搭建基于ResNet50的深度神经网络模型,并在原有网络结构的基础上进行改进。引入注意力机制捕获高级语义信息,加强模型对于弹孔特征的学习,以提高其分类精度。目前,大多数学者都致力于开发更复杂的注意力模块以追求更高的性能,导致模型的复杂度增加,有时反而会影响训练效果[10]。为解决该问题,Qilong Wang等于2020年提出了ECA[14](Efficient Channel Attention)。ECA-Net是一种轻量化的通道注意力模块,它能够平衡模型的性能和复杂性,虽然仅涉及少数几个参数,但却能够带来明显的性能提升,ECA block的结构如图7所示。

图7 ECA模型结构示意图

GAP(Global Average Pooling)为全局平均池化,σ为激活函数。ECA能够通过核为k的快速1D卷积实现,k表示局部交叉跨通道交互的范围,图7中k的取值为5。这里使用一种自适应确定k的方法,避免通过交叉通道手动对其进行调整:

(2)

其中,|t|odd表示与t最近的奇数。本文针对ResNet50模型的Identity block与Conv block进行修改,在其基础卷积块中插入ECA block。另外,使用Mish[13]激活函数代替ReLU连接各block,其表达式:

f(x)=xtanh(ln(1+ex))

(3)

Mish的优点在于其正值可以达到任何高度,避免了由于封顶而导致的饱和。对于负值的轻微容忍允许更好的梯度流,且平滑的激活函数能够使样本特征信息深入神经网络,从而获取更强的准确性和泛化性。综上,改进后的Residual block结构如图8所示。

4.3 模型训练

基于PyTorch深度学习框架搭建模型并进行训练,训练过程中的部分参数如表2所示。

图8 改进后的Residual block结构框图

表2 模型参数

为防止过拟合现象,增强模型的泛化性,引入数据增强操作,按一定的概率对样本图像进行旋转、水平翻转处理。另外,由于数据集中负样本的数量较多,正负样本比例有些失衡,引入焦点损失函数[12](Focal loss)以降低大量的简单负样本在训练中所占的权重,其表达式:

(4)

其中,α取0.25,γ取2。经过75轮的训练,验证集的准确率(Accuracy)达到了95.72%,查全率(Recall)达到了93.61%,很好地完成了弹孔识别任务。

5 结果与分析

根据分类模型的输出以及ROI检测结果,剔除胸环靶图像中的非弹孔区域,最终实现弹孔的检测。基于Windows 10系统,3.60 GHz Intel Core i7-9700K处理器,16 GB内存的实验环境,利用本文算法对多幅从不同靶场、不同时间采集到的胸环靶图像进行弹孔检测测试。记录各图像测试中的虚警(False Positive)率、漏检(False Negative)率以及程序的运行时间,如表3所示。在测试中,若出现将多个重叠弹孔误判为单个弹孔的情形,算作一次正确检测,其余均计为漏检。由表3的测试结果可以看出,算法的准确率较高,在正常情况下,虚警率和漏检率均能够保持在较低的水平,且检测速度较快,基本能够适应30 fps的图像传输速度。在图9中,1号样本和2号样本分别为傍晚及正午时所采集,且成功检测出了全部弹孔,由此可见,算法能够适应不同光照条件下的靶场环境。算法存在的不足之处在于,当胸环靶图像中的弹孔数量较多时,对于重合弹孔的检测精度较低,容易将重叠程度较大的两个或多个弹孔误判为一个弹孔,这也是造成漏检的主要因素。5号样本和6号样本的检测结果如图10所示,对于同种类型的靶子,前者的测试结果明显优于后者,究其原因,是6号样本中的弹着点过多,存在大量的重叠弹孔,部分被误判为单个弹孔,造成了漏检。虚警主要是由于射击次数较多时,有时会将靶纸震裂,产生的裂痕会被误判为弹孔。在实际射击训练中,这种情况比较少见,且能够通过调整分类模型训练集中负样本的组成来得到改善。

图9 弹孔检测图Fig.9 Bullet hole detection results

图10 弹孔检测图Fig.10 Bullet hole detection results

6 结论

本文将传统的图像处理方法与深度学习的方法相结合,取长补短,提出了一种基于计算机视觉技术的弹孔检测算法。通过图像预处理、ROI检测以及弹孔识别3个步骤实现了胸环靶图像中所有弹孔的检测。实验结果表明,本算法具有较高的精度以及良好的时效性,且适应性强,有效推动了基于计算机视觉的自动报靶系统的应用进程。

猜你喜欢

弹孔校正滤波
基于HP滤波与ARIMA-GARCH模型的柱塞泵泄漏量预测
基于改进自适应中值滤波的图像降噪方法*
再分析降水资料的适用性评估与偏差校正
最后的弹孔
华清宫
一种具有自动校正装置的陶瓷切边机
基于非下采样剪切波变换与引导滤波结合的遥感图像增强
闲趣一刻
投影机的梯形校正
合成孔径雷达图像的最小均方误差线性最优滤波