1. 准备数据集
数据集使用的是开源图片,共 6k 张火灾图片,分别标注出浓烟
和火
两类。
火
浓烟
项目采用YOLO
训练,我已经把数据转成YOLO
格式,并分好了训练集和验证集,见dataset
目录。
2. 训练
训练过程参考YOLOv7官网文档即可。
修改data/coco.yaml文件,配置好训练数据的路径和类别。
下载预训练模型yolov7.pt,然后就可以开始训练了
3. 火灾监测
训练完成后,在yolov7目录下的run目录中,找到生成的模型文件——best.pt。
我训练好的模型放在源码weights目录中,名为fire.pt,大家可以直接使用。
有了模型,我们用它开发一个监测程序了。
首先,需要自行下载 yolov7 源码到当前工程里。
然后,安装pytorch,并用pytorch加载训练好的yolov7模型。
源码中有一个火灾视频fire_video.mp4,可以用opencv读取该视频,用来测试检测效果。
运行成功后,可以效果与文章开头中的视频一致。
可以把项目部署到嵌入式 GPU 上,如:jetson nano,来做实时检测。开发一个云通信服务,一旦发生火灾进行电话报警。
同时,还可以开发一个 APP ,将现场的视频流回传到服务器,APP可以实时看到监控效果,帮助决策。
4. 难点
其实用目标检测做火灾检测还是有一些难点的。如,干扰样本多,容易造成误检。再比如,标注不统一导致无法有效的计算mAP。
所以,最好我们能自定义损失函数和准召的计算方式。以召回为例,我们能检测出图片中有火灾就算成功,而不一定非要检测出多少个火苗和多少个烟雾。
当然,这类任务并非一定要通过目标检测来做。有朋友跟我提出用分类任务、分割任务,我觉得都可以去尝试。