随着经济高速全面发展, 我国对交通运输的需求越来越大, 轨道交通由于其便捷和运量大的特性, 在我国交通运输中的地位愈为重要. 自2011年“四横四纵”高速铁路干线陆续建成通车以来, 我国铁路运输的速度和运输总量实现了质的突破. 铁路运输生产力的高速发展, 对铁路行车的安全保障提出了更高的要求. 确保机车的平稳运行已成为铁路运输部门的重中之重, 提高铁路机务部门对机车运行安全的监控水平也成为当务之急.
铁路安全是一个复杂的系统工程, 由铁路运输生产人员、铁路设备和铁路环境这3部分所组成. 随着科技的发展, 车辆设备和铁路环境都有了较大的发展进步, 铁路运输生产人员逐渐成为提高铁路行车安全的重要因素. 因此对系统中的人加强监管就显得极为重要.
司机行为识别是目标检测的一个重要的应用场景. 在行车途中, 司机的驾驶行为是否符合安全规范直接关系到全车人的人身安全,所以对司机进行视频监控是一项重要的安防措施. 现有的行为分析以人工挑选分析LKJ中保存的视频数据为主, 抽样不均匀、分析质量不高等问题突出, 且只用于司机的绩效评定. 实现实时自动分析以及预判的安全驾驶监督系统已经成为铁路行业的迫切需求.
安全驾驶监督系统离不开目标检测技术的发展. 自2012年深度学习问世以来, 其在图像识别中表现出了极佳的效果, 并逐渐取代了传统特征机器学习的地位. 在目标检测领域, 一批高精度的算法不断刷新了识别精度的上线, 并逐渐为工业界所使用. 然而, 当前国内外大多数智能司机行为识别集中于汽车行业, 由于汽车内部狭小, 驾驶员人脸和手部等有明确的特征, 可以达到实时行为识别的目标[1-4]. 而对于机车来说, 现有的系统一般搭载于昂贵的远程大型服务器上, 只能在列车运行结束后收集运行保存的监控视频检测, 无法实现实时和随车检测, 只能进行司机非安全行为发生后的追查和定责.
因此, 采用一种低成本, 可随车一起运行的嵌入式设备, 在其上部署可以实时运行的监控系统, 以便实时传回违章信息便成为一项极有意义的工作. 为解决实时、高精度检测司机安全驾驶监督的问题, 本文选择玩手机这种较为难以肉眼识别的行为为例, 对目标检测中检测速度较快的YOLOv3-tiny[5,6]算法进行了加速, 最终将其成功的部署在了计算能力较低的嵌入式设备上部署, 实现了较高精度下实时运行的目的.
1 实验数据 1.1 实验数据采集为能够确保数据的多样性, 本文采集多个铁路局机务段货车及客车的驾驶室原始视频数据, 标记其中出现手机的图片共5491张. 标注, 从中随机选择4919张图片(含5890个手机对象)作为训练集, 剩余的572张图片(含892个手机对象)作为验证集, 如表1所示.
1.2 数据增强与标注
为了对抗过拟合、提高样本多样性和图片质量, 在数据集较少的情况下对数据进行增强, 采用双边滤波、随机水平镜像翻转、随机亮度改变和0°~10°随机角度旋转对数据集进行扩增, 采用LabelImg进行人工画框标注, 只标注被遮挡面积比小于0.5的手机图片以确保精确性, 如图1所示.
2 加速目标检测网络 2.1 YOLO算法原理
为实现在线实时高精度检测, 本文选取精度较高同时推理速度较快的YOLOv3作为基础网络. YOLOv3是一种one-stage(单阶段)的目标检测深度学习算法, 其集精确的和推理的快速性于一身, 自其提出至今, 在工业界已有了广泛的应用[7-10].YOLOv3在Coco和Pascal-voc等开源数据集上均有不俗的表现, 其速度和精准度在相同输入大小的情况下均优于SSD[11]、faster-RCNN[12]等主流算法, 尤其是YOLOv3-tiny网络以其非常快的检测速度、较少的参数总量在嵌入式领域和边缘计算受到亲睐. YOLOv3主要包含以下3种网络, 如表2所示.
表2中精度一栏是在Coco测试数据集上得到的精度, 检测速度一栏是在嵌入式设备jetson Nano中测试得到. 可见虽然YOLOv3和YOLOv3-spp网络的精度较高, 但由于其复杂的网络在计算量受限的嵌入式设备很难达成实时运行的目标. 决定网络运行消耗的时间由模型在每一层计算所耗时间和前后网络层参数传递所耗时间决定, YOLOv3和YOLOv3-spp较深的网络层数使得运行需要在完成上一层网络推理之后才能传入到下一层网络进行推理, 对于嵌入式这种并行处理能力差的设备来说, 如非直接缩减网络的层数, 则仅对每层的参数进行半精度优化和剪枝也无法缩减网络在前后传递中浪费的时间. 而YOLOv3-tiny的网络层数较少, 主要运行时间消耗在网络每一层计算中, 这就为优化提够了条件. 尽管精度仅为YOLOv3的一半, 但由于文中针对的是单一司机违章行为目标的目标检测而非coco数据集中80个类别的目标检测任务, YOLOv3-tiny针对此类任务仍有较好的性能和向下优化的空间, 如下文中的实验所证. 此外, YOLOv3-tiny在占用硬盘空间和运行内存均处于优势. 因此, 我们选用YOLOv3-tiny算法作为实现实时违章检测的主干网络.
YOLOv3-tiny网络结构如图2所示. 与双阶段目标检测算法, 如faster-RCNN等网络不同的是, 在输入图片经过主体网络推理后, YOLOv3网络直接通过3个不同尺度(13×13, 26×26, 52×52)的输出通道直接得到包含目标框坐标、目标置信度和目标框内物体分类在内的特征图, 最后经过非极大值抑制算法(nms)去掉重复目标后得到最终输出结果. 而YOLOv3-tiny为了节省计算量, 只在两个尺度上输出特征图, 分别为[B, 3×(4+1+C), 13, 13]和[B, 3×(4+1+C), 26, 26], 其中B为每次载入图片的数量, 3×(4+1+C)为输出特征图的通道数, C为每一类的概率, 3×(4+1+C)代表特征图上每个1×1的点对三个anchor(锚定框)进行目标框的回归, 以此增强对不同大小物体的识别, 如图3所示.
2.2 模型剪枝深度学习通过众多的参数计算推理得到预测结果, 其中有相当多的参数都是冗余且对预测结果无影响的. 当模型训练时, 原始网络需要一个足够大的参数空间以充分的寻找最优解. 但当模型训练完之后, 我们只需要保留最优的参数也一样可以达到和原参数空间一样的效果. 我们可以把剪枝视为在原有模型构成的参数空间里中搜寻了一条最有价值的计算路径[13], 这样模型的精度不会降低, 而使模型运行的更有效率, 这就是进行模型剪枝的意义. 本文采用模型剪枝的方法对训练后模型进行保持原精度情况下计算量和参数总量的缩减. 模型剪枝可以根据细粒度和粗粒度分为权重剪枝和通道剪枝两类, 通道剪枝方法由于其独有的简单、可行性、总计算量较小和不需要特殊的硬件库的优势, 在近几年得到了相当迅速的发展, 并已实际应用于一些工程中[14-16]. 通道剪枝本质上从通道这一层面上对卷积层中的卷积核的重要性进行区分, 去除对网络输出结果影响小的卷积核, 以此实现计算总量和模型体积的缩小.
我们采用了对Batch Normalization层(批标准化层, 下称为BN层)进行L1惩罚的方式进行通道剪枝. 在神经网络的计算中, BN层实际上进行了两步运算, 如式(1)所示: (1)对输入特征图所有参数规整到均值为0, 方差为1的正态分布范围内. (2)让每个规整后所有参数在训练过程中学习到对应的两个调节因子γ和β, 对标准化后的值进行微调, 使之更适于梯度下降.
$\left\{ \begin{aligned} & \tau = \frac{{{a_i} - u}}{{{\sigma _i}}} \\ & a_i^{norm} = {\gamma _i} \cdot \tau + {\beta _i} \end{aligned} \right.$ | (1) |
其中, ai代表输入的每个通道的特征图, 为Bl×Hl×Wl; u, σi分别是均值和方差; γi和βi是每个通道特征图所对应的两个调节因子. 实际上, γ可以视为BN层特征图每一通道的权重, 如果当前输入的通道Ci对应的权重γi出现γi=0或γi≈0的情况, 那么就会有γi×τ=0, 特征图对应的输出通道即全为常数0, 不会再对接下来的运算产生影响. 因此, 我们可以利用BN层中的缩放因子γ衡量特征图每个通道的重要性, 当γi=0或者γi≈0时, 即可剪去γi对应特征图的通道, 最终剪去γ=0对应的上下卷积层的卷积核, 以此完成减少计算量和缩小模型体积的任务, 如图4所示.
然而, 一般训练之后神经网络中的γ值通常呈正态分布, 并不会有很多参数等于或者靠近0. 因此, 我们需要在训练网络的同时减小γ, 这被称之为稀疏化训练. 通常使用L1次梯度法稀疏每个BN层的γ值, 如式(2)所示.
${\gamma _{l + 1}} = (|{\gamma _l} - u\nabla l| - \eta ) \cdot {{sgn}} ({\gamma _l} - u\nabla l)$ | (2) |
其中, u代表损失函数的学习率;
TensoRT是NVIDIA为深度学习的高速推理需求所推出的一个高性能深度学习推理平台. 它包括深度学习推理优化器和运行器, 可为深度学习推理应用提供INT8和FP16(半精度)优化, 例如视频、语音识别、推荐系统和自然语言处理等. 在深度学习的部署中, 降低精度推断可显着减少应用程序延迟, 这是许多实时服务, 自动和嵌入式应用程序的要求.
在搭建TensorRT加速引擎时, 需要将原模型转化为TensorRT可以读取的形式, 如caffe、onnx的模型结构. TensorRT自带的接口NvcaffeParser提供了Caffe结构模型中卷积层、激活层和池化层等常见层的接口, 而YOLOv3-tiny中的Upsample层(上采样层)及YOLO层(检测层)需要自行编写后自定义插入. Upsample层实现了数据图H, W方向上的调整, 放大输入的特征图以适应联结、矩阵加法等操作, 常见的Upsample方法有线性插值、最近邻值等. YOLO层实现了从特征图中挑选置信度(confidence)大于预设值的目标输出的目的, 并将挑选出的特征与锚定框大小计算回归出目标框真实位置和长宽值. 本文将最近邻值的Upsample层和YOLO层添加到了TensorRT加速引擎中.
TensorRT通过实现模型简化和半精度对模型进行加速, 其中模型简化通过整合卷积层、激活层和BN层为CBR层实现; 半精度加速通过在平台支持的情况下, 将数据精度需求从32位float (浮点数)降低为16位float, 可极大的提升计算效率.
2.4 总体流程我们提出的算法总体流程如下: (1)首先进行稀疏训练, 在训练模型的同时使BN层γ因子尽可能地收缩; (2)当稀疏训练完成时, 执行修剪以移除冗余参数; (3)微调修剪后的模型以获得最终模型; (4)搭建TensorRT推理加速引擎, 编写自定义层; (5)将模型读入TensorRT加速引擎中, 部署在嵌入式设备上. 训练流程图如图5所示.
3 实验结果与分析
本文使用了Pytorch框架完成YOLO算法的搭建, 主要训练硬件设备为: ①处理器: Intel 9400f; ②GPU显卡: RTX2070 8G. 操作系统为Ubuntu16.04, python环境为python3.6.8. 部署嵌入式平台为较为廉价、适于工业部署的NVIDIA Jetson Nano, 如图6所示. Jetson Nano是NVIDIA公司2019年新推出的嵌入式高性能开发板, 其采用NVIDIA Maxwell™架构, 配备128个CUDA核心, 内存为4 GB, 搭载的运行环境为JetPack 4.2.
为提高显存利用率, 增加batch size(批大小), 采用了NVIDIA的apex技术进行混合精度训练. 选取准确率P (precision)、召回率R (recall)、平均精确率均值mAP (mean Average Precision)、F1值、检测速度和参数总量作为评价准则. 其中, precision指的是被正确检测出的物体占总被检测出的物体的比例, recall指被正确检测出的物体占验证集中所有物体的比例. precision和recall一般情况下是成反比关系, 即recall越大, precision越小, 反之同理. 而mAP为目标检测任务中最重要的指标, 决定了检测的效果. mAP一般通过改变检测时置信度(confidence)阈值得到Precision-recall曲线, 计算Precision-recall曲线的面积得到mAP值. 为了在计算机中更快速精确的求mAP的大小, 通常使用插值近似的方法, 如式(3)所示.
$mAP = \frac{1}{n}\sum\limits_{i = 1}^n {\int_0^1 {P(r)dr \approx \frac{1}{n}\sum\limits_{i = 1}^n {\sum\limits_{k = 1}^M {{P_{inperp(k)}}\Delta r(k)} } } } $ | (3) |
本文同时以正常训练模式和稀疏化训练模式训练了两个YOLOv3-tiny模型, 设置稀疏训练超参数η=1e–4进行训练. 表3展示了YOLOv3-tiny网络稀疏化训练后的各项指标, 可见稀疏化训练后的各项指标均处于相当优秀的水平, 0.965的mAP保证了高精度检测的目的, 甚至要高于正常训练, 这是因为稀疏化训练也可以视为进行了L1正则化, 降低了模型对训练数据的过拟合. 图7显现了稀疏化训练后γ系数的稀疏化水平. YOLOv3-tiny网络共有11层BN层, 这11层BN层共有4512个γ系数, 40%的γ参数的绝对值下降到0值附近, 满足进行剪枝的条件. 随后进行剪枝并进行微调.
表4展示了剪枝后各个卷积层变化情况, 剪枝后的模型各卷积层通道大小由之前的2的n次方数变为不再有规律可循, 这便是非结构剪枝在现有模型中搜寻了一条最为有效的计算路径的结果.
表5展示了剪枝后并微调后改进模型(下文称为Prune-YOLOv3-tiny)在Jetson Nano上的表现. 可见在微调后, Prune-YOLOv3-tiny模型的精度略有上升, 而在检测速度相较原模型提高了76.5%, 计算总量降低为原模型的43.2%, 在参数总量上降低为原模型的31.4%. 尽管只有40%的γ参数被剪去, 模型参数总量依然下降很大. 由表4可见, Conv1、Conv2、Conv3等参数较少的卷积层被剪去的较少, 而如Conv6、Conv7、Conv8等参数较多的卷积层剪去的参数较多, 参数最多的Conv7有高于一半的参数被剪去, 这是剪枝后模型参数总量要更少的原因. 而对于计算复杂度, 参数最多的Conv7层并非是计算量最大的层, 考虑计算量需要综合每层输入输出的特征图大小. 对YOLOv3-tiny模型来说, Conv6是模型计算量最大的层并没有如Conv7一样被剪去一半以上, 这是计算总量的缩小程度低于参数总量的原因.
随后, 将原YOLOv3-tiny模型加载到搭建好的TensorRT加速引擎中以生成半精度加速的模型. 表6展现了YOLOv3-tiny模型在TensorRT加速引擎中的效果. 相较于原模型, TensorRT加速的半精度模型的精度没有变化, 检测速度提高52.9%, 而参数总量没有明显下降.
最后, 我们将Prune-YOLOv3-tiny模型加载到搭建好的TensorRT加速引擎中完成最终的加速模型(下文称为最终模型), 表7展现了最终模型的效果评估. 经过模型剪枝和半精度加速的最终模型相较于原模型精度没有下降, 检测速度提高了117.6%, 而在参数总量上降低为原模型的39.5%. 图8展示了最终模型的识别效果.
4 结语
在这项工作中, 我们成功的对目标检测中经典的深度学习神经网络YOLOv3-tiny进行了通道剪枝和半精度加速, 在精度不变的情况下减少了改进后神经网络的计算总量和参数总数. 我们在计算能力较低的嵌入式设备上成功部署了剪枝后的模型. 所提出的模型在嵌入式设备可以达到37帧每秒的检测速度,与现有模型相比, 我们的模型除了需要在稀疏化训练中增加一个η超参数外, 在速度和体积上均占有优势, 而精确率、召回率和平均精确率均值不变, 实现了高精度下实时检测的目的.
[1] |
宫法明. 交通驾驶员脸疲劳驾驶行为优化图像识别. 计算机仿真, 2015, 32(11): 199-202. DOI:10.3969/j.issn.1006-9348.2015.11.045 |
[2] |
杨林川. 基于深度神经网络的司机行为识别技术研究与实现[硕士学位论文]. 成都: 电子科技大学, 2018.
|
[3] |
李俊俊, 杨华民, 张澍裕, 等. 基于神经网络融合的司机违规行为识别. 计算机应用与软件, 2018, 35(12): 228-233, 325. |
[4] |
黄占鳌, 史晋芳. 多特征融合的驾驶员疲劳检测研究. 机械科学与技术, 2018, 37(11): 1750-1754. |
[5] |
Redmon J, Divvala SK, Girshick R B, et al. You only look once: unified, real-time object detection. 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV, USA. 2016. 779–788.
|
[6] |
Kim DH. Evaluation of COCO validation 2017 dataset with YOLOv3. Evaluation, 2019, 6(7): 10356-10360. |
[7] |
黎洲, 黄妙华. 基于YOLO_v2模型的车辆实时检测. 中国机械工程, 2018, 29(15): 1869-1874. DOI:10.3969/j.issn.1004-132X.2018.15.015 |
[8] |
薛月菊, 黄宁, 涂淑琴, 等. 未成熟芒果的改进YOLOv2识别方法. 农业工程学报, 2018, 34(7): 137-179. DOI:10.11975/j.issn.1002-6819.2018.07.018 |
[9] |
张富凯, 杨峰, 李策. 基于改进YOLOv3的快速车辆检测方法. 计算机工程与应用, 2019, 55(2): 12-20. DOI:10.3778/j.issn.1002-8331.1810-0333 |
[10] |
刘军, 后士浩, 张凯, 等. 基于增强Tiny YOLOV3算法的车辆实时检测与跟踪. 农业工程学报, 2019, 35(8): 118-125. DOI:10.11975/j.issn.1002-6819.2019.08.014 |
[11] |
Liu W, Anguelov D, Erhan D, et al. SSD: Single shot multiBox detector. European Conference on Computer Vision. Berlin, Germany. 2016. 21–37.
|
[12] |
Girshick RB. Fast R-CNN. 2015 IEEE International Conference on Computer Vision. Santiago, Chile. 2015. 1440–1448.
|
[13] |
Liu Z, Sun MJ, Zhou TH, et al. Rethinking the value of network pruning. International Conference on Learning Representations. New Orleans, LA, USA. 2019. 1–11.
|
[14] |
He YH, Lin JJ, Liu ZR, et al. AMC: AutoML for model compression and acceleration on mobile devices. European Conference on Computer Vision. Berlin, Germany. 2018. 815–832.
|
[15] |
Liu Z, Li JG, Shen ZQ, et al. Learning efficient convolutional networks through network slimming. 2017 IEEE International Conference on Computer Vision (ICCV). Venice, Italy. 2017. 2755–2763.
|
[16] |
Ye JB, Lu X, Lin Z, et al. Rethinking the smaller-norm-lessinformative assumption in channel pruning of convolution layers. International Conference on Learning Representations. Vancouver, BC, Canada. 2018. 1–13.
|