基于Yolo v5目标检测算法的交通信号灯智能控制装置设计

2022-03-22 03:12王新宇
公路交通技术 2022年1期
关键词:信号灯树莓绿灯

王新宇

(中国人民公安大学, 北京 100038)

智能化是城市交通信号控制系统的发展趋势,前端交通感知设备是交通信号控制的源泉和数据基础。目前视频采集设备是采用最多的交通数据采集方式,在实际应用中产生了大量的视频数据。但由于缺少前置的计算能力,需要将产生的数据传送至数据中心进行统一处理,这不但对网络造成了沉重负担,也影响了交通控制的实时性[1]。随着大数据、云计算、人工智能等信息技术的发展,基于边缘计算与AI计算机视觉的路侧边缘计算设备成为了研究热点。例如张立立等[2]以边缘计算为基础、以场景驱动为要求、以交通控制资源化为支撑、以人工智能为核心提出了新一代的智能交通信号控制总体架构;高若雯[3]提出了一种交通信号控制场景下的边缘计算架构,根据路网状态将其划分成多个子区域,设计路口间的协作机制,并结合多智能体强化学习来生成各个子区域的多路口交通信号协作控制方案;汪煜超[4]以边缘计算下的相邻多路口交通信号灯联合控制为核心,在云端边缘合作的工作场景下,提出了基于边缘节点的交叉口交通控制算法,通过对输入量和相位选择机制的优化,改进了传统的模糊控制方法,并将模糊控制与强化学习结合起来,提高了算法的性能。

本文采用人工智能算法并结合边缘计算设备,设计一套交通信号灯控制装置,探索人工智能等信息技术在交通控制中的应用,为智慧路口的设计与应用提供参考。

1 控制装置的设计原理

本文设计的控制装置基于Yolo v5算法,包括硬件和软件2大部分。首先对控制装置的硬件设备进行搭建,并将相应的软件配置到核心硬件中,最后将控制装置应用到交通信号灯的控制中。

1.1 Yolo v5算法

Yolo(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,运行速度较快,可用于实时系统[5]。目前Yolo已发展到v5版本,通过引用了马赛克增强、自适应锚框等新特性,使Yolo算法具有很好的目标检测性能。目标检测是目前人工智能中应用比较成熟的领域,其算法一般分为2大类别:1) two-stage系列算法,如R-CNN,Fast R-CNN, Faster R-CNN等,这种算法通过先生成待选框(Region Proposal),再进行分类获取类别,回归获取位置;2) one-stage系列算法,如Yolo,SSD等,这类算法则直接采用CNN网络获取目标和位置[6]。

相对而言,two-stage系列算法精度更高,但速度慢;one-stage系列算法速度快,但准确率略低。目前,在很多目标检测领域里,如车辆视频检测通常只需保证分类的准确率,但实际中检测速度比定位精度更重要。one-stage的模型具有天然优势,能极大减轻算力有限边缘设备的计算压力。为此,本文设计采用one-stage系列的目标检测模型,Yolo是one-stage类中速度优化的代表,选择最新版本Yolo v5模型作为目标检测算法。通过OpenVINO优化后,速度还能得到进一步提升,可实现对交通信号灯的实时控制[7]。

1.2 控制装置的硬件构成

控制装置用到的硬件设备主要有树莓派、摄像头、屏幕、LED灯,其构成如图1所示。

1) 树莓派

树莓派(RaspberryPi)是控制装置的核心硬件,承担边缘计算的功能,是一款体积非常小(类似于信用卡大小)的微型计算机[8]。由于Yolo目标检测模型的部署需要强大的内存和运行速度,因此本设计选择树莓派4B作为处理器。树莓派4B比上一代的树莓派3B+,在处理器速度、多媒体性能、内存和连接方面提供了突破性的增长,同时保留了向后兼容性[9]。

图1 控制装置硬件构成

树莓派是本设计装置的硬件平台,硬件配置上,需要64G内存的TF卡作为硬盘及Type-c接口的电源,软件系统选择Windows 10 IoT Core,该系统专用于物联网开发,先在官网下载系统,并将系统录刻到TF卡中,然后将TF卡插入树莓派中进行第一次启动,配置静态IP以及相关环境。

2) CSI摄像头

CSI(Camera Serial Interface)摄像头[10]是一种采用了CSI接口框架的相机设备。CSI框架由MIPI(Mobile Industry Processor Interface)联盟组织于2005年发布,是一种全新的应用于相机和处理器之间的接口框架,利用这种接口进行数据传输灵活、高速[11]。

3) 屏幕与LED灯

屏幕主要用于人机交互。三色LED灯用来模拟交通信号灯。图1所示控制装置中相关设备的功能是:由树莓派发出指令控制三色LED灯的亮灭,实现对交通流的调控;屏幕显示车辆信息和交通信号灯色信息,方便人员了解路口情况。

1.3 控制装置的软件工具

设计控制装置主要软件工具为PyTorch和OpenVINO。

1) PyTorch软件及特征

PyTorch是一种简洁且高效快速的深度学习框架,可用于Yolo v5模型的训练。Pytorch是torch的python版本,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个对多维矩阵数据进行操作的库,在机器学习和数学密集型应用方面有广泛应用[12]。

Pytorch的设计非常简洁,遵循由tensor→variable(autograd)→nn.Module 三个从低到高的抽象层次[13],编程代码更易理解,并在快速基础上保持了较高的灵活性。具体特征如下:(1) Python的优先支持策略,这也是Pytorch的主要特征,该框架从细粒度上直接支持python的访问;(2) 动态图的良好支撑,由于Pytorch直接基于 python API 构建的python 接口,使得运行程序时,可动态构建及调整计算图,灵活性较高;(3) 易于debug,Pytorch在运行过程中可生成动态图,让开发人员较为容易地在堆栈跟踪中找到出现的问题。

2) OpenVINO软件及工作流程

OpenVINO是英特尔推出的视觉推理加速工具包,为英特尔平台进行模型推理加速[14]。OpenVINO 提供了一整套在Intel计算设备上完成深度学习推理计算的解决方案,它支持 Intel CPU、 GPU、FPGA 和 Movidius 计算棒等多种设备。OpenVINO 工具包的主要组件是 DLDT(Deep Learning Deployment Toolkit,深度学习部署工具包)。

OpenVINO典型工作流程是:(1) 训练一个DLDT支持的Pytorch框架的Yolo v5网络模型(Train a Model);(2) 使用模型优化器对网络模型进行编译和优化(Run Model Optimizer),生成Openvino IR(Intermediate Representation,中间表示)格式的网络配置文件(.xml 文件)和模型参数文件(.bin 文件);(3) 调用Intel 推理引擎进行网络运算,并将结果返回给 User Application(应用程序)。

经过优化器的编译和优化以及推理引擎的调用,就可以对模型进行部署。

2 Yolo v5网络结构及其算法实现

2.1 Yolo v5网络结构

Yolo v5按照网络深度大小和特征图宽度大小分为 Yolo v5s、 Yolo v5m、Yolo v5l、Yolo v5x模型。本设计采用Yolo v5s 作为使用模型。相较于上述的其他几种模型,Yolo v5s的网络结构最小、精度低,但速度快。Yolo v5s的结构由输入端(input)、主干网络(BackBone)、Neck、输出端(prediction)4部分组成,其主要功能分别如下:

1) 输入端(input)

将图像按规定的大小宽度输入,Yolo v5中对图像采用了马赛克数据增强的方法进行处理,提高对小目标的检测效果,在对数据集进行训练时,通过自适应计算得到最佳锚框值,这有利于提升检测速度。

2) 主干网络(backbone)

在不同图像细粒度上聚合并形成图像特征的卷积神经网络,其中使用了 Focus 和 CSP结构。Focus结构负责图片进入主干网络前,对图片进行切片操作;CSP结构是对输入的特征利用两路的1*1卷积进行过渡,这有利于提升网络学习能力,降低“瓶颈”和内存成本。

3) Neck部分

对图像特征进行组合的网络层,并将图像特征传递给预测层。Yolo v5的Neck部分采用了FPN+PAN的结构。FPN将高层的特征信息进行上采样,以一种从上到下的方式进行传递融合,得到进行预测的特征图。PAN则是自底向上传达强定位特征。并且Yolo v5的Neck结构中,采用了主干网络中的CSP结构进行卷积操作,加强了网络特征融合的能力。

4) 输出端(prediction)

即预测层,对图像特征进行预测,生成边界框并预测类别。

2.2 Yolo v5算法的实现

1) 试验平台

Yolo v5算法要在Pytorch中实现。本设计所采用平台为windows10 IoT Core系统、Pycharm集成开发环境(IDE)、anaconda Pyhon3.7、torch 1.7.1、cuda11.0、OpenVINO。

2) Yolo v5算法实现的操作流程

(1) 配置环境:配置虚拟环境conda create -n Yolo v5 python==3.7进入环境,使用pip安装相关模块和依赖。

(2) 准备数据集:在github上下载Yolo v5模型代码,并在data目录下新建Annotations、 images、 ImageSets、 labels 四个文件夹,将准备好的车辆图片通过精灵标记助手进行标记。数据集标记好后,将原始图片数据集放到images文件夹中,将精灵标记助手所生成的.xml文件全部放入到Annotations文件夹中[15]。

(3) 构建数据集:在根目录下新建makeTxt.py和voc_label.py文件,运行makeTxt.py将数据集进行分类,按照8∶1∶1随机分成训练集、验证集、测试集,在ImagesSets文件夹中存放分类情况[16];运行voc_label.py文件读取.xml文件中的标注信息,并将生成的信息写入txt文件中存到labels文件里。

(4) 训练模型:配置完成后,执行train.py训练文件开始训练。在训练中,可利用tensorboard进行可视化训练[17]。训练结束后会在runs/train/exp下得到weights权重文件夹,存放了训练300轮得到的最好的权重,即best.pt以及最后一轮训练得到的权重,即last.pt文件。

(5) 测试模型:得到训练好的权重文件后,对模型进行测试。首先在根目录的detect.py中进行调试,修改-weights、-source、-conf-thres、-project参数,执行detect.py文件,最终在runs/detect/exp文件夹下得到检测后的视频。

(6) 优化模型:将训练好的的模型通过 OpenVINO平台进行优化。安装OpenVINO开发工具,建立虚拟环境,导出在 Pytorch上训练好的 Yolo v5 模型、修改激活函数,将模型文件.pb格式转化为.onnx 格式,然后再转化成 IR 模型,将out目录下生成的模型文件传输到树莓派上。

3 交通信号灯控制逻辑的设计与实现

3.1 交通信号灯控制逻辑的设计

本文以两相位控制的十字路口为例,阐述交通信号灯控制逻辑的设计过程。假设东西方向为第一相位,南北方向为第二相位,设置信号参数为:信号周期60 s,每个相位的绿灯显示时间为25 s,黄灯时间为5 s[18]。本设计为装置设置了3种工作模式,分别为正常工作模式、智能工作模式、紧急工作模式[19]。

1) 正常工作模式。该模式时,交通信号灯有A、B、C、D四种工作状态。A状态东西方向绿灯25 s,南北方向红灯30 s。当东西方向绿灯倒计时为0 s时,A变为B状态,即东西方向变为黄灯5 s倒计时[20],南北方向此时为5 s倒计时。当倒计时时间减为0 s时,B变为C状态:东西方向进入红灯30 s倒计时,南北方向进入绿灯25 s倒计时。当南北方向绿灯时间减为0 s时,C状态进入D状态:南北方向为5 s黄灯倒计时,东西方向为5 s红灯倒计时,当倒计时时间为0 s时[21],执行A状态。以此循环。交通信号灯正常工作模式时,交通信号灯的4种状态如图2所示。

2) 智能工作模式。若某相位开始时,检测到该相位方向流量超过30 veh/min,则延长5 s。在这段绿灯结束时间前,如果检测到车流量依然超过30 veh/min,则继续延长5 s,直到累计的绿灯时间达到预定的最大绿灯时间40 s,或在绿灯时间内该方向流量小于30 veh/min,则进入正常工作模式,同时使该相位方向黄灯5 s倒计时,冲突相位方向5 s红灯倒计时,作为工作模式的过渡。

(a) A状态 (b) B状态

(c) C状态 (d) D状态

3) 紧急工作模式。如果在交叉口物理区域发生特殊情况,如发生交通事故,或有救护车、警车、消防车等特殊车辆通过,则东西南北方向都禁止通行。如果东西方向有紧急情况,则南北方向禁止通行;如果南北方向有紧急情况,则东西方向禁止通行。

交通信号灯控制逻辑如图3所示。

3.2 交通信号灯控制逻辑的实现

交通信号灯控制逻辑的实现是整个控制装置运行的一部分。整个控制装置运行包括2部分:一是交通信号灯控制逻辑的实现,二是树莓派控制组件的实现。

1) 交通信号灯控制逻辑的实现

首先进行初始化,设置信号参数,以东西相位为例,根据交通信号灯的控制逻辑处理车辆信息,得到交通信号灯的切换时间以及亮灯时长,通过http协议发送控制命令给树莓派。

2) 树莓派控制组件的实现

包括2部分:一是Web API监听。在树莓派上启动一个flask服务(flask是一个非常小的Python Web框架,被称为微型框架[22])用来监听指定端口,在API接口收到请求后执行交通信号灯的亮灭逻辑。二是三色LED灯的控制。对GPIO进行初始化,定义GPIO函数,将程序输出结果通过GPIO连接LED灯进行控制。

图3 交通信号灯控制逻辑

4 控制装置的运行测试与使用方法

4.1 控制装置的运行过程

控制装置的运行过程为模型训练和装置运行2个阶段。

1) 模型训练阶段。通过深度学习主流框架 Pytorch软件平台,训练Yolo v5模型,通过 OpenVINO 平台进行优化和调用,并将其部署在树莓派上。

2) 装置运行阶段。将训练、优化好的模型搭载在树莓派主控平台上,调用CSI摄像头对路口车辆信息进行实时采集,利用http协议将信息反馈给树莓派(http是全称超文本传输协议,是客户端和服务端之间进行请求的一个标准),树莓派通过Web接口接收信息并通过树莓派的GPIO串口连接LED灯进行控制。

4.2 控制装置的运行测试结果

基于Yolo v5目标检测算法的交通信号灯智能控制装置在试验中进行测试,并与传统的信号控制方法进行对比,按双向车流大小以及是否有特殊车辆通过,分别测试该装置的正常工作模式、智能工作模式以及紧急工作模式。经过数次测试,得出了不同情况下车辆通过交叉口的平均时间,结果如表1所示。

表1 控制装置运行测试结果 s

由表1可知,在车流量较小的情况下,2种控制方式差别不大,但是某相位车流量较大以及特殊车辆通过时,该装置的控制效果相较于传统的信号控制有所改善。

4.3 控制装置的使用方法

1) 将控制装置接通电源,即开始运行,系统首先初始化,此时屏幕上显示出主界面;2) 根据交叉口历史数据,设置信号控制基本参数;3) 点击主界面中的起动按钮,系统即进入工作模式,此时装置中的摄像头处于工作状态;4) 当有车辆经过时,采集车辆信息,并通过部署在树莓派上的Yolo算法,采集信息进行分析,将车流量、车速等数据显示在主屏幕上,同时根据车流量的变化,实时调整绿灯时间,进而实现对路口交通流的控制。

5 结束语

1) 利用Yolo v5算法的实时性和树莓派的可操作性,设计了一套交通信号灯控制装置,实现对交通信号灯的实时控制。

2) 该控制装置有一定的学习和分析能力,可对路口的实时数据进行采集并反馈给树莓派。树莓派中的交通信号灯控制算法根据车辆信息进行运算,并通过http协议来控制交通信号灯,可实现交通信号灯绿灯时间的智能化调节,同时把车辆信息和交通信号灯时间显示在屏幕上,方便人机交互。

3) 设计的控制装置,具有相对独立的模块化的交通信号灯控制模型。在训练数据准备与预处理、模型训练、模型验证等方面功能独立,自成体系,利于安装和后期运维。

4) 利用深度学习Yolo v5算法可实现车辆的快速检测,其硬件成本较低,性价比高。

5) 可根据交通复杂程度,对控制装置进行升级,或增加服务内容。

猜你喜欢
信号灯树莓绿灯
山间“小精灵”
——树莓
为什么红灯停,绿灯行
基于树莓派的骑行智能头盔设计
交通信号灯
信号灯为什么选这三个颜色?
基于树莓派的远程家居控制系统的设计
黄金水果红树莓
红灯停,绿灯行
安装在路面的交通信号灯
一路绿灯 一路关爱