YOLO 安裝

      在〈YOLO 安裝〉中尚無留言

YOLO 是目前最快速也是最精準的圖型辨識模型,烏俄戰爭的無人機就是使用此模型。

一開始 YOLO 只是一篇論文,到了 2025 年 進化到了 v12 版本,其歷史如下。

版本 發布日期 主要特點與改進
YOLOv1 2015 年 首次提出單次前向傳播的物體偵測方法
YOLOv2 2016 年 引入批量正規化和錨框機制,提升準確度
YOLOv3 2018 年 多尺度偵測和更複雜的骨幹網絡,進一步改善性能
YOLOv4 2020 年 結合 CSPNet 和其他技術,提升速度和準確度
YOLOv5 2020 年 由 Ultralytics 開發,提供 PyTorch 支援,易於部署
YOLOv6 2022 年 針對工業應用進行優化,提升小物體偵測能力
YOLOv7 2022 年 引入可訓練的 bag-of-freebies,達到新的實時偵測最佳表現
YOLOv8 2023 年 支援物體偵測、分割、姿勢估計等多任務,提供多種模型變體
YOLOv9 2024 年 引入 Programmable Gradient Information (PGI) 和 GELAN 架構,提升效率和準確度
YOLOv10 2024 年 優化模型架構,提升速度和效率,適用於端到端部署
YOLOv11 2024 年 引入 C3k2、SPPF 和 C2PSA 等新組件,提升特徵提取能力
YOLOv12 2025 年 最新版本,進一步提升性能和效率

安裝

自 v8 開始直接由 pip 安裝 ultralytics 套件即可,不用像 v7 版還要手動下載 github 原始碼那麼麻煩。

但是 ultralytics 會自動安裝無法使用 cuda 的 Pytorch,所以請先安裝可用 cuda 的 Pytorch,然後才安裝 ultralytics。

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130 --no-cache-dir

pip install ultralytics opencv-python

偵測

直接在 Terminal  執行如下指令

yolo predict model=yolo12n.pt source="https://ultralytics.com/images/bus.jpg"

此指令會自動由官網下載 “yolo12n.pt” 預訓練權重,偵測的結果置在 ./run/detect/predict目錄下。

使用程式碼偵測

使用 python 程式碼偵測代碼如下

import numpy as np
from cv import cv
from ultralytics import YOLO
import cv2
import pylab as plt

# 載入模型
model = YOLO("yolo26n.pt")

# 讀取圖片
img = cv.read("dog.jpg")[...,::-1].copy()

# 辨識圖片
result = model(img)[0]  # 取得第一個結果

# 取得辨識結果
boxes = result.boxes  # 邊界框
#probs = result.probs  # 各類別機率
#classes = result.names  # 類別名稱映射

# 繪制邊框
for box in boxes:
    x1, y1, x2, y2 = box.xyxy[0].cpu().numpy().astype(int)
    conf = box.conf[0].cpu().numpy()
    cls = int(box.cls[0].cpu().numpy())
    name = results.names[cls]
    img=cv.rectangle(img, (x1, y1), (x2, y2), (0,255,0), 3)
    img=cv.text(img, (x1, y1-10), f"{name}\n{conf:.2f}", color=(255,0,0), size=70)
plt.axis("off")
plt.imshow(img)
plt.show()

預訓練權重

上述的 yolo26n.pt 又稱為預訓練權重(pretrain),由官網使用 COCO 資料集所訓練出來。除了可以用來偵測 80 種物件外,也可以用來訓練其它資料集的權重,最新的預訓練權重可以到如下網址查看。
https://github.com/ultralytics/ultralytics
預訓練權重有 n, s, m, l , x 這幾種,愈往下愈精準但速度愈慢。

底下各個版本都可以自動下載

model=YOLO("yolov8n.pt")
model=YOLO("yolov9m.pt")
model=YOLO("yolov10m.pt")
model=YOLO("yolo11n.pt")
model=YOLO("yolo12n.pt")
model=YOLO("yolo26n.pt")

todo

底下僅記錄用

Yolo V12 下載

下載網址如下

https://github.com/sunsmarterjie/yolov12

套件

wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.3/flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
conda create -n yolov12 python=3.11
conda activate yolov12
pip install -r requirements.txt
pip install -e .

使用程式碼偵測

 import YOLO 產生 model 模型,然用 model.predict() 即可偵測,傳入裏面的參數,可以是圖片檔名,也可以是讀入記憶体的 cv2 格式

results[0].boxes.cls 是偵測到的物件索引編號,為 torch 格式。results[0].boxes.xyxy 則是所有物件方框的座標。

import platform
import cv2
import numpy as np
from PIL import Image, ImageFont, ImageDraw
from ultralytics import YOLO
import pylab as plt

def text(img, text, xy=(0, 0), color=(0, 0, 0), size=12):
    pil = Image.fromarray(img)
    s = platform.system()
    if s == "Linux":
        font =ImageFont.truetype('/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc', size)
    elif s == "Darwin":
        font = ImageFont.truetype('....', size)
    else:
        font = ImageFont.truetype('simsun.ttc', size)
    ImageDraw.Draw(pil).text(xy, text, font=font, fill=color)
    return np.array(pil)

model=YOLO('yolov8x.pt')

img=cv2.imdecode(np.fromfile("street.jpg", dtype=np.uint8), cv2.IMREAD_UNCHANGED)
img=img[:,:,::-1].copy()#一定要 copy,否則無法畫框線
#results=model.predict("street.jpg")
results=model.predict(img)

print('物件種類 : ',results[0].boxes.cls)#cls : class
print('座標 : ',results[0].boxes.xyxy)
#print(results[0].names)#列出80種物件的索引及名稱
# for i in results[0].boxes.cls:
#     idx=int(i.cpu().numpy())
#     print(idx, results[0].names[idx])
names=[results[0].names[int(i.cpu().numpy())] for i in results[0].boxes.cls]
boxes=results[0].boxes.xyxy

for box, name in zip(boxes, names):
    box=box.cpu().numpy()
    print(name, box)
    x1 = int(box[0])
    y1 = int(box[1])
    x2 = int(box[2])
    y2 = int(box[3])
    img=cv2.rectangle(img, (x1, y1), (x2, y2), (0,255,0), 1)
    img=text(img, name, (x1, y1-20), color=(0,0,255), size=16)
plt.imshow(img)
plt.show()

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *