運用 Colab 進行 YOLOv8 實行火焰烟霧識別模型 === ###### tags: `GDG on Campus FCU 2024/25` {%youtube 1I9pAptJXUA%} ## 操作步驟 ### 建立筆記本 1. 打開 Google Colab,進入「開啟筆記本」彈窗後選擇「GitHub」欄位 2. 將教材文件內的 github 連結複製到彈窗的文字匡內 3. 等待存放區出現下拉選單選擇「Abonia1/Fire-and-Smoke-Detection」 4. 等待 ipynb 連結出現後點選進入筆記本內 ![截圖 2025-04-22 凌晨12.17.38](https://hackmd.io/_uploads/B1RoygE1xl.png) ### 指令介紹 查詢虛擬機分配的 GPU 狀態 也會列出像是 CPU 型號、使用率、驅動版本...等詳細資訊 ```shell !nvidia-smi ``` 將 google drive 掛載到筆記本內 ```python from google.colab import drive drive.mount('/content/drive') ``` 設定工作目錄並且print出檢查 ```python HOME = "/content/drive/MyDrive/FireDetection" print(HOME) ``` 安裝 ultralytics 套件,下載後清除輸出,檢查環境是否符合 YOLOv8 使用需求 ```python # Pip install method (recommended) !pip install ultralytics from IPython import display display.clear_output() import ultralytics ultralytics.checks() ``` 匯入 YOLO 模型 & 圖片顯示功能 ```python from ultralytics import YOLO from IPython.display import display, Image ``` 在筆記本內「💻 CLI」段落可以指令介面執行跑跑看官方範例 CLI 適合快速 demo,但回傳不易編輯 「🐍 Python SDK」是在寫python程式時可使用的工具包/套件,較為複雜但全面 本次課程會使用「💻 CLI」實作 ```python results[0].boxes.xyxy # 框的座標 results[0].boxes.conf # 信心度 results[0].boxes.cls # 類別 ``` 操作至此可先至下方「製作 Roboflow 自訂資料集」段落了解資料集是怎麼製作的 將教材文件內程式碼複製到相似的方塊內運行導入資料集 ```python !mkdir {HOME}/datasets %cd {HOME}/datasets !pip install roboflow --quiet from roboflow import Roboflow rf = Roboflow(api_key="xxxxxxx") project = rf.workspace("weiyolo").project("fire-fpaaz") dataset = project.version(11).download("yolov8") ``` 按下執行「Custom training」區塊內的程式碼方塊即可進行模型訓練(需數小時時間) ### 製作 Roboflow 自訂資料集 gif 皆來自 https://github.com/Abonia1/YOLOv8-Fire-and-Smoke-Detection.git 筆記本 1. 登入 [Roboflow](https://app.roboflow.com/login) 2. 建立專案 New Project ![](https://ik.imagekit.io/roboflow/preparing-custom-dataset-example/creating-project.gif?ik-sdk-version=javascript-1.4.3&updatedAt=1672929799852 =75%x) 記得選取「Object Detection」 3. 上傳圖片 Upload Data ![](https://ik.imagekit.io/roboflow/preparing-custom-dataset-example/uploading-images.gif?ik-sdk-version=javascript-1.4.3&updatedAt=1672929808290 =75%x) 4. 使用 [Annotate](https://docs.roboflow.com/annotate) 貼標籤 ![](https://user-images.githubusercontent.com/26109316/210901980-04861efd-dfc0-4a01-9373-13a36b5e1df4.gif =75%x) 5. 產生新的資料集版本 Create New Version ![](https://media.roboflow.com/preparing-custom-dataset-example/generate-new-version.gif?ik-sdk-version=javascript-1.4.3&updatedAt=1673003597834 =75%x) 6. 匯出資料集 Download Dataset,選取「Code」選項 會跳出程式碼,及 API key ![](https://ik.imagekit.io/roboflow/preparing-custom-dataset-example/export.gif?ik-sdk-version=javascript-1.4.3&updatedAt=1672943313709 =75%x) ### 輸出結果 輸出產出物件、檔案 ```python !ls {HOME}/runs/detect/train/ ``` ``` args.yaml train_batch1.jpg confusion_matrix.png train_batch2.jpg events.out.tfevents.1675348815.43529bab29be.37247.0 train_batch825.jpg F1_curve.png train_batch826.jpg P_curve.png train_batch827.jpg PR_curve.png val_batch0_labels.jpg R_curve.png val_batch0_pred.jpg results.csv val_batch1_labels.jpg results.png val_batch1_pred.jpg train_batch0.jpg weights ``` 輸出混淆矩陣圖 ```python %cd {HOME} Image(filename=f'{HOME}/runs/detect/train/confusion_matrix.png', width=600) ``` ![image](https://hackmd.io/_uploads/BJEH3g41xl.png =75%x) Fire 被成功偵測 fire 為 true 有 0.89,偵測為 background 有 0.11 輸出數據圖 ```python %cd {HOME} Image(filename=f'{HOME}/runs/detect/train/results.png', width=600) ``` ![image](https://hackmd.io/_uploads/rkwcTeVylx.png =75%x) 上半部為訓練集,下半部為驗證集 前三個 loss 越低越好 右兩個為越高越好 由左至右為「邊界判別損失」、「類別判別損失」、「細節判別損失」、「精確率」、「召回率」 輸出結果集合圖 ```python %cd {HOME} Image(filename=f'{HOME}/runs/detect/train/val_batch0_pred.jpg', width=600) ``` 輸出模型數據 表示模型性能 ```python %cd {HOME} !yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml ``` ``` /content/drive/MyDrive/FireDetection Ultralytics YOLOv8.0.20 🚀 Python-3.8.10 torch-1.13.1+cu116 CUDA:0 (Tesla T4, 15110MiB) Model summary (fused): 168 layers, 11126745 parameters, 0 gradients, 28.4 GFLOPs val: Scanning /content/datasets/fire-8/valid/labels.cache... 47 images, 0 backgrounds, 0 corrupt: 100% 47/47 [00:00<?, ?it/s] Class Images Instances Box(P R mAP50 mAP50-95): 100% 3/3 [00:02<00:00, 1.13it/s] all 47 48 0.828 0.878 0.857 0.459 Fire 47 18 0.761 0.889 0.794 0.376 smoke 47 30 0.895 0.867 0.919 0.543 Speed: 4.9ms pre-process, 17.2ms inference, 0.0ms loss, 1.9ms post-process per image ```