基于改进YOLO算法的FSAC赛车实时目标检测系统
2020-10-19张代胜张南岳
李 涛, 张代胜, 张 飞, 张南岳
(合肥工业大学 汽车与交通工程学院,安徽 合肥 230009)
中国大学生无人驾驶方程式大赛(Formula Student Autonomous China,FSAC)要求各车队的本科生和研究生在1 a的时间内,设计、制造一辆符合赛事要求的纯电动方程式赛车,该赛车能够无人驾驶,并能自主完成动态比赛。
目标检测系统在无人驾驶方程式赛车环境感知系统中有着重要的作用,其主要作用是对赛道、障碍物和交通标志的检测等。近年来,主流的目标检测模型有基于滑动窗口检测的可变形部件模型(deformable part models,DPM)[1-2]、基于候选区域方法的R-CNN(regions with CNN features)等[3],但它们流程复杂、分离与检测速度较慢。目前,常用的实时目标检测算法是基于回归的YOLO(you only look once)和SSD(single shot detector)[4]等。其中,YOLO算法兼顾了高的检测精度和检测速度,是目前表现最优秀的目标检测算法[5]。
国内已有一些学者开始应用YOLO算法进行目标检测。文献[6]使用YOLO算法对交通监控中车辆进行实时检测;文献[7]通过调整候选边界框的比例,使得YOLO更加适用于行人检测;文献[8]通过借鉴DenseNet的思想,将密集卷积模块加入特征提取网络,提升了检测精度。然而上述方法对YOLO算法的改进无法适用于FSAC赛事特定场景:① 无法增强对小目标物的检测;② 深层和复杂的网络使得计算量增加,但对精确度的提升却不高;③ 对硬件要求提高,占用的赛车布置空间增加。
本文将YOLO算法应用在FSAC赛车的目标检测系统中,以YOLOv3-tiny算法为基础,提出一种基于改进YOLO算法的实时目标检测系统,适用于FSAC赛事特定场景。通过对原始YOLOv3-tiny算法的改进,根据数据集中真实边界框聚类选取初始边界框尺寸,构建了一种兼顾检测精度和检测速度的轻量化算法,以满足实时检测的需求,并且将系统搭载在嵌入式平台上,提升赛车整车布置和搭载的灵活性。
1 YOLO算法原理
1.1 检测原理
YOLO算法是一种基于回归的目标检测算法,其检测原理如图1所示。
图1 YOLO算法检测原理
YOLO算法将输入的待检测图片划分为S×S的网格,每个网格会预测B个初始边界框以及边界框的置信度C。置信度C的定义如下:
(1)
(2)
其中,bt为真实边界框;bp为预测边界框;A(bt∩bp)为真实边界框与预测边界框的交集;A(bt∪bp)为真实边界框与预测边界框的并集。
若边界框中存在目标物时,网格还会预测类别概率,用条件概率P(class|object)表示。测试时,将条件分类概率与边界框的置信度相乘,得到某一类别的置信度,即
(3)
1.2 YOLOv3-tiny算法介绍
YOLO算法目前已发展到第3个版本[9],最新的YOLOv3-tiny算法主要具有以下特点:
(1) 特征提取网络。YOLOv3-tiny特征提取网络并没有使用Darknet-53中的残差模块[10],而是使用较少的卷积层和池化层进行特征提取。这使得YOLOv3-tiny算法保持相对较高的检测速度,也有较高的准确率。
(2) 目标物的检测。YOLOv3-tiny沿用YOLO9000的方法[11],将维度聚类作为anchor boxes进行边界框的预测;然后采用多尺度检测的方法,预测2个尺度的边界框,每个尺度通过从前面2层的卷积层中提取特征图,并将其上采样2倍,再与特征提取网络中较早的特征图进行融合。这样既可以从上采样得到的特征图中提取有意义的语义信息,也可以从较早的特征图中提取细粒度信息。
2 实时目标检测系统的搭建
2.1 数据集制作
本文的研究内容是构建FSAC赛车的实时目标检测系统,检测对象是组成比赛赛道的4种桩桶,分为大桩桶、红色小桩桶、黄色小桩桶以及蓝色小桩桶,不同种类的桩桶在赛道中有着不同的职能。在8字环绕测试赛道上,红色小桩桶和蓝色小桩桶组成的赛道为一般赛车行进路段,大桩桶为赛车转向标志,黄色小桩桶为赛车减速和制动标志。因此,需要对桩桶精确分类。
对于目标检测系统的数据集,由于前期赛车未制造完成,根据实际摄像头安装点距离地面的高度和角度,将摄像头安装在一个模拟赛车的小推车上,以模拟赛车跑动的实际工况。摄像头以20 帧的速率采集跑动状态下的图片,分别在4个不同地点、不同光照条件以及不同赛道条件下采集5 000 张图片,采集的图片示例如图2所示。从采集的图片中随机抽取1 000张制作成带有标签的数据集,并从数据集中随机抽取800张图片作为训练集,200张图片作为测试集。
图2 采集图片示例
2.2 YOLOv3-tiny算法网络结构的改进
FSAC赛车目标检测系统的目标物是4种类型的桩桶,其特征较为简单;YOLOv3算法的网络模型和计算量过大,检测速度较慢,且检测准确率提高得并不明显。因此,本文选取YOLOv3-tiny作为基准网络,网络模型计算量降低,检测速度大幅上升。数据集中的红色小桩桶、蓝色小桩桶和黄色小桩桶本身尺寸较小,当其距赛车一定距离时,图片中桩桶显示的尺寸更小,导致在测试中原始YOLOv3-tiny算法对一些小桩桶产生了漏检、误检。为了让算法在保证实时检测速度下也能兼顾高的检测准确率,需要对YOLOv3-tiny算法进行改进,使其能够更好地检测小目标物,提高检测精度。
原始YOLOv3-tiny算法在13×13和26×26尺度的特征图上进行目标检测,其对大目标物的检测需求已经足够,但是对小目标物准确检测需要更细粒度的特征。因此本文对YOLOv3-tiny网络进行了改进,增加对52×52尺度特征图进行目标检测,获得较早特征图中的细粒度信息,并给52×52这个大尺度特征图分配小尺度的初始边界框,从而增强对小目标物检测的效果。改进算法的检测结构如图3所示。
图3 改进算法的检测结构
2.3 基于数据集的边界框聚类
在模型训练中,如果初始边界框参数更接近真实边界框,那么模型将更加容易训练,模型收敛速度将加快,且预测边界框会更加贴合真实边界框。
YOLO算法在训练数据前使用k-means算法对相应数据集边界框的宽、高进行聚类,以选取初始边界框的尺寸。由于标准的k-means算法通常使用欧式距离计算2点之间的距离,导致尺寸较大的边界框比小边界框产生更多的误差。为了使交并比的大小与边界框尺寸大小无关,且获得较大的初始边界框与真实边界框的交并比,YOLO算法采用了新的距离公式,即
d(box;centroid)=1-IOU(box;centroid)
(4)
其中,d(box;centroid)为样本点到簇中心的距离;IOU(box;centroid)为聚类边界框和簇的中心框的交并比。
使用k-means算法对数据集的真实边界框宽、高进行聚类,选取了5个不同聚类值B当作边界框的数量,取值分别为6、7、8、9、10,边界框聚类的结果见表1所列。
表1 边界框聚类结果
2.4 基于ROS的改进算法部署
无人驾驶方程式赛车有多个传感器,包括雷达、摄像头、GPS等,每个传感器都在不断地产生数据,系统需要对这些数据进行实时处理,并且还需要合理调配软、硬件资源,这需要一个稳定、高效的系统去管理各个模块。机器人操作系统(robot operating system,ROS)是一种基于消息传递通信的分布式框架,可以很好地适用于无人驾驶汽车系统[12]。因此本文将改进的YOLO算法部署到ROS中。
通过创建webcam-pub节点,将摄像头采集的消息通过名为webcam/image的话题发布出去,由webcam-display节点订阅话题,在窗口中显示;由yolo-detector节点订阅话题,将采集的图片通过YOLO框架进行目标检测,将检测的分类结果消息发布到yolo-class的话题中,将检测的边界框数据消息发布到yolo-bounding boxes的话题中,供ROS其他模块订阅相关数据。ROS下使用YOLO检测的节点运行图如图4所示,椭圆圈代表不同的节点,方框代表不同的话题,连线代表话题的发布和订阅。
图4 ROS节点运行图
2.5 实时目标检测系统在Jetson TX2上的部署
NVIDIA Jetson TX2性能强大、成本较低,有较高的经济性。其外形尺寸较小,便于整车布置,且部署位置灵活、占用空间较小,适合大批量部署和应用,符合FSAC赛事理念,尤其适合部署在无人驾驶方程式赛车上,因此本文选择在NVIDIA Jetson TX2嵌入式开发板上搭载目标检测系统。Jetson TX2的GPU采用NVIDIA Pascal构架,有256个CUDA核心,处理器有6个CPU核心,包括4个Cortex-A57核心和2个自研的Denver核心,搭配8 GB 128位LPDDR4内存。NVIDIA Jetson TX2开发板如图5所示。
图5 NVIDIA Jetson TX2开发板
3 实验结果及分析
本文实验的软、硬件平台如下:CPU为Intel Core i7-7700;显卡为Nvidia GeForce GTX 1080;内存为16 G;操作系统为ubuntu 16.04LTS;搭载实时目标检测系统的平台为NVIDIA Jetson TX2。
3.1 边界框聚类验证
为验证使用k-means算法对目标检测结果的影响,使用原始YOLOv3-tiny的初始边界框参数,采用改进后的算法对数据集进行训练、测试。根据表1中k-means算法得到的边界框聚类结果对数据集进行训练、测试,得到相应的交并比(IOU)、召回率(Recall)和准确率(Precision),其计算公式为:
(5)
(6)
其中,TP为被检测出且分类正确的桩桶数;FN为没有被检测出的桩桶数;FP为被检测出且分类错误的桩桶数。测试结果见表2所列。
表2 不同数量边界框对模型性能的影响 %
由表2可知,不同数量边界框对应的交并比随着边界框数量的增加而增加,但是当边界框的数量达到9时,交并比增加的速度开始减慢,如图6所示。
图6 不同边界框数量对应的交并比
当边界框的数量增加时,系统进行目标物检测,生成的边界框数量会大幅增加,导致计算量增加,计算时间增长。YOLO算法进行检测时,会对不同尺度的特征图进行目标物检测。将聚类得到的初始边界框分配给不同尺度的特征图进行检测,大尺度的特征图使用小的初始边界框尺寸,以增加对小目标物的检测精度。而本文采用融合3个尺度特征图的方法,因此选择数量为9的边界框刚好可以均匀分配给3个不同尺度。综上所述,当选取边界框数量为9时,可以兼顾高的检测精度和检测速度,并且可以均匀地分配给3个尺度进行检测。
3.2 最佳阈值的确定
YOLO算法进行目标物检测时,会根据阈值去筛选边界框,从而对检测结果产生影响,因此需要通过实验对比,选取最佳的阈值,得到较好的检测结果。不同阈值下检测结果如图7所示,其中对比了交并比、召回率和准确率3个指标。
由图7可知,当阈值较小时,生成的边界框较多,交并比较高,召回率较高,但准确率较低;随着阈值的升高,交并比下降,召回率下降,准确率上升;当阈值约为0.3时,交并比为79.7%,召回率为94.1%,准确率为93.2%,交并比、召回率和准确率都取得较好的结果。
图7 不同阈值的检测效果对比
3.3 不同算法性能对比
本文将实时目标检测系统搭载在NVIDIA Jetson TX2上,在相同的数据集下对比了不同算法的性能,结果见表3所列。
表3 不同算法相关性能验证
由表3可知,原始YOLOv3算法网络较深,检测精度较高,但是对硬件要求较高,每秒传输帧数FPS只能达到1.5,不能达到实时目标检测的效果;而YOLOv3-tiny算法网络简单,FPS能够达到20,满足实时目标检测的需要,但检测精度较低。
本文所采用的改进YOLOv3-tiny算法的召回率为94.1%,准确率为93.2%,FPS达到20,不仅拥有YOLOv3的检测精度,而且拥有YOLOv3-tiny的检测速度。因为检测的桩桶相对较小,改进算法融合了3种尺度的特征用于桩桶的检测,增加一个对大尺度特征图的检测,且分配3个小尺度的候选边界框,使其对小桩桶的检测效果变好,取得了较好的检测精度;改进算法的主体采用YOLOv3-tiny的结构,使用较少的卷积层和池化层进行特征提取,并未加入多个残差模块,仅增加了1个检测通道,检测速度依然很快,可以达到实时性的要求。实时目标检测系统对测试集的检测结果如图8所示。
图8 检测结果
4 结 论
本文提出将YOLO算法用于FSAC赛车的目标检测,基于目标物尺寸较小、特征简单的特点,根据数据集中桩桶的真实边界框参数进行聚类,获得初始边界框的尺寸参数,改进了YOLOv3-tiny网络结构,通过测试选取最佳阈值;将改进算法部署在ROS中,将NVIDIA Jetson TX2嵌入式开发板作为目标检测系统的搭载平台,构建了轻量化的目标检测系统。实验结果表明,改进算法在NVIDIA Jetson TX2平台上的召回率达到94.1%,准确率达到93.2%,FPS达到20,满足赛车实时目标检测的要求,并且目标检测系统具有易搭载、方便布置、成本较低和适合量产的特点。但是,本文系统采用NVIDIA Jetson TX2作为搭载平台,检测准确率和检测速度不能达到极致,因此不适用于车辆行驶速度较高的无人驾驶场景。