压缩SSD低空小目标检测算法研究
2022-12-12康鑫英张德育
康鑫英,张德育,王 君
(沈阳理工大学信息科学与工程学院,沈阳 110159)
对低空中的小目标进行检测有助于低空领域的安全与管理。 常用的目标检测模型有Faster RCNN[1]、YOLO[2]、SSD(Single Shot MultiBox Detector)[3]等。 Faster R-CNN 作为二阶段目标检测模型,检测精度高,但模型结构复杂,检测速度慢。YOLOv3 是一阶段目标检测模型,精简了模型结构,提升了检测速度,但精度低,不适用于小目标检测。 SSD 模型平衡了YOLO 和Faster R-CNN的优缺点,在保证检测速度的同时,提高了对于小目标的检测精度[4]。 因此,选用SSD 模型作为低空小目标检测的基础模型。
低空小目标尺寸小、运行速度快,选用SSD模型作为基础模型的同时,需采用压缩算法[5],进一步压缩模型体积,提高其检测速度。 模型压缩主要分为精细结构设计[6]、网络量化[7]、低秩分解、 知识蒸馏、网络剪枝等五大方向。 精细结构设计是在建模初期,以小而紧凑的网络结构为基础,构建新的网络模型;网络量化是将模型中以浮点数保存的参数,换一种保存形式(如八进制等),以降低模型的存储体积;低秩分解是通过将模型中的原矩阵分解成多个小规模矩阵的乘积,实现简化,从而降低计算量;知识蒸馏采用的是迁移学习,将复杂结构模型训练出的信息部署在小规模模型上,使小模型拥有更好的检测效果;网络剪枝是将对模型精度影响小的部分置零,从而精简模型的结构,提高模型的检测速度。 本文从剪枝方向入手,采用通道剪枝方法压缩SSD 模型,在保证检测精度的同时,提高检测速度。
1 模型压缩
1.1 SSD 目标检测模型
SSD 算法同时完成目标检测和分类,采用卷积神经网络提取目标特征。 从网络中6 个特定的卷积层中提取输出的特征图,均匀地在图片上不同位置采用不同尺度进行密集抽样,再分别用两个3 ×3 的卷积核进行卷积计算,使物体分类与预测框的回归同步进行。
SSD 以vgg16 作为基础网络模型,vgg16 由13 个卷积层和3 个全连接层组成,全连接层包含大量参数,为精简模型体积、提高运算速度,对vgg16 进行改进,方法如下:
(1)将vgg16 的全连接层6 和全连接层7 转化为卷积层;
(2)去掉所有的下采样层和全连接层8;
(3)新增卷积层6、卷积层7、卷积层8、卷积层9。
由此构成了新的主干网络,具体结构如图1所示。
图1 SSD 主干网络图
根据图1可知,六个有效特征图分别是卷积层4 的第三次卷积运算输出的特征图、卷积层7的第二次卷积运算输出的特征图、卷积层8 的第二次卷积运算输出的特征图、卷积层9 的第二次卷积运算输出的特征图、卷积层10 的第二次卷积运算输出的特征图和卷积层11 的第二次卷积运算输出的特征图。 SSD 模型在有效特征图上添加大量的默认框,并对其分别进行检测和分类,生成多个初步符合条件的默认框。 将不同特征图上生成的默认框结合起来,经过非极大值抑制[8]进行处理,删除一部分重叠或不正确的默认框,生成最终的检测结果。
1.2 批量归一化处理
SSD 目标检测模型进行训练时,会对输入层数据进行图像增强[9]与归一化处理。 但在训练过程中,中间层数据分布会产生变动,导致梯度消失或爆炸等问题,影响训练速度。 为解决该问题,可在模型的线性整流函数ReLU[10]激活层后添加批量归一化(Batch Normalization,BN)层,该层对输入数据进行归一化处理,可使网络快速收敛,拥有更好的性能。 为降低计算量,BN 层参考权值共享策略,以通道为范围,对输入数据进行如下处理。
式中:Zin为一个批量内特征图对应同一条通道的输入;Zout为Zin经过归一化处理的输出;m为当前批量内的特征图数量;x为通道内一张特征图的均值;^Z是输入的中间值;μB和σB是输入的平均值和标准差;γ和β是BN 层引入的可训练的仿射变换参数,γ的初始值为1,β的初始值为0;ϵ是为防止除以零而引入的极小量,可忽略不计。
由公式(1)可知,对输入数据进行BN 处理,在调整数据分布的同时,会影响模型的表达能力。因此,引入可训练的仿射变换参数γ和β,当γ=时,模型可恢复出原始网络所学习的特征。 在BN 层,每条通道内的特征图对应同一组γ、β参数,且γ参数在训练的过程中不断接近该通道内权重参数的标准差,反映出参数γ与该通道的关联性,即γ可在一定程度上评估所关联通道的重要性。
1.3 通道剪枝
SSD 目标检测模型的每一条通道都对应一个BN 层的γ参数,且该参数的大小与通道的输出值相关联。 因此,BN 层的γ参数可以作为各个通道的比例因子,在经过归一化处理后,将比例因子与通道输出相乘,作为BN 层的最终输出。 由于通过衡量比例因子的大小判断通道的重要性进行剪枝,需要对比例因子进行稀疏正则化处理,使其数值降低,部分数值归零,可自动剪除其关联的通道。
L1 正则化[11]是一种解决算法过拟合问题的方法,同时拥有稀疏化作用。 通过限制参数的大小,降低数据中的噪音对于模型准确度的影响,同时降低模型的复杂度,提高其泛化能力。 将L1 正则化项添加到SSD 目标检测模型的损失函数中,为其构造新的损失函数为
式中:N为与真实框匹配的默认框数量;Lconf为SSD 模型的分类损失;Lloc为SSD 模型的定位损失;α用于调整分类损失与定位损失之间的比例,其值默认为1;λ是正则化项的惩罚因子,当λ值接近于零时,正则化项对比例因子的约束力小,当λ接近无穷时,正则化项的约束作用增大,会使比例因子无限接近于零;g(γ)是为稀疏化比例因子而引入的惩罚函数。 本文采用L1 正则化对比例因子进行稀疏化处理,故g(γ) =|γ|。
在模型内添加全局阈值,该阈值由通道剪枝的比例所决定,以70%的剪枝率为例,此时的全局阈值为所有比例因子从小到大排序,70%处比例因子的值。 将低于阈值的比例因子重置为零,剪除其所对应的通道,详细过程如图2所示。
图2 剪枝算法示意图
由图2可知,模型训练过程中,输入层数据进入BN 层进行处理,此时每条通道都对应一组γ与β值。 以γ作为通道的比例因子,即上图中BN层内数字,通过剪枝率计算出全局阈值,将低于阈值的比例因子置为零(即图中虚线部分)。 此时,经过归一化处理的输入数据与比例因子相乘作为BN 层的最终输出,则低比例因子所关联的通道输出为零。
2 实验验证
2.1 制作数据集
针对低空中小目标的检测,常见的开源数据集不适用,故自行收集无人机与鸟类图片制作数据集。 为保证所得图片契合文章的研究内容,对图片中的待识别目标要求如下:
(1)目标处于飞行状态;
(2)目标尺寸小于32 ×32 像素。
为收集低空中飞行的无人机图片,操作大疆经纬M100 无人机在不同场所进行低空飞行,并录制视频。 后续使用python 对视频进行跳帧提取,挑选具有代表性的图片作为制作数据集的备选材料。 图3为无人机飞行图片示例。
图3 无人机飞行图片
为收集鸟类飞行图片,采用人工拍摄方式获取不同背景下的飞鸟图片。 由于地域对鸟类品种及背景产生的限制,所得图片相似度较高。 因此,通过在网络上搜索鸟类的飞行视频,再通过python 代码进行加工并跳帧提取图片,最后筛选具有代表性的图片作为制作数据集的材料。 所得鸟类图片示例如图4所示。
图4 鸟类飞行图片
实验收集鸟类与无人机低空飞行图片总计3000 张,分辨率不定,以8∶1∶1 的比例分别设置为训练集、测试集、验证集。 数据集参考VOC 数据集格式标准进行标注,供模型训练使用。
2.2 搭建模型
本文以vgg16 作为基础网络构建SSD 目标检测模型,为验证上文方案是否可行,在模型中添加BN 层,以BN 层的参数γ作为通道的比例因子,设置惩罚因子λ=0.001,小批量内的图片数量设置为32,基于自制数据集,使用随机梯度下降算法对模型进行训练。 训练后,得到一个稀疏化模型,选取合适数值作为全局阈值,对该模型进行通道剪枝。 本次实验所用服务器CPU 为英特尔酷睿i7 系列,其主频为2.6GHz,服务器的显卡为英伟达Geforce RTX 2060,其浮点计算性能可达到7.18TFLOPS。
2.3 实验结果
2.3.1 模型参数
对训练好的目标检测模型,选取不同剪枝率进行剪枝,结果如表1所示。
表1 不同剪枝率效果对比
由表1中数据可知,当剪枝率达到80%时,剪枝操作破坏了模型的结构,使模型精度受到剧烈的影响,因此该结果不可取。 当以70%为剪枝率进行剪枝时,模型压缩率可达到18.43%,删除了原模型中大量对检测效果影响小的参数,使模型更加精炼,故选取70%作为剪枝率对模型进行剪枝。 图5为剪枝前后的网络模型部分结构对比图。
图5 模型剪枝前后的部分结构对比图
由图5可见,剪枝后的网络模型各个功能层并未发生变动,但卷积层内的卷积核数量大量降低,而每一个卷积核固定对应一个输出通道,由此可以推断出模型内各层之间通道数量降低,70%低比例因子所对应的通道已被剪除。
2.3.2 检测速度
为测试通道剪枝对模型检测速度的提升作用,在服务器上分别运行剪枝前后的SSD 目标检测模型,对低空中的小目标进行检测,检测效果如图6所示。
图6 模型检测效果对比图
原模型检测速度为每秒27.58 帧,且目标识别精度为0. 89;剪枝后的模型检测速度为每秒60.86 帧,目标识别精度为0.84。 压缩后模型的检测速度得到了明显提升。
2.3.3 模型精度
模型的整体平均精度mAP 值用于衡量模型检测结果的精确度。 为查看剪枝操作是否破坏模型的检测精度,运行剪枝后的SSD 目标检测模型,对其mAP 值进行测试,所得结果为:鸟类检测效果的平均精度值为89.8%,相比原模型下降了0.9%;无人机检测效果的平均精度值为69.5%,相比原模型上升了1.4%。 求二者均值可得,剪枝后的模型mAP 值上升了0.3%。 该结果表明,剪枝操作在未进行微调的情况下,不会对模型的检测精度造成负面影响。
3 结论
为提高SSD 模型的检测速度,采用通道剪枝算法对模型进行压缩。 为模型中的每条通道引入一个比例因子,在训练过程中自动识别不重要的通道,以70%为剪枝率对模型进行修剪,获得优化后的模型。 该模型压缩率达到18.4%,且精度提升了0.3%。 将其运行在服务器平台,通过自制数据集测试可知,模型的检测速度由每秒28 帧提升至每秒61 帧。 该实验结果表明,采用的通道剪枝算法有明显的提速效果。