基于YOLOv5 和树莓派的火灾识别研究
2022-10-31王少韩刘淼
王少韩,刘淼
(201620 上海市 上海工程技术大学 机械与汽车工程学院)
0 引言
大多数火灾都是从局部火灾开始的,并造成各种损害,例如人身和财产损失等,快速准确地检测和响应局部初始火灾在减少损失方面发挥了重要作用。当前的火灾探测系统基于照相机和诸如烟雾、火焰、热的检测传感器的图像处理分类,这类系统的准确性非常低。由于烟雾灭菌、垃圾焚烧、烟雾、气味、灭火器、警报故障等原因,置信水平为95%时,每年平均发生48 371±5 763 例,这比灭火的概率高出1.2 倍。
目前,随着图像识别的发展,基于深度学习的算法分为Two-stage 算法和One-stage 算法,前者主要以 Faster R-CNN[1]网络为代表,后者主要以SSD[2]、YOLO[3-4]系列等网络为代表。另外,两种算法的优势不同,One-stage 算法检测速度通常快于Two-stage 算法,但检测精度低于后者;而作为One-stage 算法的代表网络,YOLO(You Only Look Once)算法的检测速度特别快,适于实时目标检测以及在许多工业现场中应用。相比于其它目标检测算法,YOLO 算法不仅速度优势明显,而且模型体积小,方便部署于嵌入式设备中。目前较新的版本为YOLOv5 网络,它在YOLOv3[3]、YOLOv4[4]的基础上使用更多训练技巧提升模型的检测精度,具备更强大的检测能力,但网络的训练依赖于大量有标记数据集,在训练样本受限的条件下,该方法的性能有待提高。
本文识别的是火灾,并且要在微型计算机树莓派上实现,相对于准确率,对识别速度的要求比较高,故使用了YOLOv5 算法,同时,把PC端训练的模型移植到树莓派上,最后测试得到实验结果。
1 YOLOv5 算法简介
1.1 YOLOv5 的4 种模型
YOLOv5 算法直接以源码的方式发放出来,更适合工业化。YOLOv5 有4 个模型:YOLOv5s[5]、YOLOv5m、YOLOv5l、YOLOv5x。因为本文最后要在计算能力较弱的树莓派实现,根据图1 所示的4个模型的算法性能图,选择了v5s 版本。v5s 模型更小且速度更快,并且是宽度和深度最小的模型,所以进行深度学习需要的计算量比较少。
图1 模型算法性能图Fig.1 Model algorithm performance chart
1.2 YOLOv5s 的网络结构
图2 是YOLOv5s 的网络结构,以coco 数据集为基准。YOLOv5s 模型的网络结构由4 部分组成:输入端,Backbone,Neck,Prediction(输出端)。除此之外,又包含5 个基本组件:CBL 模块、Res unit 模块、CSPX 模块、SPP 模块、Focus 模块。其它基础操作包括张量拼接和张量相加。
图2 YOLOv5s 的网络结构Fig.2 Network structure of YOLOv5s
1.3 输入端
YOLOv5 输入端较之前版本改进之处是使用的Mosaic 参考了2019 年底提出的CutMix[6]目标增强方式。CutMix 目标增强只能使2 张图进行拼接,而v5 模型可以指定几张图片进行拼接,通过设置参数实现,而且数据是随机缩放、裁剪、排布的。除了数据增强,还使用了自适应图片缩放,v5 模型可以自动将图片进行缩放转换。
1.4 Bcakbone
1.4.1 Focus 结构
Focus 结构是v5 模型的创新点,该结构里最重要的就是slice(切片操作),图3 为slice 操作示意图,图像经过切片后变成不同维度的特征图。
图3 Slice 操作Fig.3 Slice operation
1.4.2 CSP 结构
YOLOv5 模型含有2 种CSP 结构,图2 中有详细描述,其中CSP1_X 结构应用于Backbone 主干网络中,CSP2_X 结构则应用于Neck 中。主干网络中采用CSP 组件的优点:增强卷积网络的学习能力;兼顾速度和准确率、降低计算瓶颈;降低内存成本。
1.5 Neck
YOLOv5 的Neck 结构和v4 版本的一样,都是FPN+PAN 的结构。在v5 刚问世时,只采用FPN结构,后来不断改进增加了PAN 结构,此外网络中其他结构也在不停地调整。网络结构如图2 所示。v5 版本Neck 中的创新之处是将v4 版本Neck 中的普通卷积换成了CSP 结构,这样做的目的是为了加强特征融合能力。
1.6 Prediction(输出端)
1.6.1 Bounding box 损失函数
YOLO 算法目标检测的损失函数一般由分类损失函数和候选框回归损失函数2 部分组成。在YOLO 算法中,候选框回归损失函数在不断改进,改进历程为:Smooth L1 损失函数→ IOU 损失函数(2016)→GIOU 损失函数(2019)→ DIOU 损失函数(2020)→CIOU 损失函数(2020)。好的损失函数应该考虑以下3 个重要影响因素:重叠面积、中心点距离、长宽比。v5 版本采用的就是最新的候选框损失函数CIOU 损失函数。
1.6.2 nms 非极大值抑制
在目标检测的后期处理中,针对很多目标框的筛选,通常需要nms 操作,简言之,通过设置阈值,筛选最像目标的候选框。YOLOv5 采用的是DIOU+nms 的方式,由图4 可见,v5 版本使用加权后的nms 后,物体识别时会有明显的加强效果,图4(b)箭头所指,原本被遮挡的目标也可以检出。
图4 NMS 和DIOU+NMSFig.4 NMS and DIoU +NMS
2 YOLOv5s 的算法训练
2.1 实验数据集的准备
火灾数据集比较少,所以通过coco 数据和网页爬取一部分数据自建了含有1 000 多张图片的数据集。对数据集的操作:(1)标注数据。使用的是labelme 标注工具,标注好的数据会保存为json类型的文件;(2)修改v5s 配置文件。YOLOv5目录下的model 文件夹是模型的配置文件,找到YOLOv5s 配置文件,将配置文件中的nc 改写成1;(3)转换标注数据格式。在YOLO 算法中,json文件的信息是识别不出来的,因为json 文件的标注框是绝对位置,YOLO 算法中能识别的是相对位置,所以需要转换;(4)数据集的配置。该步骤需要在YOLOv5 目录下的data 文件下创建一个fire.yaml 文本,将自建的训练集和验证集以及自建类别的名称和代号写到该文件中。
2.2 模型训练
训练开始之前,在train.py 文件中要修改几个参数:(1)epochs:训练过程中整个数据集将被迭代的次数,本次实验调到1 000,确保训练的稳定性;(2)batch-size:一次看完多少张图片才进行权重更新,由于设备问题,将其设置成8。(3)cfg:存储模型结构的配置文件,就是YOLOv5s.yaml 文件。(4)data:存储训练、测试数据的文件,也就是上文中的fire.yaml 文件。(5)weights:本文使用的权重文件是其他模型产生的权重文件,根据迁移学习。如果从0 开始训练,自建的1 000 张照片的数据集训练的模型效果不好或不佳,所以使用其他模型的权重文件进行训练,这样既能加快训练速度,又能保证模型精度。
2.3 训练结果分析
2.3.1 实验平台
实验硬件环境为英特尔酷睿i7-9750H 处理器,英伟达GTX1650 显卡,16 G 内存;软件环境为Win10 系统,Python3.7,所使用的深度学习框架为PyTorch。
2.3.2 训练数据结果和分析
首先得到的是训练集的精确率变化曲线,如图5 表示。从图5 可以看出,训练集通过1 000个epoch 后,精确率稳定在0.7 左右。平均精度值mAP 值在阈值0.5 情况下的曲线变化如图6 所示,1 000 个epoch 后稳定在0.6。通过这2 个评价指标,可以看出模型的性能是比较稳定的。
图5 训练集精确率变化曲线图Fig.5 Curve of accuracy rate of training set
图6 阈值0.5 下的mAP 值变化曲线图Fig.6 Map of mAP value under threshold value of 0.5
标签和训练效果的对比如图7 所示。从训练效果图中可以看出,火灾的置信度在0.8 以上,除个别图片未被召回外,其训练效果良好。
图7 标签图和训练效果图Fig.7 Label picture and training effect picture
3 树莓派实现
本文研究对象用的是树莓派4B[7]开发板,硬件和板载接口如图8 所示。
图8 树莓派4B 开发板硬件部分和板载接口图Fig.8 Hardware part and on-board interface diagram of Raspberry Pie 4B development board
3.1 模型移植
在Windows10 环境下使用PyTorch 深度学习框架实现算法的改进与训练,获得训练好的模型权重后,将算法与模型权重部署到树莓派上。由模型部署到移动端TFLite 上需要模型的转换,思路为:pt →ONXX →CoreML →tflite,然后将转换后的文件放入树莓派中指定的文件中。
3.2 实时结果
完成环境配置与模型移植后,可以进行实时监测实验。如图9 的监测结果所示,树莓派能正确无误地把火识别出来,并且实时性能指标FPS 为5.47,可以进行实时监测。
图9 实时监测结果Fig.9 Real-time monitoring results
4 结论
本文通过将YOLOv5 算法与基于Raspberry Pi设计的监控摄像头结合检测火灾。在PC 端得到火灾的训练模型,精度达到0.7,然后将算法移植到树莓派上,识别出了火灾,FPS 为5 左右,并能实时检测。该检测系统稳定可靠,成本低,较为流畅,具有广阔的应用场景。