罗小强,朱海荣(通信作者)
(广西科技师范学院数学与计算机科学学院 广西 来宾 546199)
夏季是溺水事件高发期,而溺水往往发生在偏僻区域。当发生溺水后,急需救援而常常错过最佳救援时机。此外,在偏僻区域也频发交通事故,也因无法得到及时救援,导致严重后果[1]。基于以上情形,本文提出了一种基于Yolo V2目标检测网络与K210单片机的安全预警系统,该系统采用Python编程语言开发,旨在有人、车辆等目标进入预警区域,进行检测并告知救援人员,有效地预防事故的发生。
系统以pyAI-K210单片机为核心,通过自带的摄像头pyAI-K210 CAM拍摄检测区域(偏僻区域)。摄像头采集到图像数据并输入到单片机,由单片机烧录的轻量级目标检测网络YOLO V2对采集的视频图像进行目标识别。当识别结果包含所列出的检测目标时,说明需要进行预警,目标已进入该区域。于是,通过运营商的网络向预设的救援人员发送彩信,告知该负责人当前有目标进入某偏僻区域,须持续关注目标动态。系统框架,如图1所示。
图1 系统框架
YOLO在2016年被提出,发表在计算机视觉顶会CVPR(Computer Vision and Pattern Recognition)上[2],其含义为仅仅需浏览一次便可以识别出图片中的物体的类别和位置。因仅需要看一次,YOLO被称为Region-free方法,相比于Region-based方法,YOLO不需要提前找到可能存在目标的Region。
典型的Region-base方法的流程大致分成2个阶段:首先,通过计算机图形学(computer graphics,CG)或深度学习(deep learning,DL)方法对待检测图片进行分析,找出若干个可能存在物体的区域。然后,将找出的区域裁剪下来,放入一个图片分类器中进行分类。由此,Regionbased方法也被称作两阶段(two-stage)方法。与上述方法相比较,Region-free方法仅需要进行一次扫描,也因此被称作单阶段(one-stage)模型。
由此可知,YOLO是一种能进行实时目标检测的单阶段、轻量级模型(可部署到嵌入式单片机上)。
YOLO V2是在YOLO V1基础上进行改进的版本,不仅提高了定位的准确度与召回率,而且也提升了检测速度。YOLO V2网络结构如图2所示[3],其中,k=5,C为识别目标种类,用coco数据集训练后,可识别80个种类;使用不同数据集进行训练,可识别种类不同,最多能够识别9 000个种类。采用Darknet-19网络(表1)作为骨干网络。
表1 Darknet-19 网络结构
图2 YOLO V2网络结构
YOLO V2网络取消了YOLO V1中的全连接层,使用全局平均池化的方法得到固定长度的特征向量,从而实现高分辨率图像的训练与检测。YOLO V2在224×224的分辨率图像上进行分类模型预训练,经过5次降采样后,得到13×13的特征图,通过分类器进行目标检测与分类。为适应更高分配率图像的输入,又在448×448的高分辨率图像上进行微调,最终MAP提升约4%。
算法处理过程中,首先将图片划分成13×13的网格,当目标中心落在单元格中心时,由该单元格预测目标的边界框与种类。每个单元格预测的位置信息为(tx,ty,tw),输出的位置信息是相对该单元格中心坐标(cx,cy)、宽高(pw,ph)的偏移量,因此目标边界框可表示为[4]:
pyAI-K210由深圳01Studio设计研发,是一种集成机器视觉与听觉的系统级芯片的高性能开发套件,其接口兼容MicroPython的pyBoard。它拥有卷积神经网络加速器KPU以及音频处理器APU,不仅可进行卷积神经网络运算,而且具备很好的低功耗视觉处理速率和准确率。
KUP内置丰富的神经网络处理单元、支持主流框架模型。首先,内置卷积、池化、批归一化、激活运算单元[5],支持YOLO V2训练的模型文件进行检测,实时获取检测目标的大小和类别;其次,支持主流框架训练的定点化模型,对网络层数无限制并且可单独配置卷积参数,支持参数数量高达5.5~5.9 MiB[6]。
pyBase是开发板底板,有很强的扩展性,设计外设接口主要有:IO口、I2C/UART接口、OLED接口、传感器接口、四路舵机接口等。
嵌入式芯片由于具有较少的RAM和ROM资源,如STM32 F407IG的RAM大小为196 KB、FLASH内存容量为1 024 KB,因此只能使用C语言及C++语言进行编程,而这2门编程语言入门门槛较高,这样会使产品的二次开发变得复杂,难度也随之增大。随着“互联网+”不断推进升级,需要网络连接功能的应用越来越多,如果使用传统的C语言或C++语言进行网络连接的开发,对于初级开发者将会非常困难,因而不利于整个行业的发展。
而作为主流的动态解释语言,Python因其具备简单易学、移植性好等特点受到了开发者的广泛关注。MicroPython是Python语言的变体,专门作为为嵌入式芯片设计和优化的开发语言,因其易用性的特点,在物联网领域和其他嵌入式领域占有一席之地[7]。简而言之,MicroPython是编程语言Python的精简高效实现,仅包括Python小部分的标准库,经过优化,可在微控制器和有限的环境中运行。
通用异步收发传输器(universal asynchronous receiver/transmitter,UART)是一种异步收发传输器,属于硬件设备的一部分。它的功能是将要传输的信息在并行通信与串行通信之间进行转换,通常被集成到其他通信接口之上。
串口称为串行接口(串行通信接口),按电气标准及协议分类有:RS-232-C、RS-422、RS485、USB等。前3种标准仅对接口的电气特性做出规定,并不涉及接插件、电缆或协议。在嵌入式系统中,通常作为MCU的外设;一般情况下,由芯片引脚直接引出的是 TTL电平,中间接转换芯片的可能是RS232电平[8]。pyAI-K210的uart模块主要用于驱动开发板上的异步串口,可以自由对uart进行配置。pyAI-K210共有3个uart,每个uart可以进行自由的引脚映射,UART串口接TTL电平。
SIM900A是一款尺寸紧凑型、高可靠性的无线模块。该无线传输芯片属于双频GSM/GPRS模块,工作频率支持4种频率850、900、1 800、1 900 MHz,可低功耗实现语音、SMS、数据和传真信息的传输。支持RS232串口和LVTTL串口,并带硬件流控制,支持5~24 V的超宽工作范围。该模块提供2组TTL接口,一组为2.85 V的TTL接口,可与3.3 V的单片机直接连接;另一组为兼容各种电压的TTL电平,可与5 V和3.3 V等单片机直接连接。电路连接时,pyAI-K210单片机开发板P11的TX引脚、RX引脚、GND引脚分别连接SIM900A的5VR引脚、5VT引脚、GND引脚。单片机与SIM900A引脚连接,如图3所示。
图3 单片机与SIM900A引脚连接
系统进行目标检测时使用的是现成的YOLO V2网络模型,是K210单片机系统自带的20分类模型(在进行使用时,修改为5分类模型)。由于系统自带的目标检测模型,能识别自行车、公共汽车、小汽车、摩托车、人等5种目标,基本符合应用需求,因此不再重新训练新模型,而是直接通过KPU加载现成模型来实现目标物体的识别。
系统具体工作流程如下:
步骤1 摄像头监测偏僻区域;
步骤2 K210单片机接收摄像头视频;
步骤3 单片机使用自带KPU及YOLO V2网络检测视频中目标;
步骤4 若发现设定类型目标则运行步骤5,否则返回步骤3;
步骤5 绘出目标边框与标出识别置信度;
步骤6 判断是否到设定信息发送时间(避免频繁发送彩信),如果到达则运行步骤7,否则返回步骤3;
步骤7 发送现场画面彩信给指定人员,完成后返回步骤3。
系统工作流程,如图4所示。
图4 系统工作流程
系统实现后,分别对进入偏僻区域中的5类目标(自行车、公共汽车、小汽车、摩托车、人)进行检测,通过对各类目标均进行样本数为30个的检测。系统目标检测平均识别率见表2。对目标识别时,场景的系统彩信功能效果如图5所示。
表2 系统目标检测平均识别率
图5 系统彩信功能效果
本文提出了使用K210单片机运行YOLO模型实现目标检测的系统,通过使用GPRS方式传输画面信息,从而减少不必要的视频监控,达到控制系统成本开销的目的。系统对突然进入偏僻区域的指定目标进行检测与预警,以确定是否需要救援。系统搭建完成后,能实现预定对自行车、公共汽车、小汽车、摩托车、人5种目标的检测任务,适合布设在偏僻区域。结果表明,该系统能避免使用传统监控模式所需的供电线路、视频监控有线传输管道。由于传统监控模式在偏僻区域进行供电和网络管道布线成本极高,而本文系统采用太阳能供电、GPRS传输模式传输监控图片,不仅解决了监控供电问题,同时也克服了偏僻区域若采用视频传输模式而运营商网络带宽不够的问题。这样既降低供电成本、克服传输网络带宽问题又可降低后期运维成本,因而具有很好的应用价值。