常飞翔 刘元盛 李中道 路铭 张军
(北京联合大学,北京市信息服务工程重点实验室,北京 100101)
主题词:红绿灯识别 YOLOv3 TX2平台 锚框 模型压缩
利用图像处理技术对红绿灯进行实时检测是无人驾驶技术的研究热点。目前,该检测方法分为2 类,即基于模型的方法和基于学习的方法。对于前者,已经开展了大量的研究工作并提出了许多方法:Chen等[1]利用色彩空间HSI(Horizontal Situation Indicator)和方向梯度直方图(Histogram of Oriented Gradients,HOG)特征对红绿灯进行检测;Shi等[2]采用背景抑制算法和颜色直方图信息对红绿灯进行检测;Tran 等[3]采用基于颜色密度的识别算法完成红绿灯目标检测;Haltako等[4]采用语义分割以及颜色特征分类器完成红绿灯目标分类;宋永超等[5]提出了一种基于色度方向角的离线红绿灯检测算法。
随着人工智能技术的不断进步,基于学习的方法也被应用到了红绿灯检测中:Wang等[6]采用双通道机制和深度神经网络完成了红绿灯检测;V.John等[7]提出了一种结合显著图的深度学习红绿灯检测方法。
使用基于模型的检测方法在复杂背景下存在抗干扰性差、精度低等缺点,而基于学习的方法中使用例如快速区域卷积神经网络[8]两阶段网络结构的学习方法实现的目标检测算法存在实时性差等问题。为解决以上问题,以单阶段网络结构为特点的YOLOv3[9]目标检测算法在精度和速度方面做了很好的平衡。但在园区无人驾驶场景应用中,由于车载电脑小型化,以及园区红绿灯位置不确定性及其样式非标准性,常规YOLOv3算法将面临模型加载时间长、检测速度慢以及准确率低的问题。为此,本文基于TX2嵌入式平台对YOLOv3算法在进行最优锚框尺度获取、裁减大尺度特征检测分支、模型剪枝压缩3 个方面的改进,同时设置离线检测与在线检测验证其正确性与可行性。
无人车在园区环境用嵌入式设备TX2 对移动式红绿灯进行检测时,采用传统YOLOv3算法存在以下问题:
a.YOLOv3 中锚框尺度是在COCO(Common Objects in Context)数据集下,利用K 均值聚类(KMeans)算法[10]进行维度聚类后得到的。由于COCO 数据集中某些类别,例如火车、大象等目标的长宽比与本文数据集相差很大,在锚框尺度预测过程中,使用YOLOv3原本的锚框尺度会降低目标检测的正确率。
b.园区非结构化道路中的红绿灯属于中小目标,利用YOLOv3大尺度特征图检测会影响检测速度。
c.嵌入式设备TX2利用YOLOv3检测模型进行目标检测时,模型加载时间长、检测速度低、内存消耗严重。
针对上述问题,本文从3个方面对YOLOv3进行改进。
在锚框尺度预测过程中,传统YOLOv3 算法使用K-Means算法获得锚框尺度的参数,对预测框的位置进行初始化,锚框尺度用像素值表示。K-Means算法在聚类效果上十分依赖聚类簇数量K的选择,随机选择的方式不一定会得到全局结果最优,影响聚类结果。
为了改善原有K-Means 算法的聚类效果,使用KMeans++[11]算法进行改进,聚类原则为尽量使每个聚类中心的欧式距离最大,而非随机产生。具体步骤为:
a.确定K,从输入的数据点集合中随机选择一个数据点作为第1个聚类中心C1;
b.计算剩余样本与当前最近一个聚类中心的距离D(x),D(x)越大,表示被选取作为聚类中心的概率越大,概率p(x)的计算方式为:
式中,x为数据集中的样本点;X为整体样本点的集合。
c.使用轮盘法选出下一个聚类中心;
d.重复b、c,直至选出K个聚类中心[C1,C2,…,Ck];
e.计算数据集中的点的向量与挑选出的质心向量之间的欧氏距离,并将每个点划分至与其距离最近的质心簇中,计算方式为:
式中,li为质心所属类别;xi为数据集中剩余的数据点对应的向量;μj为已经挑选出的质心对应的向量。
f.所有数据经过第1 轮迭代获得相应的类别后,重新计算每个聚类集合的质心,并将所有点的类别标记为距离最近的质心的类别。
不断重复该过程,算法结束条件为新计算出的质心与原质心的距离小于设置阈值。针对本文数据集,设K-Means++算法中聚类簇数量为K=9个时,锚框尺度聚类精度可达88.68%,9个锚框尺度分别为(12,64)、(8,45)、(9,49)、(5,28)、(15,78)、(6,33)、(7,39)、(19,102)、(10,54)。
在YOLOv3 算法的3 次不同尺度的检测中,不同的特征图对应不同的感受野:13×13 的特征图感受野最大,适用于大目标物体检测,当网络的输入图片分辨率参数为416×416 时,每个网格的3 个锚框尺度分别为(116,90)、(156,198)、(373,326);26×26 的特征图感受野适用于中等物体的检测,锚框尺度为(30,61)、(62,45)、(59,119);52×52 的特征图感受野最小,适用于小目标检测,锚框尺度为(10,13)、(16,30)、(33,23)。针对本文的应用场景,红绿灯目标属于中小目标,采用大尺度特征检测一般不起作用,反而会增加计算量,所以对YOLOv3 算法的网络结构的大尺度特征检测进行裁减,裁减后的网络结构如图1所示,网络结构主要包括3个部分,即图片输入、基础网络以及网络的2个多尺度检测分支YOLO-2、YOLO-3。只保留了26×26×24、52×52×24 2 个输出维度,分别对应YOLO-2和YOLO-3,去掉YOLO-1的大尺度特征检测分支(见图1),即可在准确识别中小目标的同时,加快检测速率,满足无人车实时性检测的要求。
图1 修改后的网络结构
YOLOv3 采用的骨架网络为Darknet-53,53 层的网络结构使得模型精度大幅度提升,但是模型的参数量也随之增多,训练得到的模型参数量约为260 MB。目前无人车使用的车载计算单元正逐步向体积小、耗能低以及成本更低的嵌入式设备发展,嵌入式设备TX2与计算机GPU平台在性能上有较大差异。
使用嵌入式设备TX2 执行目标检测时,存在模型加载时间长、对计算机内存消耗严重的问题。为解决以上问题,借鉴网络模型压缩的思想[12],对训练得到的检测模型进行压缩。
模型剪枝的基本流程主要包括模型稀疏训练、模型剪枝、模型微调3 个步骤。在稀疏化训练过程中,在YOLOv3的网络结构中,每个卷积层后都增加了批量归一化(Batch Normalization,BN)层,对通道进行归一化操作:
式中,γ、β为用于缩放和平移的参数;E为每一批训练数据的均值;Var为每一批训练数据的方差。
将BN 层的参数γ作为通道剪枝因子,经过卷积层计算得到的特征图大小为w×h×c,其中w、h分别为特征图的宽和高,c为特征图的通道数量。
模型在稀疏化的过程中需要训练BN 层的参数γ,并且引入L1 正则化[13],不断压缩γ的值。通过压缩,某些通道的γ趋于0,对于γ=0 的通道以及滤波器直接进行裁减,对于剩余的通道制定裁剪比例,去掉对应的通道以及滤波器,完成模型的裁剪。
完成模型剪枝操作后,网络卷积层的通道数量会变得混乱,导致模型检测精度有所下降,需对裁剪后的网络结构进行进一步调整,根据Darknet-53 网络结构特点,将残差结构作为基本单元结构进行修整,调整过程为:
式中,a为裁剪后每层滤波器的数量;x为修整后滤波器的数量。
对裁减后的模型进行网络结构的重新修正,然后通过模型微调的方式恢复部分重要的权值,减少剪枝操作对模型精度的损伤,就可以在保证模型性能的条件下,最大程度地压缩模型参数数量和运算量。
为了验证改进算法有效性和可行性,设计了离线数据测试和实际环境实时测试。在园区红绿灯检测领域中,目前没有开源的大型数据集,本文采用自制数据集。在北京联合大学校区内,在室外校园环境和地下车库室内共采集12 个地点,共采集图片3 000 张,其中,2 200 张图片作为训练数据集,另外800 张图片作为测试数据集,并在训练数据集中抽取220张图片作为验证数据集,部分数据集图像如图2所示。
图2 部分数据集图像
在离线数据测试中,设置了4组对比试验:验证KMeans++算法相对于K-Means 算法在本文数据集上聚类精度的优化;验证利用K-Means++算法得到的锚框尺度在本文数据集上目标检测精度的优化;裁减大尺度特征检测分支的YOLOv3 算法在目标检测速度上的优化;经模型剪枝的检测模型在精度和速度上的优化。
第1组试验中,利用K-Means++与K-Means算法在本文数据集上分别设置了1~9个聚类簇,不同聚类簇下二者聚类精度如图3所示,在本文数据集上,K-Means++算法聚类精度相对于K-Means算法提升了约2.1%。
图3 聚类精度对比
第2组试验中,将K-Means++算法在本文数据集上进行维度聚类后得到的锚框尺度应用在目标检测中,采用准确率、召回率评估检测模型的准确性。准确率为:
式中,P为准确率;Tp为模型正确检测到的目标数量;Fp为系统错误检测到的目标数量。
召回率R为:
式中,FN为系统错误检测以及漏检的数量。
为了更加客观地对模型性能进行评价,使用类别精度(Average Precision,AP)来表示模型对某一类别的检测精度,每一个类别都可以得到准确率与召回率的关系,即精确率-召回率(Precision Recall,PR)曲线,PR 曲线下的面积即对某一类别计算得到的类别精度。针对多个类别,使用平均精度(mean Average Precision,mAP)来表示模型的整体检测性能:
式中,N为类别数量;Apc为每一个类别的类别精度。
利用改进前的YOLOv3 算法和改进锚框尺度后的YOLOv3 算法对本文数据集进行测试,结果如表1 所示,2 种算法的PR 曲线如图4 所示。在超参数设置相同的情况下,改进锚框尺度后的YOLOv3 算法相比于YOLOv3算法平均精度提高了34百分点。
表1 改进前、后YOLOv3测试结果
第3 组试验中,裁减后的YOLOv3 算法的平均帧速率提高了13帧∕s,平均精度下降了0.8百分点,各类别的检测精度变化如表2 所示。精度下降是由于测试数据集中有近距离的红绿灯测试集,去掉大尺寸检测框虽然防止了大尺寸误判,也导致这些目标的漏判,但是在精度可比的情况下,检测速度大幅提升。
表2 裁剪大尺度特征检测前后对比
第4组试验中,通过对稀疏化训练后的检测模型进行通道剪枝,模型参数量缩减至11.9%,检测模型剪枝前、后和微调后的模型参数量以及模型加载时间变化情况如表3 所示。使用剪枝后的检测模型再次对本文数据集进行测试,平均精度下降了13百分点,模型加载时间缩短了4.5 s。模型检测精度下降是模型稀疏化训练导致的,通过对剪枝后的模型网络结构进行修整并通过模型微调降低剪枝对模型精度的影响,模型在微调过程中平均精度变化曲线如图5 所示,迭代150 次后,模型的平均精度为93%,虽然下降了5百分点,但在模型精确度可比的情况下,参数量大幅缩减,极大缩短了模型加载时间,减小了计算单元硬件资源压力。
表3 检测模型剪枝前后性能对比
图5 模型微调平均精度变化
本文在校园实际环境测试中,采用第四代小旋风智能车以及移动式红绿灯,如图6所示。车载电脑为嵌入式设备Jetson TX2,硬件配置为6 核CPU 架构,256 核Pascal架构的GPU核心,内存8 GB。
图6 试验平台
使用视频逐帧统计的方法对模型检测性能进行评价。为了验证模型的鲁棒性,分别在北京联合大学园区环境以及干扰条件下的地库环境随机选取了3 组不同的测试场景,检测正确率计算公式为:
式中,D为正确率;TD为模型正确检测出的视频帧总数量;TF为模型错误检测出以及漏检的视频帧总数量之和。
使用检测模型对园区红绿灯进行检测,选取园区3个随机测试场景和3个干扰测试场景,分别如图7、图8所示。其中园区场景和干扰场景的各类视频帧总数量以及检测结果如表4 所示,各类别的详细检测结果如图9 所示,从模型测试结果来看,园区环境中场景2 的检测率有所下降,这是由于摄像头受到了强光的影响。试验数据表明,园区测试场景下的平均测试精度为94.5%,在干扰环境下的平均测试精度为94.75%。
图7 园区测试结果
图8 干扰环境测试结果
表4 园区环境测试统计
图9 园区红绿灯类别检测结果
为了证明本文算法的泛化性,开展了实际道路中的交通红绿灯的测试工作,在10 km的道路测试中,共有2类交通灯,分别为十字路口的交通红绿灯和单行道行人路口交通红绿灯,部分测试结果如图10所示。
图10 实际道路红绿灯检测结果
在10 km的车程中,对道路出现的红绿灯共采集测试150帧图像数据,检测结果统计如表5所示,从模型对3种不同类型的红绿灯的检测结果来看,黄灯的检测正确率低于其他2 类的原因是黄灯数据集偏少,综合来看,模型对实际道路红绿灯的平均检测率为92.7%。
表5 实际道路红绿灯检测统计
本文基于嵌入式设备TX2,采用改进YOLOv3 算法完成无人车的园区红绿灯检测任务。首先针对YOLOv3原有的锚框尺度进行改进,使用K-Means++算法得到最优锚框尺度,使得模型的检测精度从64%提升至98%,通过裁减网络大尺度检测分支,帧速率从4帧∕s提高至19帧∕s。在无人车的实际测试中,对非结构化移动式红绿灯的识别正确率为94.75%,对实际道路的结构化红绿灯检测率为92.7%。通过对检测模型进行剪枝压缩,在精确度可比的情况下,模型的参数量缩小至原来的11.9%,模型加载时间缩短了4.5 s,极大地降低了硬件资源的消耗,可以满足无人车在嵌入式设备TX2下,完成园区红绿灯目标识别的任务。后续将继续优化模型剪枝策略,提高剪枝后模型的检测精度与速度。