YOLO — YOLO11模型以及項目詳解
文章目錄
- YOLO --- YOLO11模型以及項目詳解
- 一,開源地址
- 二,重要模塊
- 2.1 C3K2
- 2.2 C2PSA
- 2.3 檢測頭
- 三,網絡結構
- 3.1 整體結構劃分
- 3.2 Backbone 結構分析(從下往上看)
- 3.3 結構分析(特征融合)
- 3.4 Head 檢測頭
- 3.5 關鍵模塊說明
- 3.7 模型主要特點
- 3.8 模型對比
- 四,開源項目
- 4.1 下載源碼
- 4.2 新建環境
- 4.3 安裝包
- 4.4 下載推理文件
- 4.5 數據集
- 4.6 檢測文件
- 4.7 模型訓練
- 五,優缺點
一,開源地址
-
官方文檔:https://github.com/ultralytics/ultralytics
-
開發文檔:https://docs.ultralytics.com/
二,重要模塊
2.1 C3K2
-
C3K2 模塊 是基于 C2F 模塊 的一種變體,它代碼中有一個設置
- 當
C3K2
參數為False
時,模塊內部使用普通 Bottleneck - 當
C3K2
參數為True
時,模塊內部使用 C3k 結構
- 當
-
代碼中的 C3K2 的使用:
[-1, 2, C3k2, [256, False, 0.25]]
- -1:該模塊的輸入來自哪一個模塊的輸出。-1 表示當前 C3k2 模塊的輸入 來自上一個模塊的輸出
- 2:表示模塊內包含 2 個 C3k 或 Bottleneck 模塊(具體數量需要根據網絡版本的深度系數進行調整)
- C3K2:模塊名稱,等于搭建該模塊的類的名稱,用于找到該類去搭建模塊
- 256:輸出通道數(實際輸出通道數需要乘以寬度系數
width
) - False:True 表示內部使用 C3k 模塊;False 表示內部使用 Bottleneck
- 0.25:用于控制 C3K2 模塊中的通道數
2.2 C2PSA
- C2PSA 是對 C2f 模塊的擴展,它結合了 PSA(Pointwise Spatial Attention)塊,用于增強特征提取與和注意力機制,C2PSA 實現了加入 PSA 塊,實現了更強大的注意力機制,從而提高了模型對重要特征的捕捉能力
- C2PSA 模塊由兩部分構成:C2f 分支結構、PSA(Pointwise Spatial Attention)塊
- 代碼中 C2PSA 的使用:
[-1, 2, C2PSA, [1024]]
- -1:該模塊的輸入來自哪一個模塊的輸出。-1表示 當前 C3k2 模塊的輸入 來自上一個模塊的輸出
- 2:模塊內需要使用幾個 PSA 模塊(具體數量需要根據網絡版本的深度系數進行調整)
- C2PSA:模塊名稱
- 1024:輸出通道數(實際輸出通道數需要乘以寬度系數
width
)
2.3 檢測頭
- YOLO11 在原先的 2 個解耦分類檢測頭中,進一步增加了兩個深度可分離卷積(DWConv),提高了模型的特征提取能力
- 代碼中 C2PSA 的使用:
[[16, 19, 22], 1, Detect, [nc]]
- [16, 19, 22]:第16、19、22 模塊的的輸出,作為 Detect 檢測頭的輸入
- 1:模塊重復次數,檢測頭的重復次數一般都為 1,檢測頭通常不重復
- Detect:模塊名稱,等于搭建該模塊的類的名稱,用于找到該類去搭建模塊
- nc:類別數
三,網絡結構
3.1 整體結構劃分
模塊名稱 | 作用 | 備注 |
---|---|---|
Backbone | 特征提取 | 從輸入圖像中提取多尺度特征 |
Neck | 特征融合 | 使用 FPN + PAN 結構進行多尺度特征融合 |
Head | 檢測頭 | 輸出分類、框回歸、置信度等信息 |
3.2 Backbone 結構分析(從下往上看)
層 | 模塊 | 輸出尺寸 | 說明 |
---|---|---|---|
輸入 | Input | 3×640×640 | 輸入圖像 |
1 | CBS | 16×320×320 | 初始卷積,通道從 3 → 16 |
2 | C3K2 | 32×160×160 | 輕量級殘差模塊,通道翻倍,寬高減半 |
3 | CBS | 64×80×80 | 繼續下采樣 |
4 | C3K2 | 64×80×80 | 保持尺寸,增強特征 |
5 | CBS | 128×40×40 | 下采樣 |
6 | C3K2 | 128×40×40 | 特征提取 |
7 | CBS | 256×20×20 | 下采樣 |
8 | C3K2 | 256×20×20 | 特征提取 |
9 | SPPF | 256×20×20 | 空間金字塔池化,增強感受野 |
3.3 結構分析(特征融合)
層 | 模塊 | 輸出尺寸 | 說明 |
---|---|---|---|
10 | C2PSA | 256×20×20 | 引入注意力機制(PSA) |
11 | Upsample | 256×40×40 | 上采樣 |
12 | Contact | 384×40×40 | 與 Backbone 中同尺寸特征拼接 |
13 | C3K2 | 256×40×40 | 融合特征 |
14 | Upsample | 128×80×80 | 繼續上采樣 |
15 | Contact | 192×80×80 | 與更淺層特征拼接 |
16 | C3K2 | 128×80×80 | 輸出 P3 層(小目標) |
17 | CBS | 128×40×40 | 下采樣 |
18 | Contact | 384×40×40 | 與中層特征拼接 |
19 | C3K2 | 256×40×40 | 輸出 P4 層(中目標) |
20 | CBS | 256×20×20 | 下采樣 |
21 | Contact | 512×20×20 | 與深層特征拼接 |
22 | C3K2 | 256×20×20 | 輸出 P5 層(大目標) |
3.4 Head 檢測頭
層 | 模塊 | 輸出尺寸 | 說明 |
---|---|---|---|
P3/P4/P5 | Conv2d | 每個尺度輸出:類別數 + 4(框) + 1(置信度) | 對應小/中/大目標檢測頭 |
3.5 關鍵模塊說明
模塊名 | 作用 |
---|---|
CBS | Conv + BN + SiLU,標準卷積塊 |
C3K2 | 類似 C3,但使用更輕量的 bottleneck(K=2) |
C2PSA | 引入 PSA(Pyramid Squeeze Attention)注意力機制 |
SPPF | 快速空間金字塔池化,提升感受野 |
Contact | 特征拼接(concatenate)操作 |
Upsample | 上采樣,用于特征融合 |
3.7 模型主要特點
-
YOLO11采用改進的骨干和頸部架構,增強了特征提取能力,提高了物體檢測的精確度
-
針對效率和速度優化:精細的架構設計和優化的訓練流程在保持準確性和性能之間最佳平衡的同時,提供更快的處理速度
-
更少的參數,更高的準確度:YOLO11m 在 COCO 數據集上實現了比 YOLOv8m 更高的 mAP,參數減少了 22%,提高了計算效率,同時不犧牲準確度
-
跨環境的適應性:YOLO11 可以無縫部署在邊緣設備、云平臺和配備 NVIDIA GPU的系統上,確保最大的靈活性
-
支持廣泛的任務范圍:圖像分類、目標檢測、實例分割、姿態估計、定向對象檢測 (OBB)、多目標跟蹤等
3.8 模型對比
下圖是 YOLOV11 各個模型在 COCO 數據集上的表現:
- mAP50:IOU 閾值為 0.50 時的平均精度,評估較為寬松,主要反映模型的粗略檢測能力
- mAP50-95:在不同 IOU 閾值下(從 0.50 到 0.95,步長 0.05,共 10 個值)計算 AP 的均值,是更為嚴謹和全面的性能指標,在報告模型性能時,mAP50-95 能值夠更好地衡量模型的總體表現,更具參考價值
和其他 YOLO 版本性能對比圖
四,開源項目
4.1 下載源碼
第一步:下載 yolo11 源碼,前面的步驟已經完成
4.2 新建環境
第二步:新建環境,見
https://blog.csdn.net/m0_73338216/article/details/146123256
4.3 安裝包
-
在 yolov11_env 虛擬環境中安裝庫:
- 在 Python≥3.8 的環境中先根據計算機是否支持 GPU 安裝 Pytorch>=1.8,如果沒有 GPU 可以不執行這一步【這個下載命令有的有問題,盡量選擇 pip 命令下載,如果 cuda 版本太低,先去更新驅動】
# CUDA 12.1 pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu121
- 安裝 ultralytics 包及其所有需求
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
4.4 下載推理文件
先下載 yolov11 的權重文件,選擇下載一個即可,然后放入項目文件夾中
執行檢測命令:可以選擇命令方式,也可以選擇代碼方式,可以參考網站https://docs.ultralytics.com/zh/modes/predict/#key-features-of-predict-mode
4.5 數據集
第六步:數據集標注
-
模型訓練的數據、驗證的數據都是由專門的人標注制作的,常用的標注工具labelImg、labelme。 這里介紹 labelImg 的使用
- 新建虛擬環境,略 -
激活環境,輸入命令
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝 labelimg 庫
在激活環境下,執行命令labelimg
打開 labelimg
標注完成后的數據集,圖示: -
images:存放需要被標注的圖片信息
-
labels:存放標注的圖片的位置、類型信息
4.6 檢測文件
from ultralytics import YOLO
# 加載訓練好的模型,改為自己的路徑
model = YOLO('yolo11s.pt')
# 修改為自己的圖片路徑及文件名
source = 0
# 運行推理,并附加參數
model.predict(source, show=True, save=True)
# model.predict(source, # 圖片或視頻的源目錄
# conf=0.5, # 用于檢測的 對象置信閾值,只有置信度高于此閾值的對象才會被檢測出來
# iou=0.7, # 非極大值抑制(NMS)的交并比(loU)值
# imgsz=160, # 輸入圖像尺寸
# half=False, # 使用半精度(FP16)
# device=0, # 運行設備,如device=0或device = cpu
# max_det=300, # 每個圖像的最大檢測數
# # vid_srtide=False,# 視頻幀率步長,預測試圖片需要注釋
# stream_buffer=False, # 緩沖所有流幀( True )或 返回最近的幀( Fa1se )
# visualize=False, # 是否可視化模型特征
# augment=False, # 是否對預測源應用圖像增強
# agnostic_nms=False, # 是否使用類別不可知(無關)的非極大值抑制(NMS)
# classes=None, # 按類別篩選結果,即classes=0或classes=[0,2,3]
# retina_masks=False, # 是否使用高分辨率的分割掩膜
# embed=None, # 返回給定層的特征向量/嵌入
# show=False, # 如果環境允許,是否顯示預測的圖像和視頻
# save=True, # 是否保存預測的圖像和視頻
# save_frames=False, # 是否保存預測的單個視頻幀
# save_txt=False, # 是否將結果保存為 .txt 文件
# save_conf=False, # 是否將檢測結果與置信度分數一起保存
# save_crop=False, # 是否保存裁剪的圖像與結果
# show_labels=False, # 是否顯示預測標簽
# show_conf=False, # 是否顯示預測置信度
# show_boxes=False, # 是否顯示預測邊界框
# line_width=None, # 邊界框的線寬(如果為 None ,則縮放為圖像大小)
# ))
4.7 模型訓練
from ultralytics import YOLO
"""參數 默認值 說明model None 用于訓練的模型文件的路徑data None 數據集配置文件的路徑(例如 coco8.yaml)epochs 100 訓練歷元總數batch 16 批量大小,可調整為整數或自動模式imgsz 640 用于訓練的目標圖像大小device None 用于訓練的計算設備,如 cpu, 0, 0,1或 mpssave True 可保存訓練檢查點和最終模型權重project None 保存訓練結果的項目目錄名稱
"""
if __name__ == "__main__":# 加載模型結構和配置文件model = YOLO("yolo11s.pt")# 開始訓練results = model.train(data="ultralytics/cfg/datasets/animal.yaml",epochs=25,batch=8,imgsz=640,device='0',project='runs',)
五,優缺點
維度 | 優點 | 缺點 |
---|---|---|
檢測精度 | ? 在 COCO 上 mAP 比 YOLOv8 高 1-2 pp(小目標提升更明顯) ? 引入 C2PSA(Pyramid Squeeze Attention),增強遮擋、小目標檢測 | ? 對極端長寬比、旋轉密集目標仍有漏檢 ? 極低分辨率輸入時精度下降明顯 |
推理速度 | ? 仍保持單階段架構,速度>300 FPS(YOLO11-n,T4 GPU) ? 支持 TensorRT / OpenVINO 高效部署 | ? 注意力模塊帶來 5-10 % 額外延遲 ? 參數量略大于同規模 YOLOv8,邊緣端需量化 |
模型大小 | ? 提供 n/s/m/l/x 五級權重,可按需選擇 ? 引入 C3K2 輕量瓶頸,參數量控制良好 | ? 最小模型仍比 YOLOv8-nano 大 0.4 M 參數量 |
訓練友好度 | ? 沿用 YOLOv8 訓練框架,超參少、易復現 ? 支持自動錨框、斷點續訓、混合精度 | ? 官方僅放出新版代碼,向下兼容腳本需手動調整 ? anchor-free 對小目標收斂速度稍慢 |
部署生態 | ? 官方導出 ONNX、Engine、RKNN、CoreML 一鍵完成 ? 支持 NCNN / MNN 移動端量化部署 | ? 新版算子(C2PSA)在部分舊版推理框架上需自定義實現 |
代碼/社區 | ? Ultralytics 維護,文檔完善,社區活躍 |