谭芳喜,肖世德,2,周亮君,李晟尧
(1.西南交通大学 机械工程学院,四川 成都 610031;2.轨道交通运维技术与装备四川省重点实验室,四川 成都 610031)
目标检测作为计算机视觉研究领域的热点,一直受到许多学者的关注。传统的目标检测算法主要是基于设计好的手工特征来进行检测,检测的效果主要与设计的特征质量有关。对于不同的目标而言,没有一种通用的特征,只能根据检测对象的特点有针对性地设计特征,所以鲁棒性很差[1-2]。近年来,基于深度学习的目标检测技术取得了长足的进步,无论是在检测效率还是准确率上都取得了很好的效果[3-4]。
目前基于深度学习的目标检测算法大致可以分为两种方式:Two-stage目标检测算法与One-stage目标检测算法。Two-stage系列算法在目标检测过程中分两步完成,首先通过算法生成一系列的候选区域,然后再通过卷积神经网络进行分类,代表性的算法有RCNN[5]、Fast RCNN[6]、Faster RCNN[7]等,这一系列算法在检测的准确率和定位精度上相对要好一些,但在检测速度上无法满足实时性的需求。One-stage系列算法将目标检测问题直接当作回归问题来处理,不产生候选区域,直接预测出目标位置与类别;代表性的算法有YOLO[8]、YOLOv2[9]、YOLOv3[10]、SSD[11-12]、RetinaNet[13]等,One-stage系列的算法精度上相对于Two-stage系列算法要低一些,但是检测速度要快很多。
该文以One-stage系列算法中的YOLOv3为基础,针对道路环境下的常见目标,提出了一种改进算法以增强YOLOv3的检测能力。通过引入深度可分离卷积模块减少参数计算量;采用K-Means++算法确定数据集的先验锚点框;在多尺度预测网络结构中嵌入SENet模块,增强网络提取特征的能力;引入DIoU作为边界框位置损失函数,解决IoU无法反映预测框与真实框重合度大小、无法优化IoU为零等问题;最后利用DIoU-NMS去除冗余框,实现准确定位。
YOLOv3算法作为一种端到端的目标检测模型,只需要在输入端输入图像数据即可在输出端得到一个预测结果,预测结果为边界框的位置信息、置信度以及所属类别。如图1所示,其基本思想是将输入图片分割成S×S个网格,如果标注的目标中心坐标落在某个网格中,那么就由该网格来检测这个目标。每一个网格都会预测出B个边界框,每个边界框都包含位置信息(x,y,w,h)、置信度(Confidence)以及C个类别的概率,对于输出层来说,最终的输出维度为:S×S×B×(4+1+C)的张量。置信度是指边界框包含目标的可能性Pr(object)以及包含目标情况下边界框准确度IoU的乘积,计算公式如下:
图1 目标检测流程
(1)
上述公式中,当检测目标位于该网格中,Pr(object)=1,否则为0。IoU用于表达真实框与预测框的重叠度,表示的是预测框和真实框的交集与并集的比值。当一个目标被多个检测框所预测时,通过设定阈值,将置信度低于阈值的边界框去除,并且对高于阈值的边界框进行非极大值抑制,去除多余的边框,最终得到最佳边界框。
YOLOv3主要是由特征提取网络Darknet-53和多尺度预测网络两部分组成。其特征提取网络Darknet-53在YOLOv2的基础上引入了残差模块和跳跃连接构成了全新网络来对输入图像进行特征提取,其网络结构如图2所示。该网络主要由1×1和3×3的卷积层构成,减少了模型的参数量和计算量,在每次卷积之后都会加上一个BN层和LeakyReIU层,解决梯度爆炸和梯度消失的问题,加快网络的收敛速度。而且该网络中没有池化层和全连接层,特征图尺寸的变化是通过改变卷积核的步长来实现的,减少了特征信息的丢失。相比于YOLOv2使用的Darknet-19,Darknet-53加入了5个残差模块,使网络深度大大增加,虽然模型实时性能有所下降,但模型的检测精度大幅提升。Darknet-53在ImageNet上的实验结果也表明,其分类精度与ResNet-152和ResNet101相差不大,但是网络层数比它们少,计算速度比它们快,是一种非常优秀的特征提取网络。
图2 Darknet-53网络结构
YOLOv3引入了锚点框机制,锚点框的尺寸大小直接决定了在输出层每一个网格单元上做出的预测框的大小。如果锚点框的大小一开始就和被检测的物体形状相近,那么训练的收敛速度就会更快,而且整体性能也会更好,反之则可能导致模型难以收敛。
YOLOv3中选用了K-Means算法进行先验框聚类,但是K-Means算法受初始点选取的影响较大,从而容易导致聚类结果不稳定。故采用K-Means++[14]算法来进行聚类,该算法主要是对初始点的选取进行改进,基本思想就是初始点的聚类中心之间的距离要尽可能得远。算法流程如下:
(1)从数据集当中随机选取一个样本点,作为最初的聚类中心。
(2)计算每个样本点与当前已有聚类中心之间的最小距离(即与最近的一个聚类中心的距离),再计算每个样本点被选为下一个聚类中心的概率P,按照轮盘赌法选出下一个聚类中心点。
(3)重复步骤(2)直至选出K个聚类中心为止。
(4)对数据集中的每个样本点都计算它到K个聚类中心点的距离,并将该样本点划分到离它最近的聚类中心点。
(5)对每个类别重新计算聚类中心点。
(6)重复(4)、(5)两步直至聚类中心稳定。
K-Means++算法的距离度量公式为:
d(b,c)=1-RIOU(b,c)
(2)
其中,b为预测的矩形框,c为真实的矩形框,表示两个矩形框重叠度。IoU的定义如图3所示。
图3 IoU定义
为了得到适合的锚点框数量,该文对平均IoU与锚点框数量的关系进行了分析。从图4中可以看出,刚开始随着聚类中心点数量的增加,平均IoU快速增长,当聚类中心点数量增加到9以后,平均IoU增速越来越慢,所以最终选择了9个锚点框聚类,并且在3个不同尺度上对这9组锚点框进行分配。其尺寸分别为(68,74),(142,138),(150,190),(210,190),(235,196),(260,225),(352,314),(355,317),(376,332),平均IoU与锚点框个数的关系如图4所示。
图4 锚点框聚类分析结果
标准的卷积在卷积时要同时考虑所有的通道数,所以会产生大量的参数计算。深度可分离卷积[15-16]是分别对每个通道做卷积,然后对每个通道上采集到的特征进行融合。假设有H×W×C的输入,有k个3×3的卷积,padding=1,stride=1,标准卷积的计算量:H×W×C×k×3×3,深度可分离卷积计算量:H×W×C×3×3+H×W×C×k,计算量压缩为:
可以看出,深度可分离卷积在在输入参数相同的条件下,计算量大大减少,所以对YOLOv3的所有stride=1的3×3的卷积核使用深度可分离卷积模块来代替,加快模型计算速度。
SENet[17-18]是由Momenta胡杰团队于2017年提出的网络结构,SENet以显式地建模特征通道之间的相互依赖关系为切入点,通过学习的方式来自动获取每个特征通道的重要程度,然后按照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。
SENet主要包括两个过程,分别是Squeeze过程和Excitation过程。其具体过程如下:
(1)Squeeze过程:相对于传统的卷积只是在一个局部空间上进行特征信息的提取,很难获得足够的信息来表征各个通道之间的关系,而Squeeze是在一个通道上对整个空间的特征进行提取,每一个特征通道经过Squeeze之后都会产生一个实数,这个实数是通过全局平均池化所产生的,因此在某种程度上这个值具有全局的感受野,计算公式如下:
(3)
(2)Excitation过程:Squeeze之后得到了图像的全局特征,再用Excitation提取各个通道之间的关系。基本思路就是通过FC-Relu-FC-Sigmoid操作生成每个通道的权重,然后对每个通道用对应的权重进行加权,实现在各个通道上对原始特征的重标定。计算公式如下:
s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
(4)
(5)
SE模块可以轻松地嵌入到所有主流的网络结构中,并提升原有模型的性能。如图5所示,将SENet嵌入到Resent网络中,可以看到只需要简单的几步即可实现网络优化,提高模型的性能。
图5 SENet嵌入Resnet网络结构
提出将SENet与Resnet[19]相结合并引入到YOLOv3的多尺度预测网络中,实现对网络结构的优化,文中算法的网络结构如图6所示。
图6 改进算法网络结构
在YOLOv3中,损失函数由中心坐标误差、宽高坐标误差、置信度误差和分类误差四部分构成。其中,中心坐标误差、宽高坐标误差采用均方误差计算,置信度误差和分类误差采用交叉熵损失函数计算。在置信度误差计算中,IoU的大小直接决定了预测框与真实框的相似度情况,对损失函数的计算有着重大影响,但是使用IoU时对于预测框和真实框不相交、两个边框的真实重叠情况等问题,无法有效做出判断。为了解决上述问题,该文使用DIoU[20]来替代IoU,其中DIoU Loss的计算公式如下:
(6)
d=ρ(a,b)
(7)
其中,IoU在前文中已经定义过,a为预测框的中心点,b为真实框的中心点,是两框中心点的欧氏距离,c是覆盖两框的最小封闭框的对角线长度,d是预测框中心点和真实框中心点的距离,DIoU Loss的示意图如图7所示。
图7 DIou Loss示意图
在传统NMS中,IoU指标常用于抑制冗余边界框,因为只考虑重叠区域的影响,所以对存在遮挡的情况经常产生错误的抑制。该文采用DIoU-NMS[20]算法,利用DIoU代替原来的IoU,同时考虑了重叠区域和两个边界框的中心距离的影响,减少错误的抑制。计算公式如下:
(8)
(9)
其中,阈值可以取0.43到0.48的值,c和d分别表示覆盖两框的最小封闭框的对角线长度和预测框中心点和真实框中心点的距离,在前面已经给出。
文中算法是在pytorch深度学习框架上实现,实验使用的配置为NVIDIA GeForce GTX1070 GPU、16G 内存、操作系统为Ubuntu16.04的硬件平台上训练与检测。模型训练策略如表1所示。文中通过计算一张图片耗时、帧率、准确度与平均精度进行模型性能评估。
表1 检测模型训练策略
文中数据集是从COCO数据集获得,目标包括人、小汽车、卡车、自行车、客车5类道路常见的目标。训练集共计12 750张样本,其样本分布如图8所示。
图8 数据集样本分布
为了验证文中提出模型的性能,将改进算法与YOLOv3进行性能测试对比,结果见表2和表3。通过对表格数据的分析可以发现改进之后的算法在均值平均精度(mAP)、5类不同目标检测准确率和检测耗时上都较YOLOv3有了不同程度的提升,这反映出了文中算法改进的有效性。
表2 改进算法与YOLOv3模型检测准确率对比
表3 改进算法与YOLOv3模型检测耗时对比
基于YOLOv3算法提出了一种针对道路环境下常见目标检测的改进方法。首先,利用K-Means++算法对数据集的锚点框重新聚类,得到新的聚类中心点。然后,对YOLOv3的3×3的卷积核进行深度可分离卷积,提高模型计算效率。其次,将SENet与Resnet相结合并引入到YOLOv3的多尺度预测网络,提高模型的性能。最后,改用DIoU代替IoU去判断真实框和预测框的相交情况。实验结果表明,该方法具有较好的鲁棒性,相对于YOLOv3算法,模型的均值平均精度(mAP)、5类不同目标检测准确率均有所提升,检测耗时更短,提高了模型的检测性能。