交通场景下的行人和车辆实时检测算法

2019-08-21 03:50周腾兰时勇
现代计算机 2019年21期
关键词:行人卷积损失

周腾,兰时勇

(1.四川大学视觉合成图形图像技术国防重点学科实验室,成都610065;2.四川川大智胜软件股份有限公司,成都610045)

0 引言

随着城市的发展和汽车数量的快速增长,交通场景越来越多样,行车环境也越来越复杂,这带来了一系列交通拥堵以及道路行车安全问题,智能辅助驾驶和深度学习发展为解决这些问题提供了新的思路,通过摄像头检测周围行人和车辆的位置,智能辅助驾驶系统可以根据这些信息控制行车速度并且提前做出预判,能有效减少事故发生的几率。因此能在复杂多变的交通场景中提前且准确检测到行人与车辆尤为重要。

SVM[1]结合HOG 特征[2]、AdaBoost[3]结合Haar 特征[4]都是基于纹理特征的目标检测算法。前者先从训练图像中提取梯度方向直方图(HOG)特征,送入SVM 分类器进行训练,使用SVM 分类器滑窗式检测图像中的行人车辆。后者使用Haar-like 特征构建弱分类器,通过AdaBoost 算法把弱分类器提升成强分类器,然后将多个强分类器串联得到级联分类器。这些传统算法共同的缺点是不能很好处理物体间遮挡的问题,还存在因人体姿势幅度过大和行人车辆朝向改变难以检测的问题,再加上现实环境复杂多样,这些算法容易出现误检,漏检,精度不高,定位不准,鲁棒性较差,也不能满足实时性要求。以上传统检测算法都依赖于人工设计的特征,物体外观、形状、姿态各有不同,光照影响、遮挡问题都会影响特征提取质量。深度学习和卷积神经网络(Convolutional Neural Network,CNN)的发展为目标检测提供了新的思路,CNN 直接将图像数据作为输入,无需人工对图像进行额外的特征抽取,因此在基于图像的识别,检测等方面具有独特的优势。

Faster R-CNN[5]是一种基于卷积神经网络的二阶段(two-stage)目标检测算法,它提出了区域提议网络RPN(Region Proposal Network)这一概念,替换了费时的选择性搜索(Selective Search)[6],结合滑动窗口和锚窗(anchor)机制得到建议窗口。Faster R-CNN 只在Conv5_3 层进行ROI Pooling 操作,然后在该层特征图像的每一个位置生成9 种不同尺度的锚窗用于匹配目标,但由于生成的锚窗数量太少,难以针对行人车辆检测任务覆盖到各个尺度,并且分类网络带有全连接层,参数量大,速度慢,也不能满足实时性要求。

SSD(Single Shot MultiBox Detector)[7]是一种基于全卷积网络的多尺度检测算法,SSD 结合了Faster RCNN 生成锚窗的思路,在多个不同尺度的特征图上生成预选框,并在每个层级上独立预测,这使得目标检测精度非常高。SSD 一种基于全卷积网络的检测算法,在参数量上比Faster R-CNN 少得多,因此相比于Faster R-CNN 精度更高且速度更快,但原始SSD 对于小尺寸的目标识别效果较差。主要原因分析如下:SSD 使用分辨率较高的Conv4_3(38×38)浅层特征层检测小目标,由于Conv4_3 层位置比较靠前,使得目标特征提取不充分,上下文语义信息不够丰富。深层特征的语义信息虽然丰富,但经过多次下采样后特征图非常小,丢失了部分位置信息且先验框(prior box)较大无法用来检测小目标,综上所述,当任务中包含较多的小目标时,SSD 算法性能较差。为解决上述问题,通常采用结合SSD 与FPN(Feature Pyramid Networks)[8]的思想,将高分辨率的浅层特征和具有丰富语义的深层特征进行融合。DSSD[9]设计了一种Top-Down 结构,将语义信息从高到低一层接一层反向传递回去,这一结构虽然提升了精度,但过多的特征融合模块却使速度大幅下降,行人车辆检测对实行性要求较高,DSSD 不能满足要求。

本文基于SSD 算法改进,将主干网络由VGG16[10]替换为密集连接的DenseNet[11],优化了DenseNet 结构,提升了特征提取能力。针对SSD 算法小目标检测性能差的问题,设计了特征融合模块,融合了深层和浅层的特征。修改损失函数为Focal Loss[12],正负样本不平衡的问题得到一定改善。改进算法在提升精度的同时保证了速度并且在一定程度上提升了小目标检测能力,鲁棒性较好。

1 改进SSD行人车辆检测算法

1.1 改进的DenseNet

近些年为不断提升网络的性能VGG、GoogleNet、ResNet[13]、DenseNet 等相继诞生。针对行人车辆检测任务,这里将SSD 的主干网络由VGG16 替换为更加高效的网络DenseNet。不同于基于深度残差结构的ResNet采用Element-Wise 方式将特征相加,DenseNet 采用了Concatenation 方式实现通道的连接,Dense block 基本结构如图1 所示,DenseNet 将特征输出到Dense block余下的每个特征层上,特征复用更加充分,Dense block先利用1×1 的卷积压缩了通道,再使用3×3 的卷积进行特征提取,卷积操作后接BatchNorm 层,这些设计使DenseNet 网络结构变得更深更窄,在增加了非线性和提高了网络性能的同时降低了参数量和计算量,还缓解了由于网络过深引起的梯度爆炸,梯度消失和过拟合问题。

图1 Dense block基本结构

本文并不直接使用DenseNet-121 作为预训练模型,DenseNet 第一个卷积核大小为7×7,步长(stride)为2,对于目标检测任务,输入图像通过一个7×7 的卷积后直接经过最大池化(MaxPooling)下采样,特征还未充分提取就损失了某些图像信息,这些信息也十分重要。因此这里参照DSOD[15]的Stem 模块设计思路,将第一个7×7 卷积替换成3 个连续的3×3 卷积,相比于7×7 卷积,3 个连续的3×3 卷积可以得到相同大小的感受野,这一改动减少了参数量,Stem 模块可以减少原始输入图像的信息损失,并且更好地进行了特征提取,保留了相关细节信息。

1.2 改进SSD的网络结构和特征融合模块

为进一步解决原SSD 算法由于浅层特征提取不充分,语义信息不够引起的小目标检测性能差的问题,参照DSSD 的思路设计了特征融合模块实现了深层特征与浅层特征融合,改进SSD 算法网络结构如图2 所示。改进SSD 算法的网络由1 个Stem block,4 个Dense block,3 个Transition 层,3 个用于下采样的3×3卷积和3 个特征融合模块构成。每个Dense Block 之间通过Transition 层相连,Transition 层的1×1 卷积进一步控制了通道数量压缩了模型,这里使通道数降为输入的一半,然后通过平均池化(Average Pooling)下采样。Dense block 4 之后接3 个连续的3×3 卷积进行下采样。网络输入图片尺寸为300×300 时,经过特征提取网络后得到38×38×512,19×19×1024,10×10×1024,5×5×256,3×3×256,1×1×256 的特征图分别记为Conv3_x,Conv4_x,Con5_x,Conv6,Conv7,Conv8。其中Conv6,Conv7,Conv8 的特征图直接用于预测,Conv3_x与Conv5_x,Conv4_x 与Conv6,Con5_x 与Conv7 通过特征融合模块得到38×38×512,19×19×512,10×10×512的特征图用于预测。

图2 改进SSD算法网络结构

特征融合方式并不采用DSSD 方式将语义信息从高到低一层接一层反向传递回去,而是采用跨层融合方式,主要基于以下考虑,DSSD 使用了更多的特征融合模块,这些模块使计算量显著增加,速度下降明显,Conv6,Conv7,Conv8 特征图语义信息已经比较丰富了,因此这里直接用于预测;由于相邻层间的特征信息相似性比较高,因此采用跨层融合的方式,由于Conv8 所含信息较少且Conv6 语义已经较为丰富,因此不用于特征融合。改进后的SSD 与DSSD 相比降低了模型复杂度,提升了速度。特征融合模块如图3 所示。

图3 特征融合模块

具有丰富语义信息的深层特征通过跳跃连接的方式与浅层特征融合,深层特征经过两个步长为2 的反卷积层4 倍上采样得到的特征图与浅层特征经过两个3×3 的卷积操作后得到的特征图进行Contact 通道相连,之后的1×1 卷积用于控制通道数量。3 个特征融合模块充分利用了上下文语义信息,提升了算法的性能,又不至于使速度损失过大,相比于DSSD 算法更加高效。

1.3 损失函数

原SSD 算法分类损失默认为Softmax Loss,对于行人车辆检测,负样本即背景类所占的比重会很大,虽然

采用Focal Loss 训练SSD 不需要使用OHEM[15]算法,Focal Loss 引入了两个参数α和γ,这两个参数起到了调整正负样本的权重和难易分类样本的权重的作用,通过实验测得γ取2,α取0.25 时的效果最好。根据上述公式可知,样本越难分,损失衰减越大,Focal Loss没有单纯舍弃易分负样本,而是利用了损失较小负样本,根据损失的不同赋予不同的权值,有效改善了正负样本不平衡的问题。定位损失使用了Smooth L1 损失,定位损失函数如公式(2)所示,Smooth L1 损失函数公式(3)所示。负样本的损失较小,但是大量的易分负样本在训练过程中会干扰损失,正负样本不平衡的问题会导致模型训练的效果不好。两阶段(two-stage)的Faster R-CNN通过RPN(Region Proposal Network)生成建议框,这一过程筛选了一部分框,使正负样本不平衡问题得到一定缓解。SSD 是一种单阶段(one-stage)模型,SSD 训练时通过难分样本挖掘(Hard Negative Mining)算法选取负样本,使正负样本比例为1:3。该算法在训练时更专注那些于难分类的样本,选出了损失较大的样本用于训练,忽略了损失较小的易分类的样本。为解决行人车辆检测过程中样本不平衡的问题,这里使用了Tsung-Yi Lin,何凯明等人提出的Focal Loss 替换原来的Softmax Loss,其损失函数如公式(1)所示。

其中l 为预测框相对于默认框的偏移量,g 为真实框相对于默认框的偏移量,cx、cy、w、h 分别为框的中心坐标x,y,默认框的宽度,高度的偏移量。总损失函数如公式(4)所示,N 为正样本个数,其中α取值为1。

2 实验与分析

2.1 实验平台与数据集

本文数据集以KITTI 数据集为主,这里将“Van”、“Truck”合并到汽车类别,由于KITTI 数据集中的行人样本相对较少并且场景相对单一,因此对KITTI 数据集进行扩充,收集Caltech 数据集,COCO 数据集中包含行人车辆的道路场景图片并重新标注,扩充后的数据集一共11000 张,将其转换为PASCAL VOC 数据集格式并按照8:1:1 分别划分为训练集、验证集、测试集,以VOC2007 test 标准评估,其中IOU 阈值设为0.5。

实验平台配置为:操作系统:Ubuntu16.04;CPU:Intel i5-8400;内存:12G DDR4;GPU:NVIDIA GeForce GTX1060;深度学习框架:PyTorch。训练中采用带动量的SGD 梯度下降法,批(Batchsize)大小为4,初始学习率为0.001,动量(Momentum)为0.9,权重衰减因子(Weight Decay)为0.0005。在训练过程中不断调整学习率大小,总共迭代训练数据120 个epoch。

2.2 性能评价指标mAP

本文采用mAP(mean Average Precision)作为评价模型检测精度的指标。要计算mAP 需要先得到每类的PR 曲线,其中P(precision)为精准度,R(recall)为召回率,其计算如公式(5)所示:

其中TP(True Positive)表示真正例,(False Positive)表示假正例,FN(False Negative)表示假反例,TN(True Negative)表示真反例,当预测框与真实框(Ground Truth)的IoU 值大于0.5 这个阈值时,该预测框才被认定为TP,反之就是FP。VOC2007 test 下的AP 计算采用11-point interpolated average precision,首先对每一类目标检测给出的置信度按降序顺序排列,设置一组阈值为[0,0.1,0.2,…,0.9,1],计算召回率大于阈值组中的某个阈值时对应的最大精确度,得到11个精确度后取平均值,AP 计算如公式(6)所示,将各个类别的AP 加起来取平均得到的就是mAP 值。

2.3 实验结果对比分析

在本文数据集下分别训练SSD,DSSD 和本文改进的SSD 算法共120 个epoch,在本文数据集进行测试,mAP 的变化如图4 所示,三种算法初始学习率均为0.001,在40 个epoch 时,三种算法的mAP 达到了70%左右,可以看出本文算法的mAP 最后略高于DSSD算法。

图4 不同算法mAP变化图

为进一步验证本文改进算法的性能,在本文数据集上选取了SSD、DSSD、改进SSD 进行了详细对比,主要对比了不同算法的精度指标和速度,对比结果如表1所示。

表1 本文数据集下不同算法性能对比

DSSD 主干网络为残差结构的ResNet-101,深层特征通过反卷积的方式一层一层传递回去,与SSD 算法相比精度提升明显,比SSD 提高了1.6%,但DSSD 的主干网络ResNet-101 参数量过多,并且过多的特征融合模块使得耗时明显增加,检测速度仅为11FPS,不能满足交通场景下行人车辆检测任务的实时性要求。改进SSD 算法选取了参数量更少的Stem-DenseNet-121作为主干网络,特征融合模块数量也更少,相比于原SSD 和DSSD 在mAP 上分别提高了1.9%,0.3%,改进SSD 算法的检测速度达到了39FPS,与原SSD 算法相比在速度上稍有下降,但是速度远高于DSSD,在检测速度与精度上取得了很好的平衡。可以看出改进SSD算法在行人目标上提升更大,但由于本文数据集中行人数量有限,针对行人的训练仍不够充分,数据集中的行人多为极小目标且较为模糊,因此对行人的检测精度不如车辆。

为验证Stem 模块的有效性,对比了VGG16-SSD、DenseNet-SSD、DenseNet-SSD(Stem)、Ours、Ours(Stem)共五种算法,在本文数据集上的测试结果如表2 所示。Stem 模块使DenseNet-SSD 的mAP 提高了0.7%。但Stem 模块使本文算法的mAP 仅提高了0.3%,分析原因可能是由于特征融合模块充分利用了特征,一定程度上减轻了由于图像信息损失带来的影响,但可以看出Stem 模块依然可以带来精度上的提升。

表2 本文数据集下不同算法性能对比

SSD 算法和改进的SSD 算法在不同场景的检测效果分别如图5-6 所示,前两幅图取自Caltech 数据集,后两幅图取自KITTI 数据集。可以看出SSD 算法存在的问题主要是对于较小的车辆和行人都存在一定程度上的漏检,SSD 算法在前三幅图均出现了漏检问题,在分类置信度上也稍低。第四幅图光线反差较大,两种算法对光线良好处的车辆检测效果均较好,但SSD 算法对树荫下的行人定位却不够准确。由此可见,改进SSD 算法精度更高,鲁棒性较好。

图5 原SSD算法检测效果

图6 改进SSD算法检测效果

3 结语

为了满足智能辅助驾驶中对行人和车辆检测的精度要求与实时性要求,本文提出了一种改进SSD 算法,本文算法与原SSD 算法进行了详细对比,实验结果表明,改进后的SSD 算法在提升精度和小目标检测能力的同时还保持了较高的检测速度。未来的工作将继续研究SSD 算法,设计更加轻量级的网络,利用模型压缩技术以满足更大分辨率图像检测的需要,提高精度的同时保证速度。

猜你喜欢
行人卷积损失
洪涝造成孟加拉损失25.4万吨大米
基于全卷积神经网络的猪背膘厚快速准确测定
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
毒舌出没,行人避让
两败俱伤
路不为寻找者而设
我是行人
损失