yolo目標檢測技術之yolov11項目實戰(三)
文章目錄
- yolo目標檢測技術之yolov11項目實戰(三)
- 一、 基于 YOLO11 的火焰與煙霧檢測系統(實戰+代碼)
- 項目目標
- 環境搭建
- 創建虛擬環境
- 安裝依賴
- 1.1 數據集準備
- 1. 下載地址
- 2. 數據格式轉換(XML → TXT)
- 1.2 模型訓練
- 方法1:命令行訓練
- 方法2:Python 腳本訓練(推薦)
- 1.3 模型推理
- 方法1:命令行推理
- 方法2:Python 腳本推理(推薦)
- 1.4 常用參數對照表
- 1.5 性能驗證
- 1.6 模型優化建議
- 1.7 項目結構建議
- 結語
一、 基于 YOLO11 的火焰與煙霧檢測系統(實戰+代碼)
使用 YOLO11 實現實時火焰與煙霧檢測,支持圖像/視頻/攝像頭/RTSP 流輸入,適合部署與演示。
項目目標
功能 | 支持內容 |
---|---|
模型 | YOLO11(支持檢測/分割) |
輸入 | 圖像、視頻、攝像頭、RTSP |
輸出 | 火焰/煙霧檢測框、置信度 |
部署方式 | Python + PyTorch + OpenCV |
可視化界面 | 可擴展(如 Streamlit/Gradio) |
環境搭建
創建虛擬環境
conda create -n yolov11_env python=3.12
conda activate yolov11_env
安裝依賴
# CUDA 12.1(根據你顯卡驅動選擇)
pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu121# 安裝 ultralytics(YOLO11)
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
1.1 數據集準備
1. 下載地址
- GitHub:DFS-FIRE-SMOKE-Dataset
- 百度云:鏈接(提取碼:
pnxx
)
2. 數據格式轉換(XML → TXT)
YOLO 格式要求:
class_id x_center y_center width height
(歸一化)
import os
import xml.etree.ElementTree as ETclasses = ['_background_', 'fire', 'other', 'smoke']def parse_xml(xml_path, txt_path):for xml_file in os.listdir(xml_path):file_name = xml_file.split('.')[0]tree = ET.parse(os.path.join(xml_path, xml_file))root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)with open(os.path.join(txt_path, file_name + '.txt'), 'w') as f:for obj in root.findall('object'):cls = obj.find('name').textcls_id = classes.index(cls)bndbox = obj.find('bndbox')xmin = float(bndbox.find('xmin').text)ymin = float(bndbox.find('ymin').text)xmax = float(bndbox.find('xmax').text)ymax = float(bndbox.find('ymax').text)x_center = ((xmin + xmax) / 2) / wy_center = ((ymin + ymax) / 2) / hwidth = (xmax - xmin) / wheight = (ymax - ymin) / hf.write(f"{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")# 使用示例
if __name__ == '__main__':parse_xml('datasets/fire/Annotations', 'datasets/fire/labels')
1.2 模型訓練
方法1:命令行訓練
yolo detect train data=ultralytics/cfg/datasets/fire.yaml model=yolo11s.pt epochs=10 imgsz=640 batch=8 device=0 project=runs
方法2:Python 腳本訓練(推薦)
from ultralytics import YOLOif __name__ == "__main__":model = YOLO("yolo11s.pt") # 加載預訓練模型model.train(data="ultralytics/cfg/datasets/fire.yaml",epochs=10,batch=8,imgsz=640,device='0',project='runs')
1.3 模型推理
方法1:命令行推理
yolo predict model=runs/train/weights/best.pt source=datasets/fire/test.jpg save=True
方法2:Python 腳本推理(推薦)
from ultralytics import YOLOmodel = YOLO("runs/train/weights/best.pt")
results = model.predict(source="datasets/fire/test.jpg",save=True,conf=0.5,iou=0.6
)
1.4 常用參數對照表
參數名 | 含義說明 | 示例值 |
---|---|---|
data | 數據集配置文件路徑 | fire.yaml |
model | 模型權重路徑或結構路徑 | yolo11s.pt |
epochs | 訓練輪數 | 10 |
batch | 每批次圖像數量 | 8 |
imgsz | 輸入圖像尺寸 | 640 / 1280 |
conf | 置信度閾值(推理用) | 0.5 |
iou | NMS 閾值(推理用) | 0.6 |
device | 訓練/推理設備 | 0 / cpu |
save | 是否保存推理結果 | True |
1.5 性能驗證
yolo val model=runs/train/weights/best.pt data=ultralytics/cfg/datasets/fire.yaml conf=0.5 iou=0.6
類別 | mAP50 | mAP50-95 |
---|---|---|
fire | 0.617 | 0.408 |
smoke | 0.534 | 0.337 |
other | 0.402 | 0.257 |
1.6 模型優化建議
優化方式 | 操作建議 |
---|---|
提高輸入分辨率 | imgsz=1280 |
數據增強 | mixup=0.36, copy_paste=0.33 |
使用更大模型 | yolo11m.pt / yolo11l.pt |
調整閾值 | conf=0.3~0.6, iou=0.5~0.7 |
加入注意力機制 | 可嘗試 C2PSA 模塊 |
1.7 項目結構建議
ultralytics/
├── datasets/
│ └── fire/
│ ├── images/train
│ ├── images/val
│ ├── labels/train
│ └── labels/val
├── runs/
│ └── train/
│ └── weights/
│ ├── best.pt
│ └── last.pt
└── my_train.py / my_detect.py
結語
本項目適合作為 YOLO11 入門實戰項目,覆蓋從數據準備、訓練、推理到部署的完整流程。后續可擴展為:
- Web 檢測界面(Gradio/Streamlit)
- RTSP 實時流檢測
- 邊緣設備部署(Jetson Nano)
如需完整源碼或部署腳本,歡迎留言或私信交流!