Python | OpenCV YOLOv8 預標籤(Pre-Label)
📚 前言
在 資料標註 篇中,我們介紹了用 LabelImg 手動畫邊界框的流程。
手動標記雖然精確,但對大量圖片來說非常耗時。
如果你要標記的類別(例如 cat、dog)剛好在 YOLOv8 預訓練模型支援的 COCO 80 類別內,可以先讓模型跑一遍推論,自動產生標籤草稿,再用 LabelImg 只修正錯誤的框,速度可以快上數倍。
🔎 原理說明
YOLOv8 的 COCO 預訓練模型能偵測 80 種物件,偵測結果包含:
- 類別 ID(對應 COCO 80 類)
- 邊界框座標(已是相對比例,可直接寫入 YOLO txt)
pre_label.py 的流程:
1 | ① 載入 YOLOv8 預訓練模型(yolov8n.pt) |
💡 COCO 資料集中
cat的 class_id 是 15,dog是 16,與我們data.yaml定義的 0、1 不同,必須重新對應,否則 class_id 會錯。
🧠 函式與參數說明
📌 box.xywhn
YOLOv8 偵測結果中,box.xywhn 直接回傳已正規化的座標(0.0~1.0),格式為 [x_center, y_center, width, height],可以不用手動換算,直接寫入 YOLO txt。
📌 conf 信心度門檻
推論時設定 conf=0.5 過濾低信心度的結果,避免把不確定的框也寫入標籤,減少後續手動刪除的工作量。值越高越嚴格,可依圖片品質調整。
💻 範例程式
1 | # pre_label.py |

圖:對 raw_images/ 批次推論並輸出 YOLO txt 標籤至 raw_labels/,顯示每張圖片的偵測數量
💻 用 LabelImg 修正標籤
執行完 pre_label.py 後,raw_labels/ 已有自動產生的標籤草稿。接著用 LabelImg 開啟修正:
- Open Dir:選擇
raw_images/ - Change Save Dir:選擇
raw_labels/(LabelImg 會自動載入同名的.txt) - 儲存格式切換為 YOLO
- 逐張檢查,刪除錯誤的框、補畫漏標的物件、修正類別
Ctrl + S儲存後按D切到下一張

圖:在 LabelImg 中載入自動產生的標籤草稿,修正偵測錯誤的邊界框
💡
pre_label.py執行時會自動產生raw_labels/classes.txt,LabelImg 需要此檔案才能正確對應類別名稱,不需要手動建立。
⚠️ 注意事項
- 只適用於 COCO 80 類別內的物件:若你要標記的類別不在 COCO 80 類別內(例如特定商品、自訂符號),預標籤無法使用,只能全手動或先用少量資料訓練一個初版模型再回頭預標。
- 預標籤不等於正確標籤:模型可能漏標、誤標,每張圖都必須人工確認,不能直接用於訓練。
- 空標籤檔案需保留:模型未偵測到目標的圖片,
pre_label.py會輸出空的.txt,這是正確的 YOLO 格式,不要刪除。 - 信心度門檻影響標籤品質:
conf設太低會產生大量誤標框,設太高會漏掉部分真實物件,建議先用 0.5 再依實際結果調整。
📊 應用場景
- 大量圖片需要標記:100 張以上的資料集,預標籤可以省去大部分畫框時間,只需修正。
- 新類別自訓練的冷啟動:先用 COCO 預標籤標出相近類別(例如用
person預標人物),修正後訓練初版模型,再用初版模型回頭預標更多資料,形成正向循環。
🎯 結語
預標籤不是讓你省掉標記,而是把「從零畫框」變成「改錯」,後者快得多。
完成標籤修正後,依照 YOLOv8 資料集準備 篇的 split_dataset.py 切分資料集,即可進入訓練流程。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
Ultralytics YOLOv8 官方文件 — Predict
Ultralytics YOLOv8 官方文件 — Results
COCO Dataset — Categories
