使用 AutoTrain 訓練目標檢測模型
目標檢測是計算機視覺中的一項基本任務,它使模型能夠識別和分類影像中的物體。AutoTrain 透過讓使用者輕鬆訓練最先進的目標檢測模型,簡化了這一過程。在這篇博文中,我們將引導您完成準備資料、配置訓練引數以及使用命令列介面 (CLI) 和使用者介面 (UI) 在本地和 Hugging Face 雲上高效訓練目標檢測模型的步驟。
準備資料
在訓練模型之前,您需要整理影像並建立一個元資料檔案。請遵循以下指南
為 UI 準備資料
建立 Zip 壓縮包: 將您的影像和
metadata.jsonl
檔案收集到一個 zip 檔案中。您的檔案結構應如下所示Archive.zip ├── 0001.png ├── 0002.png ├── 0003.png ├── ... └── metadata.jsonl
準備元資料:
metadata.jsonl
檔案包含每張影像的資訊,包括物體的邊界框和類別。這是一個例子{"file_name": "0001.png", "objects": {"bbox": [[302.0, 109.0, 73.0, 52.0]], "category": [0]}} {"file_name": "0002.png", "objects": {"bbox": [[810.0, 100.0, 57.0, 28.0]], "category": [1]}} {"file_name": "0003.png", "objects": {"bbox": [[160.0, 31.0, 248.0, 616.0], [741.0, 68.0, 202.0, 401.0]], "category": [2, 2]}}
確保邊界框採用 COCO 格式
[x, y, width, height]
。
為 CLI 準備資料
或者,如果您不使用 UI,也可以將資料整理到資料夾中
建立訓練和驗證資料夾: 將您的影像和
metadata.jsonl
檔案分別整理到用於訓練和驗證的資料夾中。training/ ├── 0001.png ├── 0002.png ├── 0003.png ├── ... └── metadata.jsonl validation/ ├── 0004.png ├── 0005.png ├── ... └── metadata.jsonl
準備元資料: 與 UI 方法類似,
metadata.jsonl
檔案應包含邊界框和類別資訊。
圖片要求
- 格式: 所有圖片必須為 JPEG、JPG 或 PNG 格式。
- 數量: 至少包含 5 張圖片,以提供足夠的學習樣本。
- 專有性: zip 檔案應僅包含圖片和
metadata.jsonl
檔案。不應包含其他檔案或巢狀資料夾。
當 train.zip
解壓時,它不應建立任何資料夾,只應包含圖片和 metadata.jsonl
檔案。
注意:您也可以使用來自 Hugging Face Hub 的資料集。這將在本博文中進一步討論。
配置訓練引數
AutoTrain 提供多種引數來自定義您的訓練過程。以下是您可以配置的關鍵引數
基本引數
- --image-square-size: 將輸入影像調整為指定大小的正方形 (預設為 600)。
- --batch-size: 設定訓練批次大小。
- --seed: 用於可復現性的隨機種子。
- --epochs: 訓練輪數。
- --gradient_accumulation: 梯度累積步數。
- --disable_gradient_checkpointing: 停用梯度檢查點。
- --lr: 學習率。
- --log: 實驗跟蹤選項 (
none
、wandb
、tensorboard
)。
高階引數
- --image-column: 指定要使用的影像列。
- --target-column: 指定要使用的目標列。
- --warmup-ratio: 用於線性預熱的訓練比例 (預設為 0.1)。
- --optimizer: 選擇最佳化器演算法 (預設為
adamw_torch
)。 - --scheduler: 選擇學習率排程器 (預設為
linear
,cosine
是另一個選項)。 - --weight-decay: 設定權重衰減率 (預設為 0.0)。
- --max-grad-norm: 用於梯度裁剪的梯度最大範數 (預設為 1.0)。
- --logging-steps: 確定記錄訓練進度的頻率 (預設為 -1,表示自動確定)。
- --evaluation-strategy: 指定評估頻率 (
no
、steps
、epoch
)。 - --save-total-limit: 限制要儲存的模型檢查點數量。
- --auto-find-batch-size: 根據硬體能力自動確定批次大小。
- --mixed-precision: 選擇精度模式 (
fp16
、bf16
或 None)。
使用 CLI 進行訓練
要使用 CLI 訓練目標檢測模型,您可以建立一個配置檔案並執行 autotrain
命令。以下是在 Hugging Face Hub 上的 CPPE-5 資料集上進行訓練的示例配置檔案。
示例配置檔案
task: object_detection
base_model: facebook/detr-resnet-50
project_name: autotrain-obj-det-cppe5-2
log: tensorboard
backend: local
data:
path: cppe-5
train_split: train
valid_split: test
column_mapping:
image_column: image
objects_column: objects
params:
image_square_size: 600
epochs: 100
batch_size: 8
lr: 5e-5
weight_decay: 1e-4
optimizer: adamw_torch
scheduler: linear
gradient_accumulation: 1
mixed_precision: fp16
early_stopping_patience: 50
early_stopping_threshold: 0.001
hub:
username: ${HF_USERNAME}
token: ${HF_TOKEN}
push_to_hub: true
執行訓練
要開始訓練,請使用以下命令
$ export HF_USERNAME=your_hugging_face_username
$ export HF_TOKEN=your_hugging_face_write_token
$ autotrain --config configfile.yml
此命令將使用 configfile.yml
中指定的配置來訓練您的目標檢測模型。
注意:僅當您將 push_to_hub
設定為 true
時,才需要匯出您的使用者名稱和令牌。
在某些 Hugging Face 資料集的情況下,資料集可能包含配置,此時您可以對 train_split 和 valid_split 使用 dataset_config:split_name
。例如,這個資料集有配置:full
和 mini
為此,配置檔案的更改將是
data:
path: keremberke/license-plate-object-detection
train_split: full:train
valid_split: full:validation
column_mapping:
image_column: image
objects_column: objects
如果您的資料集儲存在本地,則需要在配置 yaml 中更新以下內容
data:
path: /path/to/data/folder/
train_split: train # this folder contains images and metadata.jsonl
valid_split: val # this folder contains images and metadata.jsonl, optional, can be set to null
column_mapping:
image_column: image
objects_column: objects
使用 UI 進行訓練
在本地,您可以透過執行以下命令啟動 AutoTrain UI
$ pip install -U autotrain-advanced
$ autotrain app --host 127.0.0.1 --port 8000
應用程式將在 http://127.0.0.1:8000 啟動
在 UI 中上傳的資料格式與上面描述的 zip 檔案相同。
如果您沒有合適的硬體,也可以透過點選這裡在 Hugging Face Spaces 上啟動 UI。更多資訊請閱讀文件。
當使用來自 Hub 的資料集時,您必須正確對映列。使用本地資料集(資料夾或 zip)時,列對映應保持原樣。
總結
AutoTrain 簡化了訓練目標檢測模型這一複雜任務,使您能夠專注於微調模型以獲得最佳效能。透過遵循這些指南並利用可用的引數,您可以建立滿足您特定需求的有效目標檢測模型。無論使用 UI 還是 CLI,AutoTrain 都為構建強大的目標檢測模型提供了簡化的流程。
附言:所有使用 AutoTrain 訓練的模型都可以透過 API 推理和推理端點進行部署。
如有任何問題或功能請求,請檢視 GitHub 倉庫。
訓練愉快! :)