首頁  >  文章  >  科技週邊  >  訓練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刪除