APP下载

基于深度学习的人体识别智能交通灯设计*

2023-01-31李卓寰刘煜彭程

科学与信息化 2023年1期
关键词:交叉路口开发板串口

李卓寰 刘煜 彭程

湖南人文科技学院能源与机电工程学院 湖南 娄底 417000

引言

在城市道路中,交叉路口是道路交通系统的咽喉,作为相交道路车辆和行人汇集、转向的所在地,交叉路口处的交通组成、交通特征非常复杂,因此常成为交通事故的多发点[1]。据统计数据表明,我国城市交通事故抽样统计表明,发生在交叉路口的交通事故数约为50%,而其中车辆和行人之间的交通事故又占到一半以上。交叉路口区域高密度的车流以及行人相互之间严重的相互干扰,极易引发交通事故[2],引起交通阻塞,车辆延误增加等连锁性反应,进而影响整个路网运营效率。特别的对行人的伤害事故尤其多,这不仅对行人的生命健康造成伤害,也会带来极大的经济损失[3]。目前这些路段常采用的安全措施是采用凸面反光镜等方式,扩大司机视野及早发现弯道对面车辆,以减少交通事故的发生[4]。但是凸面反光镜由于凸面反光镜变形严重、安装位置过高和扩大视野有限等原因,实际应用时效果不是太明显。目前国内开始引入行人过街按钮,目前国内开始引入行人过街按钮,目前已经在成都、武汉、哈尔滨、长沙等许多城市的不同路口进行安装并投入使用。

目前的交叉路口的交通灯智能化制度不高,对路口的交通通行提高有限。本论文通过在人流量较大的学校、小区等交叉路段,特别是在一些交叉路口和丁字路口等交叉路口设置高清摄像头,系统利用摄像头的图像信息对路面行人进行识别,通过识别出驾驶员不易观察到的交叉路段区域行人的数量、位置等信息,并利用识别的人体信息来点亮相关的交通信号灯等装置。

1 硬件及其开发环境搭建

亚博K210开发板是一款以K210芯片为控制中心,K210是嘉楠公司推出的一款MCU,其特色在于芯片架构中包含了一个自研的神经网络硬件加速器KPU,可以高性能地进行卷积神经网络运算[5]。该开发板可以在低功耗情况下进行卷积神经网络计算,是低门槛机器视觉嵌入式解决方案。

开发板使用的硬件连接示意图如图1所示。其中K210芯片为开发板主芯片,整个板子的核心处理器,128M-bit串行闪存作为内存扩展,触摸屏分辨率320*240,提供显示和触摸输入;摄像头采用图像传感器OV2640,该摄像头支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹等自动控制功能。板载CH340虚拟串口,提供供电、下载、固件和串口调试等。

图1 硬件连接示意图

K210的开发环境主要包括最基本的cmake命令行开发环境、IDE开发环境和Python脚本式开发环境。本文为了方便选择了Kendryte IDE集成开发环境,Kendryte IDE集成开发环境是基于VS Code完成的,所以开发界面与VS Code类似,程序编译成功后可以通过串口刷写程序。

2 分类模型训练

为了方便训练样本采用了Mx-yolov3进行模型训练。Mxyolov3模型训练主要包括如下几个步骤[6-8]:

2.1 软件环境配置

软件环境配置包括python环境、相关依赖包、GPU训练配置。

如果有满足要求的显卡,则需要安装CUDA_10.0和Cudnn_7.6.4,如果满足要求安装成功后将自动启用GPU进行训练。

2.2 训练样本标定

准备大量样本并通过软件转换为分辨率为224×224大小的图片。利用labelImg等软件对图片依次进行标注。为了标定方便主要标定为4类,行人、单车(包括电动车、摩托车)、汽车和伞(避免打伞遮挡人头)。

2.3 样本本地训练

img文件夹包含着所有的训练图片,而xml文件夹包含所有已标注好的标签文件。计算训练模型的锚点,然后进行样本本地训练,如果能进行显卡加速能加快训练速度,迭代运算完毕生成yolov2.h5和yolov2.tflite两个文件。

2.4 转换模型

将yolov2.tflite模型文件转换成.kmodel模型文件。

3 编程实现

如图2所示为程序流程,内部初始化包括系统时钟、串口、I/O、系统中断 和Flash等,外部硬件初始化包括触摸屏和Ov2640摄像头初始化等。物体分类初始化包括模型加载和物体分类层配置初始化;而这一部分设计到物体分类模型的建立[9-10]。

图2 程序流程图

Main.c和region_layer.c等文件需要修改的代码如下:

3.1 添加和修改以下内容

anchor分类的数目、模型的文件名称、分类显示数组(根据自己实际训练的修改)

3.2 画框的位置定义修改

画框不大于224*224。

3.3 检测阈值和NMS阈值的修改和层的定义

使用卷积层降采样(factor为32),使得输入卷积网络的224 * 224图片最终得到7 * 7的卷积特征图(224/32=7)。初始化检测模型时,添加以下代码:

obj_detect_rl.threshold=0.3;

obj_detect_rl.nms_value=0.3;

int flag=region_layer_init(&obj_detect_rl,7,7,4,224,224);

printf( “flag: %d”,flag);

3.4 修改初始化参数

int region_layer_init(region_layer_t *rl,int width,int height,int channels,int origin_width,int origin height)

{......

rl->coords=4;//坐标个数

rl->image_width=224;

rl->image_height=224;

rl->classes=channels;

......}

3.5 添加串口通信

程序编译通过后生成.BIN文件,通过kflash下载到K210开发板。

如图3所示:将设备安装在交叉路口,开机上电后显示屏显示摄像头采集的画面,并且实时检测车、行人、单车和伞等4种物体并标记位置和显示识别的结果,并通过串口输出检测结果给交通灯进行显示。

图3 检测图片

4 结束语

由于每一类的训练样本大约是300张左右,实际测试时的识别率基本上能满足基本的使用需求。通过增加训练样本还能有效提高物体识别率,这样能满足实际使用需求。采用K210作为图像识别终端基本能满足物体实时检测识别的需求,而且整体价格低廉能实现大范围的推广。

猜你喜欢

交叉路口开发板串口
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
浅谈AB PLC串口跟RFID传感器的通讯应用
无信号灯交叉路口安全警示装置
基于STM32H7的FDCAN通信系统设计与实现∗
船舶电子设备串口数据的软件共享方法
浅析单片机开发板的设计与制作
无人驾驶汽车在交叉路口的避障规划
串口技术的实物调试和虚拟仿真联合教学模式
基于车-车通信的协同交叉路口碰撞预警系统
基于农村主路交叉路口优先右转汽车的碰撞预警系统初步设计