首页  >  文章  >  科技周边  >  训练YOLOv7模型,开发AI火灾监测

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

王林
王林转载
2023-05-11 13:43:06919浏览

1. 准备数据集

数据集使用的是开源图片,共 6k 张火灾图片,分别标注出​​浓烟​​​和​​火​​两类。

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

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

浓烟

项目采用​​YOLO​​​训练,我已经把数据转成​​YOLO​​​格式,并分好了训练集和验证集,见​​dataset​​目录。

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

2. 训练

训练过程参考YOLOv7官网文档即可。

修改data/coco.yaml文件,配置好训练数据的路径和类别。

下载预训练模型yolov7.pt,然后就可以开始训练了

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

3. 火灾监测

训练完成后,在yolov7目录下的run目录中,找到生成的模型文件——best.pt。

我训练好的模型放在源码weights目录中,名为fire.pt,大家可以直接使用。

有了模型,我们用它开发一个监测程序了。

首先,需要自行下载 yolov7 源码到当前工程里。

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

然后,安装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。

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

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

以上是训练YOLOv7模型,开发AI火灾监测的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:51cto.com。如有侵权,请联系admin@php.cn删除