周志飞,吴金龙,李轶昳,贾力榜,沈玉杰,张 刚,崔 斌
(1.公安部物证鉴定中心,北京 100038;2.北京多维视通技术有限公司,北京 100070;3.中国科学院自动化研究所,北京 100190)
枪支种属识别是涉枪案件物证检验的基础,对涉枪案件的侦查和检验具有重要意义[1-2]。枪支种属识别以外形特征作为主要判定因素,长期以来,检验人员在进行识别时主要以工作经验为主,以查阅书籍、文献资料等为辅,导致查询效率较低。随着涉枪案件现场物证勘查勘验对时效性的要求越来越高,枪弹痕迹检验领域迫切需要一种快速且准确的枪支识别技术。
境外一些国家和地区的法庭科学机构曾对以图像识别为基础的枪种识别展开研究,多数通过传统图像识别技术进行枪支识别,且大多利用外形特征提取某个特征点,然后利用特征进行匹配以获取检索结果[3-5]。印度法庭科学实验室的MURTHY 等[4]创建一个包含254 张图像的9 mm 手枪检索库,以枪支整体形状、握把、扳机等部位作为人工标定的特征点来进行检索和识别。中国台湾地区中央警校法庭科学部门的WEN 等[5]对枪支图像进行外形轮廓特征提取和优化,计算枪支图像轮廓边缘到重心的距离分布,以前3 个峰值点的位置作为对比特征,构建一个包含300 支手枪库容量的检索库。目前,中国大陆较少有对以图像识别为基础的枪种识别展开研究,但有研究人员对枪支图像的特征提取与识别进行分析,大多利用传统图像匹配技术获取图像的特征值以进行枪支与非枪支识别,对于枪支集合下不同种类的枪支识别没有进一步研究。例如:冯艳平等[6]在太赫兹(THz)图像上进行阈值分割和边缘检测,计算枪的面积、长度、宽度以及枪管与枪托之间的夹角,以区分枪支与非枪支;和睿等[7]探索结合Canny 特征和矩阵相似度理论的图像检索算法,并在手枪图像的检测和检索方面进行实验;张树江等[8]设计一套枪弹痕迹图像识别系统,通过利用基于小波直方图的图像检索方法在数据库中检索与目标图像最相似的样本图像,从而为枪弹检验人员提供参考。
上述研究主要采用传统的模式识别方法,通常包含特征提取和分类器设计2 个步骤。其中,特征提取由人工设计特征,需要依靠设计者大量的先验知识,而对于枪支图像这类特殊的图像,先验知识难以挖掘;传统分类器大多结果较为简单,难以通过多个简单阈值完成复杂的图像识别任务。上述问题导致目前已有的枪支识别算法大多只能研究单一枪种,特征提取单一,数据库容量小,无法满足实际应用的需求。基于深度学习的方法[9]可以更好地处理图像分类任务,相比于传统机器学习,深度学习方法(如深度卷积神经网络[10])采用更深、更多层的卷积结构,利用大规模的训练数据集以端对端的方式来训练网络中的权重参数,从而实现目标特征的自动提取和分类,克服人工提取设计特征的缺陷,且更容易学习到深层次的语义特征[10-11]。
一般认为,网络层数越深,模型表达能力越强,但是深层网络也带来了许多问题,如模型过拟合、梯度消失等。残差网络(ResNet)[12]通过引入捷径连接,学习信息的差值并增加梯度传播,从而有效避免网络层数增加导致的训练误差增大、模型退化问题。残差网络被广泛应用于目标检测、姿态估计、图像识别等任务[13]。例如:文献[14]提出一种改进的残差网络,结合交叉熵损失函数与中心损失函数完成人脸识别,其在测试数据集上取得了97.46%的准确率;文献[15]提出一种基于RestNet101 的头部姿态估计方法,其利用残差网络结合回归损失预测欧拉角以表示头部姿态;文献[16]采用152 层残差网络架构,对花卉图像的特征进行自动提取,实现了一种基于迁移学习的花卉识别系统。
本文采用基于深度学习的方法,通过改进和优化深度残差网络模型的训练方式,使之适用于种类多、样本少的大规模枪支图像识别任务。
枪支数据集是枪支图像检索的基础,枪支图像的质量影响枪支图像检索算法的精度。因此,为了保证枪支图像数据集的图像质量,本文制定枪支图像数据集的图像采集和图像增强规范。
为了保证枪支图像数据集的图像质量,本文参考《比例照相方法规则(GA/T 158-1996)》拍摄枪支物证照片的操作原则,制定图像采集规范如下:在拍摄前,解除枪支的附件或配件,如瞄准镜、消音器等,仅保留枪支本体,并且使枪支处于原始状态;在拍摄时,枪支主体与相机镜头角度垂直,枪支主体应位于图像的中心位置,枪管与水平面平行,枪支的外形特征清晰,光线均匀,背景为纯色;一般应拍摄左右两面的枪支照片,并且拍摄枪支标识等细目照片。
按照图像采集规范,本文通过实物拍摄、图册扫描、互联网查询下载等方式,采集到国内外54 个国家和地区共7 364 种枪支,38 156 张枪支图像,其中,枪支整体图像数为21 128,枪支细目图像数为17 028,枪支种类包括手枪、步枪、猎枪、冲锋枪、机枪等,具体情况如表1所示。部分枪支图像样本示例如图1 所示。
表1 枪支图像数据集信息Table 1 Dataset information of firearms images
图1 枪支图像数据集样本示例Fig.1 Sample example of the firearms images dataset
由于枪支图像样本较少,为了获取足够多的数据量以学习枪支型号的鲁棒信息,本文使用深度学习中常用的数据增广方法来对枪支图像进行增强[11]:首先,将原始图像统一调整到256 像素×256 像素;然后,对图像进行裁剪,截取主要以中心裁剪为主,取大小为224 像素×224 像素,每张截取的图像都进行左右翻转、上下翻转,调整图像亮度,亮度调整因子设置为0.2。
本文检索系统的开发目标是在自建的制式枪支图像数据集基础上,实现对涉案制式枪支图像中枪支种类信息的自动识别。一方面,由于制式枪支种类多,往往需要层数较深的卷积神经网络来实现分类;另一方面,由于每种枪支的图像样本数量非常有限,采用较深层的神经网络模型极易产生过拟合问题。相比于普通卷积神经网络,ResNet[13,17]增加了捷径连接,捷径连接可以学习信号的差值,从而有效避免网络层数增加导致的训练误差增大、模型退化问题。因此,本文采用残差网络作为枪支图像识别的基准模型。
深度残差网络基本结构如图2 所示,右侧分支称作残差分支,左侧部分称作本体分支,x为输入信号,H(x)是期望输出。通过捷径连接即残差分支,将输入x跳变连接到输出层,此时残差网络相当于要学习目标值H(x)和x的差值,即残差F(x):=H(x)-x。因此,通过不断地训练使残差结果逼近0,这样即使网络层数不断加深,准确率也不会下降,网络输出始终可以很好地表征网络输入的特征信息。残差的引入使得网络的参数量和计算复杂度并未提升,任何已有的网络模型都可以在原有框架的基础上引入残差模块。
图2 深度残差网络基本结构Fig.2 Basic structure of depth residual network
在深度残差网络中,为了保证网络的稳定性和准确性,每个残差单元都包含3 个基本算子,分别为批归一化(Batch Normalization,BN)算子、激活算子、池化(Pooling)算子[18]。BN 算子对激活函数的输入进行归一化,相当于增加一个约束,限定网络的配置空间,从而有效解决输入数据发生偏移和增大的问题,避免梯度消失和梯度爆炸现象。对于输入的一批(Batch)样本x=[x1,x2,…,xn],BN 算子的操作如式(1)所示:
其中:μB=为均值;为方差;ε为一个极小值;为归一化后的激活值。结合枪支图像种类多、样本少的特点,本文采用最常用的线性修正(Rectified Linear Unit,ReLU)激活算子。
对于池化算子,针对枪支识别问题,本文在初始输入特征时采用最大池化(Max Pooling),可以更好地保留图像纹理特征;在最后一个卷积层的特征图上,采用全局平均池化(Average Pooling),这样更有利于保留整体数据信息,得到用于枪支检索的高级特征。
枪支图像数据集中枪支类别多(上千种类别),每种枪支图像的样本又很少(每种类别的枪支图片平均只有2~3 张),导致难以实现稳定的网络训练,网络训练非常容易过拟合。因此,本文构建一种新的多任务级联残差网络模型,该网络模型共包含4 个任务,或称为4 个阶段,从而实现由粗到细的枪支图像分级识别和检索:第一阶段实现枪支图像的左右朝向分类;第二阶段从枪族的概念出发,将从同一个枪族发展变种而来的枪支类型合并为一类,称为枪族类(IDFamily);第三阶段依据每个大类中枪支图像的外观,将较为相似的枪支和明显不相似的枪支再次进行合并和分类,称为相似类(IDSimilar);第四阶段则细分到具体型号的枪支类型,称为原始类(IDorigin)。网络模型中包含的这4 个阶段均采用Softmax 损失函数[19]输出其分值,如式(2)所示:
最后,整个网络模型通过融合这4 个阶段Softmax 损失函数的输出,共同约束需要查找的枪支图像和库中的枪支图像的相似度,训练深度网络模型参数,从而获取高级检索特征。
此外,针对基于深度残差网络的枪支图像识别任务,本文尝试18 层残差网络(ResNet18)、50 层残差网络(ResNet50)和101 层残差网络(ResNet101),对比实验结果发现,ResNet18 网络可以满足应用要求,并且由于其网络层数较少,模型不容易出现过拟合问题。
改进后的多任务级联残差网络整体结构如图3所示,其中共包含4 个阶段,每个阶段(StageN,N=1,2,3,4)中都包含一个2.1 节所述的基础网络,该基础网络是一个包含BN、ReLU 和Pooling 的ResNet18。在每个Stage,信息传递有2 条支路,右侧为残差分支,左侧为本体分支。1×1 的卷积层加在残差分支,可以在改变输出通道数的同时提高非线性特性,进一步提升模型表现能力。
图3 枪支识别系统网络架构Fig.3 Firearms identification system network architecture
整个枪支识别系统模型的步骤如下:
步骤1创建一定数量的枪支图像样本,采用代码自动化处理及人工处理相结合的方式将枪支图像粗分为整枪、枪支部件和标记错误图像,并剔除无法识别的图像。
步骤2对图像样本进行剪裁及翻转,再将样本按人工经验提取出部分数据,按所属类别进行分类,拆分成训练集和测试集。
步骤3将处理好的图像输入进行7×7 卷积、BN、ReLU 激活及最大池化操作。
步骤4瓶颈块结构如图3 中StageN模块所示,右侧为残差分支,左侧为本体分支。对于本体分支,首先对输入数据进行3×3 卷积、BN 及第一次ReLU 非线性激活,接着将得到的特征送入下一层网络,再进行一次卷积和BN 操作;对于残差分支,对输入数据进行1×1卷积、BN 然后作为输出,与左侧分支特征图进行合并,进行第二次ReLU 激活;随后将第二次ReLU 非线性激活的输出结果作为输入,送入本体分支进行3×3 卷积、BN 及第三次ReLU 非线性激活,进一步进行3×3 卷积、BN 处理得到相应的特征图。本体分支特征图与残差分支特征图相合并,进行第四次ReLU 激活,整个过程构成网络的一个阶段(Stage)。
步骤5枪支识别网络模型由依次相连的4 个Stage 组成,每一段网络结构类似。对第四阶段(Stage4)输出的枪支二维特征图,在池化层进行全局平均池化,然后接入全连接层,并通过Softmax 层进行归一化处理,采用4 个Softmax 损失函数联合作用,约束枪支的左右朝向、枪族属性(IDFamily)、相似枪支类(IDSimilar)和精确的枪支型号(IDorigin)。
步骤6将ImageNet[20]上预训练模型的权重加载到改进ResNet上对应的层,设置学习率、Batch 大小、权重衰减正则项等参数。对训练数据进行迭代训练,保存多次训练中最高识别精度的模型权重,并在测试集上加载训练好的模型进行测试,从而验证模型精度。
根据枪支图像识别算法的应用需求,本文设计一种枪支图像检索系统,该系统基于B/S 架构,部署于公安网,采用Java 开发语言。系统以枪支图像数据集和枪支基础信息数据库数据作为支撑,以枪支图像检索算法为核心功能,通过上传枪支物证图像,为用户提供枪支图像自动识别和信息查询等服务。枪支图像检索系统架构如图4 所示。
图4 枪支图像检索系统架构Fig.4 Firearm images retrieval system architecture
枪支图像检索系统包括图像上传、图像比对、信息查询3 个功能模块。用户按照要求将图像上传到系统后,枪支图像检索算法自动提取所上传枪支图像的特征,并与系统中枪支图像数据集的图像特征进行比对,按照相似度由高到低依次排列识别到的枪支图像。用户可以选择枪支图像查阅枪支详情并进一步确认查询结果,如图5 所示。
图5 对比结果页面Fig.5 Comparison results pages
本文所提制式枪支图像识别系统基于PyTorch 深度学习框架构建,采用Java 语言搭建实现前端业务系统。系统测试环境为Ubuntu16.04操作系统,Intel Core i7处理器,GTX1080Ti 显卡,显存11 GB。模型训练采用Adam 优化算法,批次大小(Batch size)设为32,初始学习率设为10-4,在经过30 个轮次的训练后,学习率逐步衰减到10-6。评估指标主要包括:
1)前n位命中概率(Rank-n),即将待检索的图像输入识别网络提取特征后,计算其与数据库中各类枪种图像特征的欧式距离,以该距离作为相似度从而对检索结果进行排序,排序结果中最靠前的n张图像中有正确结果的概率。Rank-n具体计算如式(3)所示:
其中:N为待检索的图像总数量。
2)模型推理速度,即每秒可以处理的图像帧数(Frame Per Second,FPS)。
测试样本从枪支测试数据集中选取,检索数据集为本文2.1 节所述的自建枪支数据集,共包含7 364 种类型的枪支。在枪种的挑选上,从实战应用的角度出发,用于测试的枪支图像涵盖了国内常见制式枪支,如51 式7.62 mm 手 枪、54 式7.62 mm 手枪、56 式7.62 mm 冲锋枪、64 式7.62 mm 手枪、92 式9 mm 手枪、56 式半自动手枪等,同时包括国外知名枪支,如格洛克17 手枪、伯莱塔92F 手枪、西格绍尔P229 手枪、鲁格P85 手枪等,共计874 种枪支类型,1 018 张枪支图像。
将3.1 节所选取的1 018 张测试枪支图像逐一输入本文所搭建的制式枪支图像检索系统,提取测试图像的深度特征,并与数据库中每类枪支图像的深度特征进行比较,计算其欧式距离,按照欧式距离的相似度对库中检索的每类枪支图像排序输出,记录排序结果,获取前n位命中的检索结果。同时,除了与经典残差网络(ResNet)模型[12]进行比较,还和近期主流分类网络模型EfficientNet[21]、专门用于细粒度图像分类的网络模型NTS-net[22]进行比较。表2 所示为采用本文模型、残差网络ResNet18、ResNet50、EfficientNet 和NTS-net对相同样本进行训练后的测试结果,其中,检索库枪支种类数为7 364,检索库枪支图像数量为21 128,测试库图像数量为1 018。
表2 5 种模型的测试结果Table 2 Test results of five models %
从表2 可以看出:采用ResNet50 虽然在训练集中能够获得比ResNet18 更好的准确率,但是在测试集中前20 位命中概率比ResNet18 略微下降,说明对于细粒度小样本分类问题,采用ResNet50 会造成过学习;标准的EfficientNet 模型结果优于ResNet;专门用于细粒度图像分类的NTS-net 模型准确率优于EfficientNet,并且非常接近本文模型。图6、图7所示为2把枪支(64式7.62 mm 手枪、格洛克17 手枪)图像检索识别结果,从中可以看出,本文基于多任务级联残差网络模型可以准确识别出枪支的型号,并且将与之相似的枪支型号的图像均按照相似度进行排序展示。
图6 64 式手枪检索结果Fig.6 Retrieval results of 64 pistol
图7 格洛克17 手枪检索结果Fig.7 Retrieval results of Glock 17 pistol
表3 所示为不同模型的参数量大小以及推理平均帧率,从表3 可以看出:当批次大小为32 时,本文模型的帧率虽然略微低于ResNet50,但基本也可满足实际需求,并且在本文所构建的枪支库中也能够实现秒级检索返回;EfficientNet 虽然有较小的模型参数量,但是其推理速度并无太大优势,这主要是由于采用EfficientNet 生成的特征向量维数较大。
表3 模型参数量及推理速度比较Table 3 Comparison of model parameters and reasoning speed
传统的枪支识别技术依赖检验人员的经验,查询速度慢且精度低。本文建立一种基于多任务级联深度残差网络的枪支图像识别模型,该模型以ResNet18 为基本构建单元,通过对枪支图像从像素级特征到语义级特征的分级划分,并融合每个任务的损失函数,以共同训练网络参数,实现针对制式枪支图像的自动识别。在此基础上,采用Java 语言构建一套枪支图像自动识别系统。实验结果表明,该模型对真实场景枪支图像的Rank-20 识别准确率超过95%,并且具有较好的鲁棒性。下一步将对深度网络模型的轻量化进行研究,降低识别模型的参数量并提高模型的推理速度。此外,探索并实现针对非制式枪支图像的识别和检索系统也是今后的研究方向。