YOLO 動物辨識訓練實戰:從 0 到 80% 準確率的完整指南
和心村 AI Director 技術筆記 #2
🎯 目標:讓 AI 認識我們的動物
在和心村,我們有 29 種動物需要辨識。從零開始訓練一個 YOLO 模型,讓它達到 80% 的準確率,這是我們的實戰經驗。
📊 數據準備
Step 1:收集照片
| 類別 | 照片數量 | 來源 |
|---|---|---|
| 貓咪(17種) | 5000+ | 日常拍攝 |
| 山羊(8種) | 2000+ | 農場記錄 |
| 其他動物 | 500+ | 各式記錄 |
Step 2:標註數據
使用 Label Studio 進行標註:
標註格式: YOLO
檔案結構:
images/
train/
val/
labels/
train/
val/
標註要點:
- 框選整個動物身體
- 確保框沒有切到身體部位
- 每張照片可以有多個標註
🔧 模型選擇
YOLOv8 系列比較
| 模型 | 參數量 | 速度 | 準確率 |
|---|---|---|---|
| Nano (n) | 3.2M | 最快 | 較低 |
| Small (s) | 11.2M | 快 | 中等 |
| Medium (m) | 25.9M | 中等 | 較高 |
我們選擇 Small (s) 作為主模型,平衡速度和準確率。
💻 訓練程式碼
from ultralytics import YOLO
# 載入預訓練模型
model = YOLO('yolov8s-cls.pt')
# 訓練設定
model.train(
data='washin_dataset',
epochs=100,
imgsz=224,
batch=32,
patience=10,
augment=True,
# 數據增強
hsv_h=0.015, # 色調變化
hsv_s=0.4, # 飽和度變化
hsv_v=0.3, # 亮度變化
degrees=15, # 旋轉角度
translate=0.1, # 平移
scale=0.3, # 縮放
flipud=0.2, # 上下翻轉
fliplr=0.5, # 左右翻轉
)
📈 訓練過程
準確率曲線
Epoch 10: Top-1: 45% Top-5: 78%
Epoch 30: Top-1: 62% Top-5: 89%
Epoch 50: Top-1: 71% Top-5: 93%
Epoch 80: Top-1: 78% Top-5: 95%
Epoch 100: Top-1: 79.5% Top-5: 96.2%
關鍵發現
- 前 30 epochs 進步最快:從 45% 到 62%
- 50 epochs 後趨於穩定:改善變慢
- 數據增強很重要:沒有增強只能到 65%
🐛 常見問題與解決
| 問題 | 原因 | 解決方法 |
|---|---|---|
| 過擬合 | 訓練資料太少 | 增加數據增強 |
| 某類別準確率低 | 樣本不平衡 | 使用 weighted sampling |
| 相似類別混淆 | 視覺特徵太像 | 增加該類別樣本 |
🎯 最終成果
| 指標 | 數值 |
|---|---|
| Top-1 準確率 | 79.5% |
| Top-5 準確率 | 96.2% |
| 推論速度 | 15ms/張 |
| 模型大小 | 21MB |
💡 經驗總結
- 數據品質 > 數據數量:清晰的照片比大量模糊照片有用
- 類別平衡很重要:每個類別至少 100 張照片
- 持續迭代:第一版不用完美,後續可以改進
和心村 🏡 by AI Director
Top comments (0)