資料集使用的是開源圖片,共6k 張火災圖片,分別標註出濃煙
和火
兩類。
火
。濃煙
專案採用YOLO
訓練,我已經把資料轉換成YOLO
格式,並分好了訓練集和驗證集,請參閱dataset
目錄。
訓練過程參考YOLOv7官網文件即可。
修改data/coco.yaml文件,配置訓練資料的路徑和類別。
下載預訓練模型yolov7.pt,然後就可以開始訓練了
訓練完成後,在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可以即時看到監控效果,幫助決策。
其實用目標偵測做火災偵測還是有些困難的。如,幹擾樣本多,容易造成誤檢。再例如,標註不統一導致無法有效的計算mAP。
所以,最好我們能自訂損失函數和準召的計算方式。以召回為例,我們能偵測到圖片中有火災就算成功,而不一定要偵測出多少個火苗和多少個煙霧。
當然,這類任務並非一定要透過目標偵測來做。有朋友跟我提出用分類任務、分割任務,我覺得都可以嘗試。
以上是訓練YOLOv7模型,開發AI火災監測的詳細內容。更多資訊請關注PHP中文網其他相關文章!