基于YOLOX的火灾报警系统
2021-12-17孙家豪李丹
孙家豪,李丹
(四川大学锦城学院,四川成都,611371)
0 引言
据应急管理部消防救援局统计2020年全国共接报火灾25.2万起,死亡1183人,受伤775人,直接财产损失40.09亿元[1]。8.12天津滨海新区爆炸造成165人死亡,近两年四川凉山州曾发生两次森林大火分别造成19人和31人遇难。这些生命的逝去让我们痛惜,同时让我们思考有没有更好的方法预防火灾的发生,我们需要通过高科技的手段科学有效的预防火灾。随着近几年机器学习和计算机硬件技术的飞速发展,在火灾产生初期,火灾不易被发现从而造成更大的生命财产损失的情况可以得到极为有效的改善。我们开发的YOLOX火灾报警系统可以部署在各种环境下,如森林、草原、楼道等等,在火灾发生初期迅速地提醒人们,避免更大的损失。本文通过介绍YOLOX的算法结构、YOLOX的改进、识别结果的正确率,以及最终在实际环境中的火灾识别表现,说明YOLOX的火灾报警系统。
1 研究背景
■1.1 YOLOX简介
YOLO(You Only Look Once)系列是目标检测算法的重要组成,其中的YOLO V3[2]在现实生活中的应用是最为广泛的,最新版本YOLOX在2021年被旷视科技公司提出。相比于以前的YOLO系列,YOLOX的检测速度更快,检测精确度更高,端对端部署更加灵活。
■1.2 YOLOX网络结构
这里我们主要介绍YOLOX-Darknet53网络结构图。下面的图1是YOLOX-Darknet53网络结构图。我们将其分解为四个板块,分别是输入端、Backbone骨 干 网 络、Neck、Prediction。
图1 YOLOX-Darknet53网络结构图
(1)输入端:YOLOX采用了以前YOLO版本使用的Mosaic、Mixup两种数据增强技术。
(2)Backbone骨干网络:采用了Darket-53网络。它一共有53层卷积网络,最后一层为全连接层,其实是通过1x1卷积实现的。总共52个卷积用于当做主体网络。
(3)Neck:采用了FPN的结构进行融合。FPN可以巧妙的将金字塔高层特征和低层特征利用,即高层高语义的特征和低层图片高分辨率的特征,这样更有利于提升模型的性能和小目标的检测能力。
(4)Prediction:采用了解耦头(Decoupled Head)、Anchor-free检测器、标签分配策略SimOTA(Simplified Optimal Transport Assignment)、Loss计算。
■1.3 YOLOX的改进
虽然YOLO系列是十分优秀的目标检测模型,但是这个系列的模型没有吸收最近几年在目标检测领域出现的Anchor-free检测器、更为优秀的LabelAssignment技巧、端到端检测器(NMS-free),YOLOX针对这些问题进行了优化,它主要提出了以下三个方法:
(1)将YOLO检测器和无锚框(Anchor-free)检测器结合;(2)加入解耦头(Decoupled Head);(3)加入标签分配策略SimOTA(Simplified Optimal Transport Assignment)。
1.3.1 无锚框(Anchor-free)检测器
YOLO系列中的旧版本均未搭载Anchor-free检测器,它们都搭载了Anchor-based检测器,而YOLOX搭载了Anchor-free检测器。相比于Anchor-free检测器,Anchor-based检测器存在一些问题。第一,在检测前,为了实现最佳性能,我们需要分析最优锚框,这些锚框只能用于特定区域,通用性很差。第二,锚框增加了模型的复杂性和图片的预测数量。
经过这几年的发展,Anchor-free的检测速度和精度已经和Anchor-based差不多,其次Anchor-free检测器在训练和解码阶段变得十分简单。
作者将YOLO变成一个无锚方式。将每个位置的预测数量从3减少到1,并使它们直接预测4个参数,也就是网格左上角的两个偏置,即预测框的高和宽。作者分配每个物体的中心点为正样本并预先标定一个比例范围,这样便于指定每个物体的FPN级。这样的修改减少了参数和检测器的GFLOPs,使它更检测速度快,而且准确率更高。
1.3.2 解耦头(Decoupled Head)
解耦头是目标识别领域是十分常见的,主要是人们目标检测中,分类和回归会产生冲突的问题。个人认为原因是分类和回归的特征不一样,分类问题需要考虑每一个样本的差异,而回归问题更多的考虑是物体图像轮廓边界特征。随着YOLO系列的骨干网和特征金字塔不断地发展,它们的检测头会产生耦合的问题。
作者通过实验分析耦合的检测头对性能会产生不利影响。作者的做法是:(1)将YOLO的头用一个解耦替代,提高了模型的收敛速度。(2)解耦头对端到端版本的YOLO会有极其重要的影响。具体来说就是作者将YOLO检测头用一个轻量解耦头替代。这个解耦头包含一个1×1卷积层,通过这个卷积层减少通道维度,卷积层后面接着两个带有两层3×3 卷积层的并行分支。
1.3.3 标签分配策略SimOTA(Simplified Optimal Transport Assignment)
要理解SimOTA必须要了解OTA[3]。OTA[3]解决的问题是anchorassignment问题,一般我们在分配正负样本的时候是根据gt的iou与anchor进行分配,作者认为检测目标在不同的遮挡情况、不同的大小、不同的形状正样本和负样本的分界线是不同的,同时正负样本的分配需要考虑全局。所以我们通常把anchor assignment当成一个线性规划中的优化传输问题(Optimal Transport)来处理,核心思想是建立一个代价矩阵,假设有M个gt与N个anchor,那么代价矩阵的大小就是M×N,矩阵中的每个元素就是该gt与anchor的loss值,loss越大则说明选取这对gt和anchor的代价越大,优化传输的目的是去选取gt与anchor的匹配对,使总体代价最小。YOLOX的作者发现用Sinkhorn-Knopp算法解决优化传输问题会额外花费25%的训练时间。所以作者省去了Sinkhorn-Knopp算法过程,简称为动态top-k策略。
2 YOLOX火灾报警系统框架流程图
如图2所示是我们的YOLOX火灾报警系统的框架图。这三个层面负责人机界面交互和实时的发出警报,分别是实体层、识别层和现实层。
图2 YOLOX火灾报警系统框架图
实体层:我们可以将摄像头放置在易发生火灾的地方。摄像头负责采集图像资料,然后将图像资料储存在系统中,并将图像实时的传输给模型。
识别层:识别层就是我们的图像处理层。它负责将系统中的图像进行处理,通过我们训练的YOLOX网络模型对摄像头所处环境是否发生火灾进行识别,如果识别有火灾发生,就将警报发送给消防人员。
现实层:消防人员赶到模型识别有火灾发生的地方,进行扑灭。这样在火灾初期就可以进行有效的应对,避免更大的损失。
3 数据集
我们使用了网上的火灾数据集,数据集的下载地址为fire-smoke-detect-yolov4/README_EN.md at master · gengyanlei/fire-smoke-detect-yolov4 · GitHub。此数据集一共有2058张图片,包含了各种场景下的火灾,如家庭起火、商场起火、森林起火、车辆起火等等情况,这样的好处是使得我们的YOLOX模型可以识别各种场景下的火灾,适应性更好。训练环境是CUDA 11.1 nvidia-smi 460.73.01,Python3.7.10,显卡NVDIA Tesla P40 24GB。
第一,在配置环境的时候,程序会报错,我们发现是因为pytorch安装的1.9版本,cuda张量无法安装,换成1.8版本可以运行。第二,我们将数据集转换成COCO格式,但是模型无法读取数据。经过我们研究发现是转换过程中没有严格按照格式进行转换。第三,出现了显存溢出的问题,我们将默认训练的300 epoches改为200 epoches。
4 模型训练
■4.1 模型优化过程
我们采用的是YOLOX-S模型,这个模型更加着重于模型的推理速度。因为火灾的发展速度是刻不容缓的,需要选用识别速度更快的模型。图3是我们通过调参训练获得到的loss下降图。cls_loss表示模型的目标分类损失,conf_loss表示模型的置信度损失,iou_loss表示模型的边框回归损失,这里的iou_loss用的是GIOULoss,lr表示模型的学习率,优化器采用的是SGD优化器,优化策略用的是带有 warmup 策略的余弦调度策略。COCOAP50和COCOAP50_95:验证用的是COCO的map的计算方式,其中AP指的是准确率(Precision)和召回率(Recall)作为X,Y轴作图围成的面积,50指的是iou设置为0.5时的AP值, 50_95指的是iou设置为0.5~0.95,以0.05为步长计算AP的平均值。
图3 loss下降图
我们的训练过程主要修改的是num_classes根据任务改为1, 采用fine-tune训练,epoch数设置为200,batch-size设置为32,input-size默认的[640,640],关闭flip数据增强,降低mosaic和mixup数据增强,其他均采用默认。
■4.2 模型训练结果
我们的YOLOX经过训练后对火灾的识别是十分不错的。识别结果如图4所示,无论是汽车起火(图四左侧)、住宅起火(图四居中)还是森林起火(图四右侧),YOLOX模型都可以得到一个很高的识别率,其中对于较小火焰(图四居中图片左侧)也有不错的识别率。
图4 训练结果
5 结语
火灾一直是人类社会发展的心腹大患,人们在使用火的同时一直在总结火灾发生的规律,然而我们仍无法避免火灾的发生,火灾无时无刻的威胁着社会发展和人们的生命财产安全。美国、欧洲和中国都曾经发生过大火灾,面对火灾,一方面我们的消防安全意识仍然急需加强,另一方面我们需要利用高科技的手段去应对火灾,如本文所应用的YOLOX目标检测算法,它的优点是识别速度快、可以布置在各种环境中,可以全时段、全天候地检测火灾的发生。在这次研究中我们对计算机视觉有了更加深入的认识。此次研究工作也有很多不足,例如数据集不够丰富,我们期待未来有更多性能超越YOLOX的针对火灾的检测算法。