Python | OpenCV 資料集整理與驗證
📑 目錄
📚 前言
在上一篇 LabelImg 標註工具實戰 中,我們完成了圖片的標註。
標註完成後,還需要將資料整理成模型訓練所需的目錄結構,並切分訓練集與驗證集,最後用程式確認標註是否正確。
✂️ 訓練集與驗證集切分
標註完成後,需要將資料分為訓練集與驗證集。有兩種做法:
| 項目 | 做法一:拍兩支影片(建議) | 做法二:按比例切分 |
|---|---|---|
| 適用情境 | 有條件重新拍攝 | 只有一支影片 |
| 場景多樣性 | ✅ 訓練/驗證集場景不同 | ❌ 來自同一場景與光線 |
| 泛化效果 | 較好,能測試模型是否學到物件本身 | 較有限 |
| 操作方式 | 分別執行 collect_from_video.py 後各自標註,存入不同目錄 |
執行下方 split_dataset.py 自動切分 |
💡 做法二的切分腳本,將前 80% 分給訓練集、後 20% 分給驗證集,圖片與標籤同步搬移程式碼:
1 | # split_dataset.py |

圖:split_dataset.py 將圖片與標籤同步切分為訓練集與驗證集
🗃️ 資料目錄結構
圖:分類任務與物件偵測任務的資料目錄結構比較
⚠️ 任務類型不同,目錄結構與整理方式也不同:
🖼️ 分類任務(不需要標註工具)
分類任務針對整張圖片判斷類別,不需要畫邊界框,也不需要 LabelImg。只要手動將圖片放入對應的類別資料夾即可,資料夾名稱就是標籤。
1 | dataset/ |
📝 PyTorch
ImageFolder與 Kerasimage_dataset_from_directory都能自動讀取這個結構。
🔍 物件偵測任務(YOLO 標註格式)
物件偵測需要用 LabelImg 畫邊界框並輸出 .txt 標籤檔,再用上方的 split_dataset.py 切分。圖片與標籤分開存放,兩者檔名相同:
1 | dataset/ |
📝 例如
images/train/0001.jpg對應labels/train/0001.txt。
💻 以 Python 驗證標註結果
標註並切分完成後,可用以下程式將標註框繪製在圖片上,確認標註是否正確。
驗證 YOLO 格式標註
1 | # verify_annotation.py |

圖:讀取 YOLO 格式標註檔並將邊界框繪製在圖片上,驗證標註位置是否正確
批次統計標註數量
1 | # count_labels.py |

圖:批次掃描標籤目錄統計各類別的標註數量並輸出結果
💡 class ID 對應的類別名稱記錄在 LabelImg 產生的
classes.txt(與圖片存放於同一目錄),可對照查詢。
⚠️ 注意事項
- 訓練/驗證集分離:兩者資料絕不能重疊,驗證集應來自不同場景或不同時間拍攝。
- 類別均衡:各類別數量差距過大時,訓練結果會偏向數量多的類別,可透過補充資料或資料增強改善。
- 定期備份:標註結果是耗時的人工成果,務必做好版本備份。
🎯 結語
完成標註、切分與驗證後,整個資料準備流程就告一段落。
下一篇進入 模型選擇與訓練,將標註好的資料送入模型進行學習。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
LabelImg GitHub