測驗:YOLO 環境建置與第一個模型
共 5 題,點選答案後會立即顯示結果
1. 安裝 Ultralytics 套件時,會自動安裝哪些依賴?
2. YOLOv8 模型名稱中的字母代表什麼意義?例如 yolov8n、yolov8s、yolov8m
3. 使用 Python API 取得偵測結果時,box.xyxy 的座標格式代表什麼?
4. YOLOv8 預訓練模型使用哪個資料集訓練,可以辨識多少種物件?
5. 當信心度(confidence)為 0.72 時,這代表模型對這個偵測的把握程度如何?
前言
上一篇我們認識了 YOLO 的核心概念,了解它如何一次看完整張圖片來偵測物件。這篇要動手做了——安裝 Ultralytics 套件,然後用預訓練模型跑一張圖片,看看 YOLO 能偵測出什麼。
讀完這篇,你會學到:
- 安裝 Ultralytics 套件和相關依賴
- 使用預訓練模型進行物件偵測
- 理解 YOLO 的輸入輸出格式
- 用 Python 和 CLI 兩種方式執行偵測
環境需求
在開始之前,先確認你的環境符合以下條件:
Python 版本
Python 3.8 以上(建議 3.10 或 3.11)
Code language: CSS (css)檢查你的 Python 版本:
python --version
# 輸出範例:Python 3.11.4
Code language: CSS (css)GPU 支援(可選但建議)
YOLO 可以純 CPU 跑,但 GPU 會快很多。如果你有 NVIDIA 顯卡,確認已安裝 CUDA:
nvidia-smi
看到類似這樣的輸出就表示 GPU 可用:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A |
+-------------------------------+----------------------+----------------------+
沒有 GPU 也沒關係,Ultralytics 會自動偵測並使用 CPU。
安裝 Ultralytics
基本安裝
最簡單的方式,一行搞定:
pip install ultralytics
這會安裝 Ultralytics 套件和所有必要的依賴,包括:
torch(PyTorch,深度學習框架)opencv-python(影像處理)numpy(數值運算)
驗證安裝
安裝完成後,確認可以正常 import:
from ultralytics import YOLO
print("Ultralytics 安裝成功!")
Code language: JavaScript (javascript)或用 CLI 檢查版本:
yolo version
# 輸出範例:8.0.200
Code language: CSS (css)下載預訓練模型
Ultralytics 提供多種預訓練模型,差別在於大小和準確度:
| 模型 | 參數量 | 速度 | 準確度 |
|---|---|---|---|
| YOLOv8n | 3.2M | 最快 | 較低 |
| YOLOv8s | 11.2M | 快 | 中等 |
| YOLOv8m | 25.9M | 中等 | 較高 |
| YOLOv8l | 43.7M | 慢 | 高 |
| YOLOv8x | 68.2M | 最慢 | 最高 |
字母代表大小:n(nano)、s(small)、m(medium)、l(large)、x(extra large)。
新手建議從 yolov8n 開始,輕量又快速。
模型會自動下載
第一次使用時,Ultralytics 會自動下載模型到 ~/.cache/ultralytics/ 目錄:
from ultralytics import YOLO
# 第一次執行會自動下載 yolov8n.pt
model = YOLO("yolov8n.pt")
Code language: PHP (php)你也可以手動下載:
yolo predict model=yolov8n.pt source=https://ultralytics.com/images/bus.jpg
Code language: JavaScript (javascript)CLI 使用方式
Ultralytics 提供了方便的命令列工具,不用寫程式就能跑偵測。
基本語法
yolo predict model=模型檔 source=輸入來源
偵測圖片
yolo predict model=yolov8n.pt source=image.jpg
偵測資料夾內所有圖片
yolo predict model=yolov8n.pt source=./images/
偵測影片
yolo predict model=yolov8n.pt source=video.mp4
使用網路攝影機
yolo predict model=yolov8n.pt source=0
調整信心閾值
只顯示信心度超過 0.5 的偵測結果:
yolo predict model=yolov8n.pt source=image.jpg conf=0.5
輸出結果
預設結果會存到 runs/detect/predict/ 目錄。你可以指定輸出位置:
yolo predict model=yolov8n.pt source=image.jpg project=output name=my_result
結果會存到 output/my_result/。
Python API 使用方式
如果你想在程式中使用 YOLO,Python API 更靈活。
最簡單的範例
from ultralytics import YOLO
# 載入預訓練模型
model = YOLO("yolov8n.pt")
# 執行偵測
results = model("image.jpg")
# 顯示結果
results[0].show()
Code language: PHP (php)儲存結果圖片
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
results = model("image.jpg")
# 儲存標註後的圖片
results[0].save("output.jpg")
Code language: PHP (php)取得偵測資訊
這是最重要的部分——如何讀懂偵測結果:
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
results = model("image.jpg")
# 取得第一張圖的結果
result = results[0]
# 遍歷每個偵測到的物件
for box in result.boxes:
# 取得 bounding box 座標 (x1, y1, x2, y2)
coords = box.xyxy[0].tolist()
x1, y1, x2, y2 = coords
# 取得信心度(0-1 之間)
confidence = box.conf[0].item()
# 取得類別 ID
class_id = int(box.cls[0].item())
# 取得類別名稱
class_name = result.names[class_id]
print(f"偵測到:{class_name}")
print(f" 位置:({x1:.0f}, {y1:.0f}) 到 ({x2:.0f}, {y2:.0f})")
print(f" 信心度:{confidence:.2%}")
print()
Code language: PHP (php)輸出範例:
偵測到:person
位置:(42, 85) 到 (198, 520)
信心度:92.34%
偵測到:car
位置:(320, 200) 到 (580, 380)
信心度:87.65%
Code language: CSS (css)解讀偵測結果
讓我們深入理解 YOLO 的輸出格式。
Bounding Box(邊界框)
YOLO 用矩形框住偵測到的物件。座標有兩種格式:
xyxy 格式(左上角和右下角):
box.xyxy # tensor([[x1, y1, x2, y2]])
Code language: CSS (css)(x1, y1):左上角座標(x2, y2):右下角座標
xywh 格式(中心點和寬高):
box.xywh # tensor([[cx, cy, w, h]])
Code language: CSS (css)(cx, cy):中心點座標(w, h):寬度和高度
Confidence(信心度)
表示模型對這個偵測的把握程度,範圍 0 到 1:
box.conf # tensor([0.9234])
Code language: CSS (css)- 0.9 以上:很確定
- 0.7-0.9:還蠻確定
- 0.5-0.7:有點不確定
- 0.5 以下:可能是誤判
Class(類別)
YOLOv8 預訓練模型使用 COCO 資料集,能辨識 80 種物件:
# 類別 ID(整數)
box.cls # tensor([0]) # 0 = person
# 查詢類別名稱
result.names[0] # 'person'
Code language: PHP (php)常見類別對照:
- 0: person
- 1: bicycle
- 2: car
- 3: motorcycle
- 5: bus
- 7: truck
- 16: dog
- 17: cat
完整列表可以這樣查看:
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
print(model.names)
Code language: JavaScript (javascript)完整範例:偵測圖片中的所有物件
把以上學到的串起來:
from ultralytics import YOLO
def detect_objects(image_path, conf_threshold=0.5):
"""偵測圖片中的物件並列出結果"""
# 載入模型
model = YOLO("yolov8n.pt")
# 執行偵測,設定信心閾值
results = model(image_path, conf=conf_threshold)
# 取得結果
result = results[0]
# 統計各類別數量
counts = {}
for box in result.boxes:
class_id = int(box.cls[0].item())
class_name = result.names[class_id]
confidence = box.conf[0].item()
# 統計
counts[class_name] = counts.get(class_name, 0) + 1
# 印出詳細資訊
coords = box.xyxy[0].tolist()
print(f"{class_name}: {confidence:.1%} @ {[int(c) for c in coords]}")
print(f"\n總共偵測到 {len(result.boxes)} 個物件")
print("各類別數量:", counts)
# 儲存標註後的圖片
result.save("detected.jpg")
print("結果已儲存到 detected.jpg")
# 使用範例
detect_objects("street.jpg")
Code language: PHP (php)常見問題
Q: 第一次執行很慢?
A: 第一次會下載模型和編譯 CUDA kernel,之後就快了。
Q: 出現 CUDA out of memory?
A: 試試較小的模型(如 yolov8n)或降低圖片大小:
results = model("image.jpg", imgsz=640) # 預設 640,可以改小
Code language: PHP (php)Q: 偵測不到想要的物件?
A: 預訓練模型只能辨識 COCO 資料集的 80 種物件。如果你要偵測其他物件(如特定零件、產品),需要自己訓練模型,這是後續文章的內容。
Q: 如何提高偵測準確度?
A: 換用較大的模型(如 yolov8m 或 yolov8l),但速度會變慢。
小結
這篇我們學會了:
- 安裝 Ultralytics:一行
pip install ultralytics搞定 - 選擇模型:n/s/m/l/x 代表不同大小,越大越準但越慢
- CLI 用法:
yolo predict model=模型 source=來源快速測試 - Python API:載入模型、執行偵測、解讀結果
- 輸出格式:bounding box 座標、confidence 信心度、class 類別
下一篇,我們會學習如何準備自己的訓練資料集,為訓練自訂模型做準備。
延伸資源
進階測驗:YOLO 環境建置與第一個模型
共 5 題,包含情境題與錯誤診斷題。