YOLOv11 架構改進 & 常見指令
今天我們介紹 YOLOv11,這個系列中的最新成員。YOLO 是一個在目標檢測領域幾乎無與倫比的算法,它產生了非常成功的結果。這個算法系列在 YOLOv5 之后由 Ultralytics 繼續(xù)開發(fā),并且每個新模型都帶來了更好的性能。
YOLOv11 是 Ultralytics 開發(fā)的最新 YOLO 模型。這個模型在執(zhí)行實時目標檢測時,繼續(xù)平衡準確性和效率。在之前的 YOLO 版本基礎上,YOLO11 在架構和訓練上提供了顯著的改進。在保持速度的同時提高性能的最重要的架構變化是增加了 C3K2 塊、SPFF 模塊和 C2PSA 塊。
- C3K2 塊:這是在以前版本中引入的 CSP(Cross Stage Partial)塊的增強。該模塊使用不同的核大小(例如 3x3 或 5x5)和通道分離策略來優(yōu)化更復雜特征的提取。
- SPFF(Spatial Pyramid Pooling Fusion)模塊:它是 YOLO 版本中使用的 SPP(Spatial Pyramid Pooling)模塊的優(yōu)化版本。該模塊允許模型通過捕獲不同尺度的物體屬性來更好地執(zhí)行。
- C2PSA 塊:這個塊通過結合通道和空間信息提供更有效的特征提取。它還與多頭注意力機制一起工作,從而實現對物體更準確的感知。它優(yōu)化了前一層的特征圖,并用注意力機制豐富它們,以提高模型的性能。這種結構使得在復雜場景中更精確的檢測成為可能,并提高了 YOLOv11 的準確性。
除了這些架構變化,YOLOv11 像 YOLOv8 一樣具有多模型能力。得益于其多模型特性,YOLOv11 可以執(zhí)行以下任務:
- 目標檢測:在圖像中識別和定位物體。
- 實例分割:檢測物體并確定它們的邊界。
- 分類:將圖像分類到預定義的類別中。
- 姿態(tài)估計:檢測和跟蹤人體上的標志點。
- 定向目標檢測(OBB):檢測旋轉物體以提高靈敏度。
在我們開始使用之前,讓我們談談新 YOLO 版本帶來的特性。
- 現有的主干結構已經被 C3K2 塊替換,以提高特征提取能力。
- 頸部結構已經用 SPFF 模塊改進,以捕獲不同大小的物體并更好地檢測小物體。
- 增加了 C2PSA 塊,專注于更小或部分遮擋物體中的重要區(qū)域。
- 通過多模型能力增加了任務數量。
- 更容易適應各種環(huán)境,包括邊緣設備。
- 得益于其優(yōu)化的架構和高效的處理能力,它可以部署在邊緣設備、云平臺和支持 NVIDIA GPU 的系統(tǒng)上。
由于這些優(yōu)化和創(chuàng)新,YOLOv11 在實時應用中提供了性能提升。模型運行更快、更準確,提高了目標檢測、樣本分割和姿態(tài)估計等任務的效率。此外,兼容性得到了改善,使模型可以輕松地在不同的平臺和硬件上運行(例如云或邊緣設備)。在 Ultralytics (詳見官網:https://docs.ultralytics.com/models/yolo11/)頁面上,當他們評估 YOLOv11 與以前版本相比的性能時,他們發(fā)表了以下評論。
隨著模型設計的改進,YOLO11m 在使用比 YOLOv8m 少 22% 參數的情況下,在 COCO 數據集上實現了更高的平均精度均值(mAP),使其在不犧牲準確性的情況下具有計算效率。
然而,盡管 YOLOv11 模型的性能很好并且提供了廣泛的范圍,但在目標檢測方面,它并不像 YOLOv10 那樣成功。盡管 YOLOv10 有更多的參數,YOLOv11 只實現了微小的差異(+0.1-0.5)的更好性能。在這種情況下,YOLOv10 可能仍然是我們的偏好,因為參數的過剩導致速度損失和成本。
使用 YOLOv11
使用 PyTorch 構建 YOLOv11 模型及其與其他模式的使用簡要如下。
步驟 1:首先,我們需要下載 Ultralytics 庫。有了這個庫,我們可以運行從 YOLOv3 到 YOLOv11 的所有模型。
pip install ultralytics
步驟 2:如果你只想在一個訓練好的模型中進行預測。以下代碼就足夠了。否則你可以跳過它。
yolo predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'py
步驟 3:如果你說不,我想訓練我的模型,你可以選擇你想要的模型并下載 .pt 文件。
from ultralytics import YOLO
# Load a COCO-pretrained YOLO11n model
model = YOLO("yolo11n.pt")
步驟 4:然后你需要選擇訓練數據、訓練epoch、圖像大小和你的設備。
train_results = model.train(
data="coco8.yaml", # path to dataset YAML
epochs=100, # number of training epochs
imgsz=640, # training image size
device="cpu", # device to run on, i.e. device=0 or device=0,1,2,3 or device=cpu
)
步驟 5:你需要用驗證數據評估和測試模型。它將驗證數據從訓練數據本身中分離出來,對于測試,你只需要提供你想要測試的圖像的路徑。
metrics = model.val()
results = model("path/to/image.jpg")
results[0].show()
步驟 6:在最后一步,我們可以導出你的模型,以便以后再次使用。如果你想用你自己的模型進行預測,只需使用步驟-2。
path = model.export(format="onnx")
YOLOv11 常用操作指令
用你自己的數據訓練你的目標檢測模型,具有特定的學習率和epoch:
yolo train data=coco8.yaml model=yolo11n.pt epochs=10 lr0=0.01
對于模型驗證:
yolo val model=yolo11n.pt data=coco8.yaml batch=1 imgsz=640
在 YouTube 視頻上測試模型的結果,圖像大小為 320:
yolo predict model=yolo11n.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320
使用預訓練的分割模型在 YouTube 視頻上預測,圖像大小為 320:
yolo segment predict model=yolo11n-seg.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320
將你特別訓練的模型導出為 .pt 擴展名:
yolo export model=path/to/best.pt format=onnx