基于改进CornerNet-Lite的林区行人检测算法
2021-07-27刘宇航马健霄王羽尘白莹佳谢征俊
刘宇航,马健霄,王羽尘,白莹佳,谢征俊
(南京林业大学汽车与交通工程学院,南京 210037)
良好的森林管护是减少林木盗伐、改善森林发展环境的必要条件。为做好森林管护工作,减少人力物力的消耗,可以利用快速发展的行人检测算法,对非法闯入的行人进行检测与甄别。当检测出行人时立刻上报林业管理部门,对人员进行甄别,并对盗伐事件及时处理。为了实现对盗伐事件的快速响应,算法必须快速准确地检测出林区的行人[1]。
由于林区植被茂盛,在采集图像时极易出现不同程度的遮挡情况,行人的特征并不完整,并且大多数盗伐者着装迷彩服,与背景的色调相似度很大,所以林区行人检测难度较大,需要对现有的检测算法进行优化。传统的行人检测方法主要基于人为设计的特征提取器。周剑宇等[2]使用基于先验知识的Haar-Like特征,通过检测行人的上半身来确定行人的位置;Dalal等[3]使用局部归一化的方向梯度直方图(histogram of oriented gradien,HOG)表征行人的特征并检测;Ahonen等[4]通过划分图像区域并提取局部二值模式特征来检测行人。这种传统的方法要求研究人员根据不同的检测任务进行调整,设计特定的特征提取器,泛化能力较差,很难达到林区行人检测的要求。
近年来,随着计算机硬件设备的提升,深度学习技术快速发展。卷积神经网络可以替代传统的人为设计特征,具有特征表达能力和鲁棒性较强的特点,在图像分类、目标检测等计算机视觉领域取得了巨大的成果,出现了大量基于深度学习的检测算法。Girshick等[5]引入了两阶段法并提出R-CNN,使用选择性搜索生成感兴趣区(region of interest),从图像中提取每个区域后由卷积神经网络处理来检测;此外,Girshick[6]又设计了ROI池化,提出了Fast-RCNN。Ren等[7]通过引入区域提案网络(region proposal networks,RPN),提出了Faster-RCNN,该网络使用一组预先设定的候选框进行检测,提高了检测行人的效率。随后,Redmon等[8]消除了ROI池化并提出了YOLO,引入了单阶段的方法直接从图像中预测边界框坐标;Redmon等[9-10]调整了其网络结构,提出了YOLO9000和YOLOv3。Bochkovskiy等[11]利用数据增强技术、特征增强模型和增大感受野等改进YOLOv3,提出了YOLOv4。Lin等[12]提出了RetinaNet,解决了单阶段方法由于正负候选框的巨大不平衡导致的检测精度不足。但现阶段大多数研究都是基于候选框,参数过多,冗余的计算量巨大,而在实际情况下,需要快速而准确地检测出行人,从而及时采取措施制止林木盗伐的行为。同时,检测设备一般配备功耗较低的单模块超级计算机,将模型应用在边缘位置训练和计算,快速有效的算法可以提高训练效率,减少能源的消耗。
针对上述问题,笔者基于CornerNet-Lite算法[13]框架,从行人的关键点预测出发进行检测,优化算法的损失函数,通过改进热力层损失预测行人位置框角点的位置,改进嵌入层的损失来匹配同一目标的角点,计算偏置层损失,减少图像尺度变化过程中由于取整丢失的精度信息,提出一种林区行人目标实时检测算法CornerNet-P,并与YOLOv4对比,对模型的检测速度和检测精度进行验证。
1 基于关键点预测的CornerNet-P算法
林区盗伐者大多着装迷彩服,与背景的色调相似度很大。根据林区行人的检测特点,算法首先对输入图像进行预处理,使用沙漏网络(hourglass network)作为主干网络[14],提取行人的特征信息,避免相似的特征导致行人的错检和误检。同时,林区由于植被茂盛,在采集行人图像时容易出现不同程度的遮挡,采集到的行人特征也并不完整,所以本研究将行人的位置预测简化为2个角点的预测,即左上角点和右下角点。对沙漏网络输出的特征进行角池化处理,获得角点的位置特征信息。预测热力图来检测行人的角点位置;预测角点的嵌入层损失,使2个角点嵌入到同一对象的距离更小,损失更低;预测网络偏置层的损失,调整角点的位置,以生成更紧密的边界框,如图1所示。
图1 CornerNet-P算法的网络结构
1.1 图像预处理
算法使用7×7的卷积网络和2个残差块(residual network)对输入的林区行人图像进行预处理[13],将分辨率降到64×64,提高本算法的训练速度,整体流程如图2所示。
图2 输入图像的预处理
1.2 沙漏网络
算法使用2个堆叠的沙漏网络进行特征提取,输出的特征图分辨率为64×64。沙漏网络由2个3×3卷积层和1个跳跃连接的残差块构成,但网络参数过多,检测时间较长。在本沙漏网络中着重减少像素的处理量,结合SqueezeNet[15]的思想,使用1个轻量级的网络fire module,如图3所示。主要使用2种降低网络复杂度的方法:1)使用1×1卷积核处理图像,改变图像的维度,减少网络的参数,节省计算量;2)通过1个由1×1和3×3卷积核组成的扩展层来提供结果。
图3 fire module的网络结构
1.3 角池化
为解决林区行人遮挡和着装与背景色调相似的问题,可以将行人位置简化为左上角点和右下角点。但在不同的行人上,角点位置无规律可循,采用普通池化操作,预测角点的位置会比较困难。针对左上角点的右边有目标顶端的特征信息,角点的下边有目标左侧的特征信息,采用角池化网络提取图片的特征信息,预测行人的位置。
角池化层是通过对主干网络输出的特征图进行水平方向从右向左的最大池化,得到特征图;再从下到上做最大池化,得到另一个特征图;将这2个特征图的每个像素值相加,得到角点的位置特征信息,如图4所示。
图4 角池化过程
1.4 损失层
整个网络的损失分为3个部分,分别为热力图、嵌入层和偏置层损失。本研究为提高整体模型的迭代速度,引入Adam优化整个损失[16],将α设置为0.5,β设置为0.5,γ设置为1,则:
L=Lheat+αLpull+βLpush+γLoff
(1)
式中:L是整个网络的总损失;Lheat是预测角点时的误差;Lpull是预测同一目标2个角点的损失;Lpush是预测不同目标2个角点的损失;Loff是在取整计算时丢失的精度信息。
1.4.1 热力层
基于焦点损失(focal loss)[12],改进热力层损失,预测角点的位置:
(2)
式中:pcij是通道c在坐标(i,j)的预测概率;ycij是通道c在坐标(i,j)的真实标记;C是通道数;H是高度;W是宽度;N是物体个数;β=4;a=2。
1.4.2 嵌入层
为匹配同一个行人目标的左上角点和右下角点,使Lpull预测同一目标的两角点损失尽可能小,Lpush预测不同目标的两角点损失尽可能大,在此网络中改进Lpull损失:
(3)
(4)
式中:etk是左上角点的热力向量;ebk是右下角点的热力向量;ek是etk和ebk的均值;ej是ek向量互换二三列。
1.4.3 偏置层
采用的沙漏网络存在下采样和重新上采样的过程,网络会根据取整后的下采样坐标计算,映射到原始图像中的坐标,整个过程会产生精度损失[17]:
(5)
(6)
(7)
式中:οk是偏移量;xk是角点k的x轴坐标;yk是角点k的y轴坐标;n是下采样的倍数;SmoothL1Loss(·)是损失函数;⎣x」是不大于x的最大整数。
2 试验方法与结果
2.1 数据集
由于没有开源的林区行人数据集,所以模型使用COCO2014数据集,从中提取行人数据集。其中,训练集45 174张,测试集21 634张,共计66 808 张,每张图片中的行人数量不等,尺度不一,共计273 469个行人样本。
2.2 模型训练
试验环境为:IntelXeonGlod 5217 CPU 3 GHz,64 GB 内存,NvidiaTITANRTX 24G,Ubuntu 18.04,64位操作系统。
选择主流的深度学习框架pytorch作为试验平台。训练过程的参数设置:批大小为8,学习率为0.000 1,65万次迭代后衰减1次学习率,衰减因子为0.1,共进行73万次的迭代。网络的输入大小为511×511,输出大小为64×64。
2.3 评价指标
选用行人检测的平均准确率(A)作为评价指标[18],该式表达如下:
(8)
(9)
(10)
式中:P是准确率;R是召回率;Tp是预测行人目标正确的正样本数;Fp是预测行人目标错误的正样本数;Fn是预测行人目标错误的负样本数。
在计算准确率和召回率时,本研究设定行人目标的标注框和预测的边界框的交并比大于0.5时为正例,其余均为负例,并依次增加0.05到交并比大于0.95时为正例,其余均为负例,计算10次结果的均值,即为AP[19-20]。其中,小尺度目标(区域面积<32像素×32像素)的评价指标为APs,中等尺度目标(32像素×32像素<区域面积<96像素×96像素)的评价指标为APm,大尺度目标(区域面积>96像素×96像素)的评价指标为APl。则交并比(δ)为:
(11)
式中:Apre是网络预测的边界框;Atrue是行人的标注框。
2.4 试验结果
使用COCO2014行人数据集训练本研究提出的算法CornerNet-P。训练集共计184 951个行人样本,最终整个算法训练过程的损失变化曲线如图5所示,经过73万次迭代后本研究的模型达到了收敛,损失在1~4之间小幅震荡。
图5 损失函数曲线图
为了验证改进算法的可行性和先进性,与YOLOv4算法在COCO2014行人数据集上训练得到的模型进行比较。CornerNet-P和YOLOv4在同一测试数据集上的检测效果如表1所示。
表1 2种算法的评价指标
与常用的主流目标检测算法YOLOv4相比,CornerNet-P对所有行人样本检测的平均准确率提高了1.7%,检测速度提高了5.1%。CornerNet-P的编程语言虽然为Python,语言的运算速度比C语言慢,但CornerNet-P的整体检测速度和检测精度都优于C语言编写的YOLOv4算法。针对不同尺度行人目标的检测结果如下:
1)对于小尺度和大尺度的行人目标,CornerNet-P算法对于APs和APl的平均准确率比YOLOv4算法分别提高了3.9%和7.0%,其检测精度明显优于YOLOv4;
2)对于中等尺度的行人目标,CornerNet-P算法对于APm的平均准确率比YOLOv4算法降低了11.0%,检测效果略有不足。
同时,测试集中包含496张真实的林区行人图像,选取其中几张具有代表性的图像,分别利用CornerNet-P和YOLOv4算法进行检测,检测结果如图6所示。其中,左侧图片均为利用改进的CornerNet-P算法获得的检测结果,右侧图片均为利用YOLOv4获得的检测结果。
图6 算法检测结果对比
由图6a可以看出,2种算法在正常尺度下的林区行人检测性能相当,都能准确地检测出图像中的行人位置;图6b中当行人目标尺度较小时,CornerNet-P算法能准确地检测出2个行人的位置,而YOLOv4算法也同样可以检测出;图6c中当检测多目标且目标着装与背景相似时,CornerNet-P算法能准确地检测出大部分行人,但仍漏检1人;图6d、e中当行人出现遮挡时,CornerNet-P算法检测效果也较好。总体来说,CornerNet-P算法在林区行人检测性能上优于YOLOv4算法。
3 结 论
为解决林区行人遮挡和着装与背景色调相似的检测问题,本研究基于CornerNet-Lite算法,从行人的关键点预测出发,通过改进模型的损失函数得到CornerNet-P算法,以达到实时检测林区行人的目的。与YOLOv4相比,在COCO2014行人数据集上该检测算法的平均检测准确率提高了1.7%,检测速度提高了5.1%,并且在真实的林区行人图像上检测效果较好,但在人物出现遮挡的情况下仍会出现漏检,算法的检测准确性还有提升的空间。下一步将对算法进行改进,加入盗伐者和护林者等人员的分类器,并且如果林区未来全面实行机器自动识别,尤其是林区中收集到海量的行人数据时,算法识别效果将会得到大幅度的提高。