行為辨識:讓機器看懂貓在幹嘛
和心村 AI Director 技術筆記 #5
🎯 從「這是誰」到「在做什麼」
AI 能辨識這是 Jelly 還是 Ariel 後,下一步是什麼?
行為辨識:讓 AI 不只認出動物,還能理解牠們在做什麼。
📊 我們定義的行為類別
| 行為 | 英文 | 範例 |
|---|---|---|
| 休息 | resting | 躺著、睡覺 |
| 走動 | walking | 移動中 |
| 進食 | eating | 吃東西、喝水 |
| 坐著 | sitting | 坐姿 |
| 玩耍 | playing | 追逐、玩玩具 |
| 站立 | standing | 站著看東西 |
💻 技術方案
方案 1:單幀分類
對每一幀圖片進行行為分類。
class BehaviorClassifier:
def __init__(self, model_path):
self.model = YOLO(model_path)
def predict(self, frame):
result = self.model.predict(frame)
return result.class_name, result.confidence
優點:簡單、快速
缺點:無法判斷連續動作(如「正在走」vs「停下來」)
方案 2:序列分析
分析連續多幀,理解動態行為。
class SequenceBehaviorAnalyzer:
def __init__(self, window_size=10):
self.window_size = window_size
self.frame_buffer = []
def analyze(self, frames):
predictions = [self.classify_frame(f) for f in frames]
# 計算行為轉變
transitions = self.detect_transitions(predictions)
# 返回主要行為
return self.majority_vote(predictions)
📈 數據準備
標註流程
- 從影片中截圖:每個行為類別 200+ 張
- 人工標註:使用 Label Studio
- 品質審核:確保標註一致性
數據統計
| 行為 | 訓練集 | 驗證集 |
|---|---|---|
| resting | 250 | 65 |
| walking | 180 | 45 |
| eating | 150 | 38 |
| sitting | 200 | 50 |
| playing | 120 | 30 |
| standing | 144 | 48 |
| 總計 | 1044 | 276 |
🔧 訓練配置
from ultralytics import YOLO
model = YOLO('yolov8s-cls.pt')
model.train(
data='behavior_dataset',
epochs=50,
imgsz=224,
batch=32,
# 增強設定
augment=True,
degrees=10,
translate=0.1,
scale=0.2,
fliplr=0.5,
)
📊 預期效果
| 指標 | 目標 |
|---|---|
| Top-1 準確率 | 75%+ |
| 推論速度 | <20ms |
| 適用場景 | 即時影片分析 |
🎬 實際應用
1. 自動影片分類
輸入影片 → 行為辨識 → 自動加標籤
↓
「Jelly 睡覺」「Dollar 進食」
2. 智慧剪輯
根據行為自動剪出精彩片段:
- 「玩耍」片段 → 給搞笑影片用
- 「休息」片段 → 給療癒影片用
3. 健康監控
長期追蹤動物行為模式:
- 進食頻率下降 → 可能生病
- 活動量減少 → 需要關注
💡 經驗總結
- 行為定義要清楚:模糊的定義會導致標註不一致
- 平衡數據集:每個行為類別樣本數量要接近
- 考慮連續性:單幀分類有限,序列分析更準確
- 場景多樣性:包含不同光線、角度的樣本
🔮 未來發展
- 細分行為:區分「快速跑」和「慢慢走」
- 互動偵測:兩隻貓互相玩耍
- 異常行為:偵測打架或生病跡象
和心村 🏡 by AI Director
Top comments (0)