其他分享
首页 > 其他分享> > 火灾烟雾检测

火灾烟雾检测

作者:互联网

1 项目说明

据统计,2020年全国共接报火灾25.2万起,直接财产损失高达40.09亿元。火灾已经成为危害人们生命财产安全的一种多发性灾害。

针对住宅、加油站、公路、森林等火灾高发场景,应用飞桨PaddleX的目标检测技术,可以自动检测监控区域内的烟雾和火灾,帮助相关人员及时应对,最大程度降低人员伤亡及财物损失,模型效果如图所示。

希望通过梳理优化模型精度和性能的思路能帮助用户更高效地解决实际火灾和烟雾检测应用中的问题。开放烟雾和火灾数据和预训练模型,并提供服务器Serving和Jetson NX边缘侧芯片的部署指南。

方案难点

注:本地、服务器运行代码下载和使用教程请参考火灾烟雾检测

2 安装说明

环境要求

安装的相关问题参考PaddleX安装

下载PaddleX源码

本项目中已经帮大家下载好了最新版的PaddleX,无需下载,只需安装环境~

如仍需安装or安装更新,可以执行以下步骤

!git clone https://github.com/PaddlePaddle/PaddleX.git -b develop
# 安装环境
!unzip -q PaddleX.zip
%cd /home/aistudio/PaddleX
!git checkout develop
!pip install -r requirements.txt
!python setup.py install

3 数据准备

本案例使用数据集包含MIT协议互联网下载图片MIT协议公开数据集,共有6675张图片,分别检测烟雾和火灾,示例图片如下图所示:

数据集图片格式是VOC数据格式,VOC数据是每个图像文件对应一个同名的xml文件,xml文件内包含对应图片的基本信息,比如文件名、来源、图像尺寸以及图像中包含的物体区域信息和类别信息等。

xml文件中包含以下字段:

将这6675张图片按9:1比例随机切分,切分后包含6008张图片的训练集和667张图片的验证集,提供处理好的数据集,下载地址。包含以下文件夹和文件:images,annotations,labels.txt, train_list.txtval_list.txt,分别图片、xml标注文件、存储类别信息、训练样本列表、验证样本列表。训练样本列表和验证样本列表的每一行格式为:图片路径 对应的xml路径,例如images/fire_00348.jpg annotations/fire_00348.xml

数据处理命令如下,执行一次即可。

!mkdir /home/aistudio/dataset/
%cd /home/aistudio/dataset/
!mv /home/aistudio/data/data107770/train_list.txt ./
!mv /home/aistudio/data/data107770/val_list.txt ./
!mv /home/aistudio/data/data107770/labels.txt ./
!unzip -q /home/aistudio/data/data107770/images.zip -d ./
!unzip -q /home/aistudio/data/data107770/annotations.zip -d ./
%cd ..

最终数据集文件组织结构为:

 ├── dataset
	├── annotations
  │   ├── fire_000001.xml
  │   ├── fire_000002.xml
  │   ├── fire_000003.xml
  │   |   ...
  ├── images
  │   ├── fire_000001.jpg
  │   ├── fire_000003.jpg
  │   ├── fire_000003.jpg
  │   |   ...
  ├── label_list.txt
  ├── train.txt
  └── valid.txt

模型选择

PaddleX提供了5种目标检测模型:FasterRCNN、YOLOV3、PPYOVO、PPYOLOv2和PPYOLOTiny。

根据部署场景以及烟火检测实时性、高召回低误检要求,这里我们选择了PPYOLOV2算法进行火灾和烟雾检测。

5 模型训练

本项目采用PPYOLOV2作为烟火检测的模型,模型训练需要经过如下环节:

具体代码请参考train.py,可修改参数:

PaddleX提供了单卡/多卡训练模型,满足用户多种训练需求:

import warnings
warnings.filterwarnings('ignore')
# GPU单卡训练
%cd /home/aistudio/code/
!python 1.train_ppyolov2_imagenet.py

# GPU多卡训练,例如使用2张卡时执行:
# export CUDA_VISIBLE_DEVICES=0,1 #windows和Mac下不需要执行该命令
# python -m paddle.distributed.launch --gpus 0,1 1.train_ppyolov2_imagenet.py

6 模型评估

因为采用多个数据集一起训练,每个数据集标注方式不同,如下图左数据集A将火标注为一个检测框,但是下图右数据集B又将火标注为多个检测框。

不同的标注方式就导致训练好的模型,无法有效的计算mAP值。我们可以通过下图从两方面分析:

综上,我们计算不同置信度阈值下图片级召回率和图片级误检率,找到符合要求的召回率和误检率,对应的置信度阈值用于后续模型预测阶段。使用PPYOLOV2训练好的模型进行评估,运行下行命令即可:

!python eval.py

得到PPYOLOV2烟雾和火灾检测指标,召回相对达到预期,但是召回比较高,后续我们将一起探究如何降低误检率:

模型召回率/%误检率/%
PPYOLV2+ResNet5095.123.22

【名词解释】

7 模型预测

加载训练好的模型,置信度阈值设置为0.4,执行下行命令对验证集或测试集图片进行预测:

python predict.py

可视化预测结果示例如下,可以看出室内的火灾也可以有效检测出来:

注:图片来源于互联网,侵权删稿

8 模型导出

在模型训练过程中保存的模型文件是包含前向预测和反向传播的过程,在实际的工业部署则不需要反向传播,因此需要将模型进行导成部署需要的模型格式。 执行下面命令,即可导出模型

!paddlex --export_inference --model_dir=./output/deeplabv3p_r50vd/best_model/ --save_dir=./inference_model

预测模型会导出到inference_model/目录下,包括model.pdmodelmodel.pdiparamsmodel.pdiparams.infomodel.ymlpipeline.yml五个文件,分别表示模型的网络结构、模型权重、模型权重名称、模型的配置文件(包括数据预处理参数等)和可用于PaddleX Manufacture SDK的流程配置文件。

9 模型推理

接下来使用PaddleX python高性能预测接口,在终端输入以下代码即可,同时可以通过以下代码进行速度预测:

!python
!import paddlex as pdx
!predictor = pdx.deploy.Predictor('./inference_model')
!result = predictor.predict(img_file='test_imgs/test.jpg',warmup_iters=100,repeats=100)

# 或执行下面命令:
# python infer.py

关于预测速度的说明:加载模型后,前几张图片的预测速度会较慢,这是因为运行启动时涉及到内存显存初始化等步骤,通常在预测20-30张图片后模型的预测速度达到稳定。如果需要评估预测速度,可通过指定预热轮数warmup_iters完成预热为获得更加精准的预测速度,可指定repeats重复预测后取时间平均值

10 模型优化

本小节侧重展示在模型迭代过程中优化精度的思路,在本案例中,有些优化策略获得了精度收益,而有些没有。在其他质检场景中,可根据实际情况尝试这些优化策略,具体请参考模型优化文档

10.1 模型优化策略

10.2 推理时间计算方式

采用PaddleX在单卡Tesla V100上测试模型的推理时间(输入数据拷贝至GPU的时间、计算时间、数据拷贝至CPU的时间),推理时间取100次推理取平均耗时,即9 模型推理repeats参数设置为100。

10.3 不同模型结果

我们可以运行code文件夹下的训练文件,进行不同模型的训练,文件名的第一个数字和下表的序号相对应。

序号模型推理时间(FPS)RecallError Rate
1PPYOLV2+ResNet50+ImageNet预训练(Baseline)2495.123.22
2PPYOLV2+ResNet50+ImageNet预训练+aug-94.114.9
3PPYOLV2+ResNet50+COCO预训练-97.428.6
4PPYOLOV2+ResNet50+COCO预训练+aug-96.311.1
5PPYOLV2+ResNet50+COCO预训练+aug+SPP=False-9613.21
6PPYOLV2+ResNet50+aug+COCO预训练+背景图23.693.91.1
7PPYOLV2+ResNet101+aug+COCO预训练+背景图21962.2
8PPYOLO+ResNet50+COCO预训练+aug2090.08.81
9YOLOV3+DarkNet53+COCO预训练+img_size(640)2188.46.01

说明:

模型优化思路

通过以上的简单优化方式,获取了两个较好的模型结果:【前者模型速度更快、后者召回更高

模型推理时间(FPS)RecallError Rate
PPYOLV2+ResNet50+aug+COCO预训练+SPP+背景图23.693.91.1
PPYOLV2+ResNet101+aug+COCO预训练+SPP+背景图21962.2

11 模型部署

在项目中为用户提供了基于Jetson NX的部署Demo方案,支持用户输入单张图片、文件夹、视频流进行预测。用户可根据实际情况自行参考。

an

数据来源

本案例数据集来源于:https://github.com/gengyanlei/fire-smoke-detect-yolov4https://aistudio.baidu.com/aistudio/datasetdetail/90352/0

更多资源

标签:烟雾,训练,PaddleX,检测,模型,aistudio,火灾,图片
来源: https://blog.csdn.net/m0_63642362/article/details/121371482