随着智能交通系统(intelligent traffic system)的发展和人工智能的出现[1], 实时检测道路上正在行驶的车辆变得尤其重要, 车辆检测也是目标检测中的重要对象之一. 目前我国已经建立多个无人驾驶示范区, 大力研究无人驾驶系统. 通过车辆检测功能可以得到道路上行驶车辆的种类、数量信息, 在无人车的车速控制、安全驾驶、路径规划等方面起到关键作用, 这也使得车辆检测有更高的准确度要求[2], 尤其是在雨雪恶劣天气下的车辆检测任务.
目标检测算法领域内研究方向分为传统目标检测算法和基于深度学习的目标检测算法[3]. 传统目标检测算法主要包括区域选择、提取特征和分类3个部分, 过程中需要大量人工设计提取特征, 面对多样性的目标时效果较差.
基于深度学习的目标检测算法无需人工设计提取特征, 泛化能力强, 鲁棒性好检测速度更快, 包括两阶段(two stage)目标检测算法和单阶段(one stage)目标检测算法. 2013年, Girshick提出了具有里程碑意义的两阶段目标检测算法R-CNN[4], 没有采用滑动窗口技术, 使用基于启发式的区域提取方法选择候选框, 重复合并两个可能性最大的小区域, 直到将图像合并为一个区域后输出候选框. 然后引入CNN操作提取候选区域特征, 将提取特征融合输出并用SVM进行分类, 最后通过边界回归框获得精确的区域信息. R-CNN提高了物体的检测准确度, 但提取特征过程花费时间较长、数据量大因此效率较低.
Redmon等人提出了单阶段目标检测YOLO算法[5]. 与R-CNN系列算法中分别提取目标定位和目标分类不同, 而是使用回归思想同时完成分类和定位任务, 并且没有预选框结构检测速度更快, 但精度相比于R-CNN系列并没有优势. YOLO算法为学者们提供了新的思想. Liu等人借鉴了YOLO的回归思想和Faster R-CNN的Anchor机制提出了SSD目标检测模型[6]. SSD算法提取了不同尺度的特征图进行检测, 并采用卷积核预测一系列边界框的类别分数和偏移量, 使得网络在保证检测高准确度的同时, 提高了检测效率. YOLO作者将YOLO算法改进后提出了YOLOv2算法[7], YOLOv2用检测数据集数据学习检测目标物体的准确位置, 学习分类数据集数据提高检测物体种类, 可检测对象种类达到9000种, 并加入了多尺度图像训练, 使网络在检测不同输入尺寸的图片时都有一个较高的准确率. 同时使用锚点框来预测边界框, 大幅提升了召回率. 之后作者再改进后提出了YOLOv3[8]. 加入了多尺度预测特征金字塔(FPN)、使用加入残差结构的Darknet-53网络和二分类交叉损失熵代替Softmax分类器, 提高了检测精度和检测较小目标的能力, 并且大幅提高了检测速度.
随后Bochkovskiy等人提出了YOLOv4算法[9], YOLOv4加入了大量改进措施, 与YOLOv3比较, 在输入端加入了CutMix和Mosaic数据增强, DropBlock正则化和Class label smoothing, 对Darknet-53改进得到CSPDarknet53主干网络、Neck部分添加SPP和PAN结构. YOLOv4与以往的目标检测相比, 检测速度不落后而识别准确度方面有大幅提升.
旷视科技在2021年根据YOLO系列算法的经验提出了最新的YOLOX算法[10], 选择Anchor-free结构, 无须手动设计anchor, 集成了Focus、分离式的解耦头结构、数据增强、标签分配等机制, 最终使YOLO算法的检测性能获得了大幅提升.
本文提出一种改进的YOLOX-S模型. 基于YOLOX模型, 通过GHOST操作代替部分卷积操作生成特征图, 以实现减小网络参数量; 在Neck结构中添加CBAM注意力机制; 通过不同感受野提取一张图片的信息实现强化特征图信息; 使用CIoU作为边界框回归的损失函数. 对不同道路情况监控视角下的车辆进行识别.
2 YOLOX原理YOLOX算法是由旷视科技发布的单阶段目标检测算法, 结构如图1所示, 分为输入部分、Backbone特征提取、Neck特征融合、Prediction四部分.
2.1 输入端输入端包括Mosaic数据增强、Mixup数据增强、Focus结构. Mosaic数据增强每次读取4张图片, 然后分别对4张图片进行缩放、翻转等操作, 最后组合在一张图片上, 达到丰富图片的背景; MixUp是在Mosaic基础上改变的增强策略, MixUp把2张图片按一定的融合系数融合在一起, 功能和Mosaic一样; Focus把一张图片中每隔一个像素拿一个值, 切片获得4个独立的特征层, 然后堆叠使通道扩充至4倍.
2.2 BackboneBackbone是YOLOX的主要结构, YOLOX所使用的主干特征提取网络为CSPDarknet, 它具有多个重要特点: 残差网络(Residual)缓解深度神经网络中梯度消失的问题; CSPBlock可以提高卷积网络的计算能力和学习能力并减少计算量; 使用SiLU激活函数, SiLU是Sigmoid和ReLU的改进版, 具有平滑、无上界由下界和非单调的特性, 在深层网络中效果比ReLU更好.
2.3 NeckNeck特征融合结构的核心是特征金字塔(feature pyramid networks, FPN)和路径聚合(path aggregation networks, PAN)结构[11,12]. 随着卷积层数的加深, 高层检测大目标的类别特征丰富; 而低层检测大目标的位置和小目标的类别特征更优, 常规的FPN层与低层向上层的PAN进行结合, 融合高低层的类别特征和位置特征信息, 并与主干网络的检测层特征融合, 增强网络特征提取能力.
2.4 Prediction
Predicton是YOLOX网络的分类器和回归器. 通过Neck得到3个有效特征层, 分别针对大、中、小型目标进行识别. 每一个特征层可以看作是特征点的集合, 每个特征点都有位置参数和通道数. Prediction判断特征点是否有物体与其对应. Prediction主要由Decoupled Head、Anchor Free、SimOTA、LOSS构成.
YOLOX的YOLOHead与之前YOLO算法的YOLOHead不同, 此前版本的解耦分类和回归在一个卷积内实现. 在YOLOX中的YOLOHead解耦分为两部分分别实现, 如图2, 第1部分是class_output, 是对目标框的类别预测的分数; 第2部分是obj_output和reg_output, 分别是判断目标框内是否由物体和目标框的坐标信息. 最后整合在一起得到特征信息.
YOLOX中使用Anchor-free结构. 在此前的YOLO算法中使用的是Anchor-Based结构, 参数量只有Anchor-Based的1/3.
SimOTA结构对特征点进行筛选, 得到正样本的候选框. 定义一个Cost成本函数来代表每个真实框和描框的关系. 筛选出中心点落在真实框的范围内或者中心点在以真实框中心点为基准设置的正方形范围内的描框, 筛选出的描框作为候选框. 计算每个真实框和对应描框的位置重合度, 将重合度最高的10个候选框与真实框的IoU加起来求得每个真实框的k值, 代表每个真实框有k个特征点与之对应. 计算每个真实框和当前描框的种类预测准确度. 通过位置重合度和种类预测准确度计算Cost成本函数, 将Cost最低的k个点作为真实框的正样本. 每个目标框和标签分配的正样本计算Loss.
$ {{{C}}_{ij}} = L_{ij}^{{{{\rm{cls}}}}\_{\rm{loss}}} + \gamma \times L_{ij}^{{\rm{reg}}\_{\rm{loss}}} $ | (1) |
在PAN结构中, 使用最邻近插值法完成上采样操作, 最邻近插值法计算速度快, 但是采样效果不是很好, 为了减少检测特征在采样过程中的损失, 本文选择使用双线性插值法进行上采样. 双线性插值法计算4个点作为参考点, 增强上采样效果.
3.2 引入CBAM注意力机制注意力机制(attention mechanism)是机器学习中常用的数据处理方法, 已经广泛应用在自然语言处理、语音识别和图像识别等机器学习任务中. 在检测网络中加入注意力机制, 可以获取有用的信息, 使检测网络将更多注意力分配到需要关注的地方[13]. 注意力机制分为通道注意力机制、空间注意力机制和混合域注意力机制. 本文使用的CBAM属于第3种.
如图3, 卷积注意力机制(convolutional block attention module, CBAM)[14, 15]通过通道注意力模块(channel attention module, CAM)和空间注意力模块(spatial attention module, SAM)来分别在通道和空间维度上学习关注什么信息、在哪个位置关注信息, 重点关注重要特征并抑制不必要特征.
给定一个特征图F∈RC×H×W, CBAM首先从F中推出一维通道注意力Mc, F与Mc相乘运算后推出二维空间注意力Ms, F再次相乘得到输出特征图, 输出特征图与输入特征图F拥有相同的维度. 计算公式为:
$ {F'} = {M_c}(F) \otimes F $ | (2) |
$ {F{''}} = {M_s}({F'}) \otimes {F'} $ | (3) |
为了聚集空间信息和不同对象的特征线索以获得更精确的通道注意力, 同时采用平均池化法和最大池化法对输入特征图的空间维度进行压缩. 池化向量经过多层感知器和一个隐含层, MLP输出的特征向量进行逐元素加法运算并通过Sigmoid激活后得到通道注意力Mc. 计算方式为:
$ \begin{split} {M_c}(F) &= \sigma (MLP(AvgPool(F)) + MLP(MaxPool(F)) \\ &= \sigma ({W_1}({W_0}(F_{{\rm{avg}}}^c)) + {W_1}({W_0}(F_{\max }^c)))\\[-12pt] \end{split} $ | (4) |
空间注意力目标是在哪个位置的信息部分, 是通道注意力的补充. 得到的通道注意力Mc沿通道轴上应用平均池化和最大池化操作, 生成的有效特征向量经过卷积操作和Sigmoid激活之后得到空间注意力Ms. 计算公式为:
$ \begin{split} {M_s}(F) &= \sigma ({f^{7 \times 7}}([AvgPool(F);MaxPool(F)])) \\ &= \sigma ({f^{7 \times 7}}([F_{{\rm{avg}}}^s;F_{\max }^s])) \end{split} $ | (5) |
本文将注意力机制添加到特征融合结构中.
3.3 改进损失函数YOLOX网络模型中边界框回归损失函数选择为IoU loss或者GIoU loss. GIoU loss定义如下:
$ GIoU = IoU - \frac{{\left| {C - (A \cup B)} \right|}}{{\left| C \right|}} $ | (6) |
GIoU loss使用相交尺度衡量方式, C是包含A和B的最小矩形框, IoU=0时, A和B距离很远, GIoU趋于–1, 解决了边界框不重合时造成损失函数不可导, 和两个预测框大小相同时IoU也相同, 出现IoU loss不能正确反映相交情况的问题. 但是如果出现多个大小相同的预测框在目标框内部时, 每个最小矩形框C相同, A与B并集也相同, 此时GIoU loss不能正确反映预测框的相交情况.
本文采用CIoU loss作为边界框的回归损失函数, 解决了GIoU退化为IoU的问题[16]. CIoU loss定义如下:
$\left\{ { \begin{split} & CIoU = 1 - IoU + \frac{{{\rho ^2}({b_1} + {b_2})}}{{{c^2}}} + \alpha v \\ & \alpha = \frac{v}{{(1 - IoU) + v}} \\ &v = \frac{4}{{{\pi ^2}}}{\left(\arctan \frac{{{w^{{b_1}}}}}{{{h^{{b_1}}}}} - \arctan \frac{{{w^{{b_2}}}}}{{{h^{{b_2}}}}}\right)^2} \end{split}} \right.$ | (7) |
其中, b1为预测框中心点, b2为目标框中心点, c是覆盖两个框的最小方框的对角线距离. CIoU loss中考虑了预测框与目标框中心点的欧式距离, 预测框在目标框的内部时, 预测框位置不同, 其中心点位置也不同, CIoU loss可以计算到.
如图4, GOHST模块的功能是对其中一个特征图通过更轻量化的操作生成另外的特征图, 可以认为两个相似的特征图是彼此的GHOST[17]. 具体操作是, 将普通卷积层分为两部分. 第1部分仍是普通的卷积层, 但是减少原本设置的卷积的通道数量, 生成输入特征层的特征浓缩图. 第2部分对这些特征浓缩图进行深度可分离卷积生成更多特征图. 在不更改输出特征图大小的情况下, 与使用普通卷积神经网络生成所有特征图的运算量相比, GHOST模块中运算所需的参数总数和计算复杂度大幅降低.
使用原始卷积神经网络时, 给定输入数据X∈RL×H×W, L表示输入通道个数, H和W是输入数据的高度和宽度; 输出数据Y∈RM×H'×W', M是输出通道个数, H'和W'是输出数据的高度和宽度; f∈RL×k×k×M是这一层的卷积核, k×k是卷积核的大小. 用于生成特征图的卷积运算表示为(为表示方便, 省略偏差项):
$ Y = f \times X $ |
$ \left[ {\begin{array}{*{20}{c}} {{y_1}} \\ {{y_2}} \\ {\begin{array}{*{20}{c}} \vdots \end{array}} \\ {{y_M}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {{f_{11}}}&{{f_{12}}}& \cdots &{{f_{1L}}} \\ {{f_{21}}}&{{f_{22}}}& \cdots &{{f_{2L}}} \\ \vdots & \vdots & \ddots & \vdots \\ {{f_{M1}}}&{{f_{M2}}}& \cdots &{{f_{ML}}} \end{array}} \right]\left[ {\begin{array}{*{20}{c}} {{x_1}} \\ {{x_2}} \\ \vdots \\ {{x_L}} \end{array}} \right] $ | (8) |
GHOST模块操作是, 首先通过一次卷积生成m个原始特征图Y'∈Rm×h'×w', m≤M. f'∈RL×k×k×m是使用的卷积核, 其他超参数和原始普通卷积保持一致. 计算公式为:
$ {Y'} = {f'} \times X $ | (9) |
原始特征图能提供大部分的特征信息, 对原始特征图应用运算得到GHOST特征图. 计算公式为:
$ y''_{ij}= \phi {}_{ij}(y'_i), \; \forall i = 1, 2, \cdots , m, \; j = 1, 2, \cdots , s $ | (10) |
其中, y'i是Y'中的第i个原始特征图, Φij是对第i个原始特征图进行第j个线性运算, 得到第j个GHOST特征图
$ Y''_{ij}= [{y_{11}}, {y_{12}}, \cdots , {y_{ms}}] $ | (11) |
在本文中, GHOST模块添加到Bottleneck模块中代替1×1和3×3普通卷积, m=M/2, j=1, Φi是m通道上3×3卷积核, 通过m个原始特征图得到m个GHOST特征图, 最后把原始特征图和GHOST特征图拼接得到输出特征图.
3.5 Enhance featureEnhance feature结构利用多分支扩张卷积增加模型的感受野(reception field), 学习每个特征图中的不同接收域, 从而提高多尺度目标检测识别的精度[18]. 结构如图5.
多分支卷积层通过扩展卷积为输入特征图提供不同大小的接收域, 然后将接收的信息融合相加, 得到丰富特征信息的特征图. 多分支卷积层由扩张卷积层、BN层和ReLU激活层组成. 3个并行分支的扩张卷积卷积核为3×3, 扩张速率分别为1、3、5. 具体网络结构如图6.
4 实验 4.1 实验平台
本文实验环境是Ubuntu 18.04.5系统, 64 GB内存, CPU: E5-1650 V3 @3.5 GHz, RTX2080TI显卡, 在PyTorch 1.8.1、CUDA 10.2下测试.
4.2 数据集本文的数据来源于西安市内多条道路, 在道路不同位置高点使用高清摄像头拍摄获得, 模拟多种位置摄像机的拍摄角度. 数据集中的图片经过数据增强处理, 模拟恶劣天气下的车辆检测情况, 增强后的天气效果如图7所示.
数据图片整理后使用labelimg对图片中的车辆进行标注, 标注car标签15395个, bus标签1432个. 标注内容包含目标物体的类别和目标框的坐标, 标注信息存放在XML格式文件中.
4.3 训练设置为了保证实验数据的可靠性, 训练最大轮次(epoch)设置为300次, 前50次为冻结主干网络参数训练, 初始学习率设置为1E–3, 后250次为解冻主干网络训练, 初始学习率设置为1E–4.
4.4 衡量指标本文选用mAP@0.5、视频帧率FPS作为模型评估指标, mAP@0.5评价指标与混淆矩阵(confusion matrix)、精确率、召回率有关. 测试结果可划分为TP、TN、FP、FN. 划分方式如表1. 精确率(precision, P)衡量算法错检程度, 定义为所有预测值为正样本的目标中真实值为正样本的样本比例:
$ P = \frac{{TP}}{{TP + FP}} $ | (12) |
召回率(recall, R)衡量算法漏检程度, 定义为真实值为正样本的目标中预测值为正样本的样本比例:
$ R = \frac{{TP}}{{TP + FN}} $ | (13) |
AP@0.5定义为混淆矩阵IoU阈值取0.5时, 对其中一类的n个正样本的P值求平均计算, 计算公式是:
$ AP = \frac{1}{n}\sum {_{i = 1}^n{P_i}} $ | (14) |
mAP@0.5为N类的AP@0.5求均值, 计算公式为:
$ mAP = \frac{{\displaystyle \sum {AP} }}{N} $ | (15) |
为了分析本文提出的改进方法对YOLOX算法性能的影响, 分4次实验验证不同改进方法的效果, 测试结果如表2所示, “×”代表在算法模型中没有使用对应的改进方法, “√”代表在算法模型中使用了对应的改进方法. 由表中数据可以看到, 使用GHOST结构代替Bottleneck中的卷积结构, 可以保证在mAP有略微提升的同时减小了一定的模型参数量, 也略微提升了FPS值. 边界框回归的损失函数改进为CIoU_loss, 解决目标框与预测框重合情况下GIoU退化为IoU的问题, 提高模型边界框的定位精度. 如图8可以看到, 使用CIoU_loss, 使得训练前期损失值很快下降, 但在训练20轮左右后, 损失值下降趋于稳定, 在训练50轮后又缓慢下降, 最终损失值低于未使用CIoU_loss的网络模型. 在为网络添加CBAM注意力机制时, 实验过多个位置, 例如时将CBAM注意力添加到主干网络、SPP结构中, 多次实验证明在特征融合结构中添加注意力机制效果最好. CBAM告诉模型分别在通道和空间维度上学习关注什么、在哪里关注, 关注重要特征并抑制不重要特征, 车辆检测任务较依赖位置信息, 所以添加注意力机制能够实现更好的检测效果. 测试数据表明, 添加注意力机制后, 对bus较大型的目标检测率有0.69%的提升, 而对car小目标车辆的提升为0.12%.
Enhance feature结构使用不同速率扩张卷积的多分支结构实现更大的感受野, 用来获取多尺度物体信息, 使网络能够学习到每个特征图中不同的接收域信息, 提高了模型特征提取能力和特征融合能力. 测试结果表明, 增加Enhance feature结构, 使得bus目标检测率提高了1.87%, car目标检测率提高了0.93%, 但是此结构增加了算法模型的参数量, 减慢了一定的运行速度.
图9给出了不同改进模型检测效果图, 检测结果中可以看出, 改进后的YOLOX检测图中, 目标检测框的位置标记更能准确地包括到整个车辆; 检测到原始YOLOX算法漏检到的车辆.
5 结论对于监控视角下的车辆检测问题, 本文基于YOLOX模型, 提出一种改进的YOLOX网络结构, 采用GHOST模型代替部分卷积, 减少一定参数量同时提升mAP; 结合CBAM注意力模块和特征增强结构对特征融合结构改进, 较大幅度提高了网络性能; 使用CIoU_loss作为回归损失函数, 提高回归精度. 实验证明, 改进后的网络模型能实现高精度的检测, 并且检测速度能满足使用, 在智能交通系统中可以提供有效且及时的交通信息. 由于智能交通系统对于传输速度、延迟性等的要求, 下一步改进在保证目标检测高准确度的基础上, 减小网络结构, 提高传输速度.
[1] |
艾峰. 城市智能交通系统的发展现状与趋势. 智能城市, 2021, 7(20): 141. DOI:10.19301/j.cnki.zncs.2021.20.065 |
[2] |
潘黎琼, 刘翔. 人工智能技术在城市智能交通系统中的应用. 信息记录材料, 2021, 22(10): 136-137. DOI:10.16009/j.cnki.cn13-1295/tq.2021.10.065 |
[3] |
李坤坤, 刘正熙, 熊运余. 基于深度学习的目标检测系统性文献综述. 现代计算机, 2021(16): 98-102, 117. |
[4] |
Girshick R. Fast R-CNN. Proceedings of the 2015 IEEE International Conference on Computer Vision. Santiago: IEEE, 2015. 1440–1448.
|
[5] |
Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection. 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas: IEEE, 2016. 779–788.
|
[6] |
Liu W, Anguelov D, Erhan D, et al. SSD: Single shot MultiBox detector. Proceedings of the 14th European Conference on Computer Vision. Amsterdam: Springer, 2016. 21–37.
|
[7] |
Redmon J, Farhadi A. YOLO9000: Better, faster, stronger. Proceedings of the 2017 IEEE Conference on Computer Vision and Pattern Recognition. Honolulu: IEEE, 2017. 6517–6525.
|
[8] |
Redmon J, Farhadi A. YOLOv3: An incremental improvement. arXiv:1804.02767, 2018.
|
[9] |
Bochkovskiy A, Wang CY, Liao HYM. YOLOv4: Optimal speed and accuracy of object detection. arXiv:2004.10934v1, 2020.
|
[10] |
Ge Z, Liu ST, Wang F, et al. YOLOX: Exceeding YOLO series in 2021. arXiv:2107.08430, 2021.
|
[11] |
Lin TY, Dollár P, Girshick R, et al. Feature pyramid networks for object detection. Proceedings of 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Honolulu: IEEE, 2017. 936–944.
|
[12] |
Woo S, Hwang S, Kweon IS. StairNet: Top-down semantic aggregation for accurate one shot detection. Proceedings of 2018 IEEE Winter Conference on Applications of Computer Vision. Lake Tahoe: IEEE, 2018. 1093–1102.
|
[13] |
Li HC, Xiong PF, An J, et al. Pyramid attention network for semantic segmentation. Proceedings of British Machine Vision Conference 2018. Newcastle: BMVA Press, 2018. 285.
|
[14] |
Woo S, Park J, Lee JY, et al. CBAM: Convolutional block attention module. Proceedings of the 15th European Conference on Computer Vision. Munich: Springer, 2018. 3–19.
|
[15] |
Zhang ZX, Wang MW. Convolutional neural network with convolutional block attention module for finger vein recognition. arXiv:2202.06673, 2022.
|
[16] |
Zheng ZH, Wang P, Ren DW, et al. Enhancing geometric factors in model learning and inference for object detection and instance segmentation. IEEE Transactions on Cybernetics, 2022, 52(8): 8574-8586. DOI:10.1109/TCYB.2021.3095305 |
[17] |
Han K, Wang YH, Tian Q, et al. GhostNet: More features from cheap operations. 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Seattle: IEEE, 2020. 1577–1586.
|
[18] |
Wang JF, Chen Y, Gao MY, et al. Improved YOLOv5 network for real-time multi-scale traffic sign detection. arXiv:2112.08782, 2021.
|