训练YOLOv7模型,开发AI火灾监测

人工智能
们能自定义损失函数和准召的计算方式。以召回为例,我们能检测出图片中有火灾就算成功,而不一定非要检测出多少个火苗和多少个烟雾。

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_detector = torch.hub.load('./yolov7', 'custom', './weights/fire.pt', source='local')

源码中有一个火灾视频fire_video.mp4,可以用opencv读取该视频,用来测试检测效果。

ret, frame = cap.read()
results = self.fire_detector(img_cvt)
pd = results.pandas().xyxy[0]

# 绘制检测框
for obj in pd.to_numpy():
box_l, box_t = int(obj[0]), int(obj[1])
box_r, box_b = int(obj[2]), int(obj[3])
obj_name = obj[6]

if obj_name == 'smoke':
box_color = (0, 0, 255)
box_txt = '检测到浓烟'
else:
box_color = (0, 255, 0)
box_txt = '检测到大火'

frame = cv2.rectangle(frame, (box_l, box_t), (box_r, box_b), box_color, 2)
frame = cv2_add_chinese_text(frame, box_txt, (box_l, box_t-40), box_color, 25)

运行成功后,可以效果与文章开头中的视频一致。

可以把项目部署到嵌入式 GPU 上,如:jetson nano,来做实时检测。开发一个云通信服务,一旦发生火灾进行电话报警。

同时,还可以开发一个 APP ,将现场的视频流回传到服务器,APP可以实时看到监控效果,帮助决策。

4. 难点

其实用目标检测做火灾检测还是有一些难点的。如,干扰样本多,容易造成误检。再比如,标注不统一导致无法有效的计算mAP。

所以,最好我们能自定义损失函数和准召的计算方式。以召回为例,我们能检测出图片中有火灾就算成功,而不一定非要检测出多少个火苗和多少个烟雾。

当然,这类任务并非一定要通过目标检测来做。有朋友跟我提出用分类任务、分割任务,我觉得都可以去尝试。

责任编辑:武晓燕 来源: 渡码
相关推荐

2024-05-28 10:04:00

2022-07-11 09:24:55

模型AI检测

2023-05-09 10:16:42

人工智能python版本

2024-03-25 11:37:40

机器学习人工智能进化算法

2024-07-09 08:50:23

2024-11-04 00:24:56

2023-01-10 18:33:18

AIYOLO网络

2024-07-01 12:55:50

2023-08-01 15:46:18

数据

2024-02-19 00:21:45

开源图片

2023-09-06 13:17:00

AI数据

2023-05-25 14:28:47

DarkBERT自暗网AI

2024-09-26 00:11:01

2024-09-20 17:41:07

2023-10-31 12:45:00

智能数据

2023-02-13 14:43:04

IBM云原生AI

2020-03-27 13:33:21

阿里安全AIAI模型

2023-03-30 11:08:49

AI模型训练

2023-11-10 07:11:02

OpenAIAI
点赞
收藏

51CTO技术栈公众号