libreyolo train
Huấn luyện một mô hình trên một tập dữ liệu (dataset) và ghi checkpoint, chỉ số cùng log vào một thư mục chạy. Mọi tham số bên dưới đều có giá trị mặc định lấy từ định nghĩa lệnh, và cấu hình huấn luyện riêng của từng dòng mô hình có thể thay thế giá trị đó.
- Lệnh
libreyolo train- Bắt buộc
data- Đầu ra
- Checkpoint, chỉ số và log nằm dưới runs/train/<name>; khi không có name=, dùng tên lần chạy riêng của family, chẳng hạn yolo9_exp
Cú pháp
libreyolo train data=<dataset.yaml> [model=<name|path>] [key=value ...]Tham số là các cặp key=value, và dạng POSIX cũng dùng được, nên epochs=50 và
--epochs 50 là cùng một tham số. Giá trị boolean nhận true và false:
amp=false trở thành --no-amp ở những cờ có dạng phủ định.
Tham số
Mô hình và dữ liệu
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
data | Đường dẫn tới YAML của dataset (định dạng YOLO, ví dụ coco8.yaml). Bắt buộc | |
model | yolox-s | Tên mô hình hoặc đường dẫn tới trọng số |
task | Ghi đè task một cách tường minh: detect, segment, semantic, pose, classify, gaze, obb, point, depth | |
pretrained | true | Dùng trọng số được huấn luyện sẵn (pretrained). false sẽ dựng kiến trúc và huấn luyện từ đầu |
allow_download_scripts | false | Cho phép mã Python nhúng trong khối download của YAML dataset |
Vòng lặp huấn luyện
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
epochs | 300 | Số epoch huấn luyện |
batch | 16 | Kích thước batch. Với nhiều GPU, đây là batch toàn cục, được chia đều cho các GPU |
imgsz | 640 | Kích thước ảnh huấn luyện: 640 (vuông) hoặc 480x640 (HxW) |
device | auto | Thiết bị: 0, cpu, mps, auto. Một danh sách GPU như 0,1 hoặc [0,1] sẽ huấn luyện trên các GPU đó |
workers | 4 | Số worker của dataloader |
cache | false | Cache ảnh để tăng tốc nạp dữ liệu: ram, disk, true, false |
seed | 0 | Seed ngẫu nhiên |
resume | Tiếp tục huấn luyện: true, hoặc đường dẫn tới một checkpoint | |
amp | true | Automatic Mixed Precision |
amp_dtype | float16 | Kiểu dữ liệu AMP trên CUDA: float16 hoặc bfloat16 |
cuda_graph | false | Thu lượt forward và backward của quá trình huấn luyện vào CUDA graph. Chỉ một GPU và các family được hỗ trợ; phần còn lại chạy ở chế độ eager |
compile | false | Áp dụng torch.compile cho mạng huấn luyện: true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. Chỉ một GPU CUDA; các lần chạy khác huấn luyện ở chế độ eager kèm một cảnh báo |
lora | false | Tinh chỉnh (fine-tuning) bằng LoRA, dành cho các family transformer liệt kê ở mục Ghi chú |
freeze | Đóng băng các lớp: một số nguyên đếm, một danh sách chỉ số, hoặc tên module |
Distillation
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
distill_model | Teacher: một checkpoint detector, hoặc id của foundation teacher như dinov2 để distillation đặc trưng từ backbone | |
dis | Trọng số loss của distillation. Khi không đặt, dùng giá trị mặc định đã công bố cho kiểu loss tương ứng | |
distill_loss_type | mgd | Loss đặc trưng cho teacher là detector: mgd, cwd. Foundation teacher luôn dùng feat_mse |
Optimizer
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
optimizer | sgd | Optimizer: sgd, adam, adamw |
lr0 | 0.01 | Learning rate ban đầu |
momentum | 0.937 | Momentum của SGD, và hệ số moment bậc nhất cho các optimizer Adam |
weight_decay | 0.0005 | Điều chuẩn L2 |
nesterov | true | Momentum Nesterov |
clip_max_norm | Cắt chuẩn L2 của gradient về giá trị này trước mỗi bước optimizer; 0 tắt việc cắt. Khi không đặt, giá trị của family được áp dụng |
Scheduler
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
scheduler | yoloxwarmcos | Kiểu lịch trình LR |
warmup_epochs | 5 | Thời lượng warmup |
warmup_lr_start | 0.0 | LR khởi đầu của warmup |
min_lr_ratio | 0.05 | Tỉ lệ LR tối thiểu |
lr_drop | 100 | Epoch giảm LR theo bậc của RF-DETR |
Tăng cường dữ liệu
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
mosaic | 1.0 | Xác suất mosaic |
mixup | 1.0 | Xác suất mixup |
hsv_prob | 1.0 | Xác suất jitter HSV |
flip_prob | 0.5 | Xác suất lật ngang |
degrees | 10.0 | Biên độ xoay, cộng và trừ, tính bằng độ |
translate | 0.1 | Tỉ lệ tịnh tiến |
shear | 2.0 | Góc xiên (shear) |
mosaic_scale | (0.1,2.0) | Khoảng tỉ lệ của mosaic |
mixup_scale | (0.5,1.5) | Khoảng tỉ lệ của mixup |
no_aug_epochs | 15 | Tắt tăng cường dữ liệu (data augmentation) trong N epoch cuối |
EMA
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
ema | true | Exponential Moving Average |
ema_decay | 0.9998 | Hệ số decay của EMA |
Đánh giá trong lúc huấn luyện
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
val | true | Đánh giá trong lúc huấn luyện |
eval_interval | 10 | Đánh giá sau mỗi N epoch, và sau epoch cuối cùng |
max_det | 300 | Số dự đoán tối đa trên mỗi ảnh sau NMS của bước đánh giá |
eval_max_det | Giới hạn của bộ đánh giá COCO. Khi không đặt, dùng quy ước AP@100 của pycocotools | |
faster_coco_eval | true | Dùng backend C++ faster-coco-eval cho các chỉ số COCO khi đã cài; nếu không thì quay về pycocotools |
save_plots | false | Lưu các biểu đồ đánh giá cuối cùng trong lúc huấn luyện |
patience | 50 | Patience của early stopping. 0 sẽ tắt nó |
Đầu ra
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
project | runs/train | Thư mục gốc cho đầu ra |
name | Tên thí nghiệm. Khi không đặt, lần chạy lấy tên mà train() của family dùng, chẳng hạn yolo9_exp hoặc dfine_exp | |
exist_ok | false | Dùng lại thư mục đầu ra đã có |
save_period | 10 | Lưu checkpoint sau mỗi N epoch |
log_interval | 10 | Ghi log loss sau mỗi N batch |
Cờ dành cho agent
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
json | false | Xuất JSON ra stdout |
quiet | false | Chặn stderr |
dry_run | false | Phân giải và in cấu hình mà không thực thi |
help_json | false | Xuất schema của lệnh dưới dạng JSON rồi thoát |
| Tham số | Mặc định | Ý nghĩa |
|---|---|---|
min_samples | 0 | Độ dài epoch tối thiểu cho dataset nhỏ: khi dataset có ít ảnh hơn, lấy số mẫu này mỗi epoch có hoàn lại (0 = tắt) |
class_balanced | False | Lấy mẫu theo hệ số lặp kiểu LVIS cho dataset đuôi dài (mặc định: tắt) |
cls_pw | 0.0 | Số mũ trọng số nghịch đảo tần suất phân loại: 0 tắt, 1 đầy đủ (trọng số lớp đối tượng trung bình 1; không kết hợp với class_weights=True) |
class_weights | False | Trọng số loss phân loại chuẩn hóa theo mẫu kiểu cũ (mặc định: tắt) |
single_cls | False | Huấn luyện bộ phát hiện được hỗ trợ với mọi nhãn ánh xạ về lớp đối tượng 0 |
classes | None | Huấn luyện bộ phát hiện được hỗ trợ chỉ trên các ID lớp đối tượng gốc này, phân cách bằng dấu phẩy (ví dụ '0,3,5'); mọi lớp khác bị bỏ như không có nhãn. ID được giữ nguyên, không nén lại |
average_best | 0 | Lấy trung bình đều N checkpoint tốt nhất theo chỉ số theo dõi vào weights/average.pt khi kết thúc huấn luyện (0 = tắt) |
export_check | False | Xuất ONNX trước epoch 1 và dừng lần chạy nếu xuất lỗi (mặc định: tắt) |
precise_bn | 0 | Tính lại thống kê chạy BatchNorm từ số ảnh huấn luyện này sau epoch cuối (0 = tắt) |
aux_weight | Chỉ YOLO9: trọng số loss của nhánh phụ PGI. Một giá trị sẽ gắn một nhánh mới với trọng số đó và 0 chỉ huấn luyện head chính. Khi không đặt, nhánh chỉ được gắn với 0.25 khi trọng số có chứa tensor PGI hoặc lần chạy huấn luyện từ đầu | |
fliplr | None | Xác suất lật ngang (tên thay thế của flip_prob trong hệ sinh thái) |
flipud | 0.0 | Xác suất lật dọc |
auto_augment | None | Chính sách auto-augment phân loại: randaugment, autoaugment, augmix (mặc định: không có) |
erasing | 0.0 | Xác suất RandomErasing phân loại, 0 <= erasing < 1 |
cutmix | 0.0 | Xác suất CutMix phân loại (nhãn mềm) |
scale | 0.5 | Khoảng diện tích RandomResizedCrop phân loại: giới hạn dưới số thực hoặc cặp (min,max) rõ ràng |
crop_pct | None | Tỷ lệ đổi kích thước đánh giá phân loại trước cắt giữa (mặc định: giá trị gốc của họ mô hình) |
plot_samples | 8 | Ảnh mẫu trong biểu đồ mẫu đánh giá: 0 để không có, -1 để lấy mọi ảnh được đánh giá (không đổi chỉ số) |
Ví dụ
# coco8.yaml có sẵn trong gói và tự tải 8 ảnh của nó ở lần chạy đầu tiênlibreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8# In ra cấu hình mà lần chạy sẽ dùng, gồm cả mặc định của family, rồi thoát# mà không huấn luyện hay nạp dữ liệulibreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=truelibreyolo train model=LibreYOLO9s.pt data=coco8.yaml \ epochs=50 batch=8 optimizer=adamw lr0=0.001 weight_decay=0.0001 \ patience=20 save_period=5 project=runs/train name=yolo9s-coco8 exist_ok=trueGhi chú
Mặc định ở trên không phải lúc nào cũng là giá trị được dùng
Mỗi dòng mô hình (family) đều mang cấu hình huấn luyện riêng, và ở đâu cấu hình
đó khác với cấu hình cơ sở, giá trị của nó sẽ thay thế mặc định của lệnh cho mọi
tham số mà bạn không đặt tường minh. Tự đặt tham số thì luôn thắng.
libreyolo cfg in ra các mặc định cơ sở và phần ghi đè theo từng family, đó là
cách để xem một family cụ thể thực sự sẽ dùng gì.
imgsz là tham số mà điều này quan trọng nhất. Mặc định của lệnh là 640, vốn
không phải đầu vào gốc của mọi checkpoint: các kích thước phát hiện đối tượng đã
công bố của RF-DETR là 384, 512, 576 và 704, còn checkpoint YOLOX n và t là
416. RF-DETR và DEIMv2 được xử lý bằng cách chỉ chuyển tiếp imgsz khi nó được
đặt tường minh, nên nếu không thì kích thước riêng của chúng vẫn giữ nguyên hiệu
lực. Các family khác nhận đúng giá trị được đưa vào và huấn luyện ở kích thước
đó. FOMO là trường hợp nghiêm ngặt: mỗi kích thước chỉ chấp nhận đầu vào gốc của
nó (96, 192 và 224), nên một lần chạy FOMO cần đặt imgsz cho khớp, nếu không
nó sẽ dừng với lỗi. RF-DETR còn yêu cầu giá trị phải chia hết cho patch size
nhân với số lượng window của nó, và báo hai kích thước hợp lệ gần nhất khi giá
trị không thỏa.
Những tham số mà family bỏ qua
Không phải family nào cũng đọc mọi tham số, và nhóm data augmentation là chỗ
điều đó lộ rõ nhất. RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETRv4 và DINOv2 huấn
luyện qua các pipeline pass-through không có mosaic, không mixup và không biến
đổi affine, nên mosaic, mixup, hsv_prob, degrees, translate, shear,
mosaic_scale và mixup_scale không tác động tới đâu cả ở đó. EC dùng chung
pipeline đó nhưng vẫn đọc hsv_prob, degrees và translate khi task của nó
là pose. Các family phân loại bỏ qua nhóm đó trừ mixup, vốn là batch MixUp
đối với chúng, và có đọc flip_prob. SegFormer, LingBot-Vision và NAFNet bỏ qua
toàn bộ nhóm đó cùng với flip_prob, vì phép lật của chúng chạy ở một xác suất cố định chứ không
cấu hình được. YOLO-NAS chỉ bỏ qua riêng mosaic, vì thay vào đó nó tăng cường
bằng một phép affine trên từng mẫu luôn bật. RF-DETR bỏ qua thêm ba tham số nữa
ngoài danh sách đó: optimizer, momentum và nesterov.
Đặt một trong số này không phải là lỗi. Lần chạy sẽ ghi ra stderr một dòng nêu
tên family và các tham số nó sẽ bỏ qua, rồi huấn luyện, và dòng đó là danh sách
chuẩn cho phiên bản đang cài. Nó cũng là tín hiệu duy nhất, nên một lần chạy
trong script với quiet=true sẽ chặn luôn cảnh báo đó cùng mọi thứ khác trên
stderr.
val=false là một trường hợp liên quan. Nó đặt eval_interval về 0, qua đó
tắt việc đánh giá trong lúc huấn luyện, kể cả ở epoch cuối, và lần chạy không ghi
ra best.pt.
Những hành vi khác đáng biết
lora=true được RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 và v4, EC, GTR và
ConvNeXt chấp nhận. Mọi family khác sẽ thoát với config_unsupported thay vì
huấn luyện mà không có nó.
clip_max_norm được chấp nhận ở những family có khai báo nó trong cấu hình huấn
luyện: YOLOv9, YOLOv9-E2E và YOLOv9-P2, nơi mặc định là 10, cùng D-FINE,
Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2, RT-DETRv4, RF-DETR,
DINOv2 và GTR, nơi mặc định là 0.1. Mọi family khác sẽ thoát với
config_unsupported, và một giá trị âm hoặc không hữu hạn sẽ thoát với
config_type_error.
device=0,1 dựng mô hình trên GPU đầu tiên trong danh sách và truyền danh sách
đó cho train(), hàm này khởi chạy một tiến trình cho mỗi GPU. Xem
huấn luyện multi-GPU.
RF-DETR không có chuyển đổi từ detect sang segment. task=segment với một
checkpoint segment của RF-DETR sẽ nạp checkpoint đó bất kể tên tệp của nó, vì
metadata của checkpoint quyết định task, còn một checkpoint phát hiện đối tượng
sẽ dừng với một lỗi thay vì huấn luyện một mask head chưa được huấn luyện.
pretrained=false kết hợp với resume bị từ chối ở những family có hỗ trợ huấn
luyện từ đầu, vì hai thứ này yêu cầu những điều trái ngược nhau.
mosaic và mixup là cách viết trên dòng lệnh của các trường cấu hình
mosaic_prob và mixup_prob; trên một mô hình phân loại, mixup thay vào đó là
batch MixUp. Ở những family mà mixup chỉ áp dụng cho các mẫu
mosaic, mixup lớn hơn không đi cùng mosaic bằng không sẽ không bao giờ kích
hoạt, và lần chạy sẽ báo như vậy.
dry_run=true phân giải tham chiếu mô hình, áp dụng mặc định của family, và in
ra cấu hình mà nó sẽ dùng để huấn luyện. Nó không nạp dataset, nên đây là cách
rẻ để xác nhận một tham số đã nhận đúng giá trị bạn mong đợi.
stdout mang đối tượng kết quả cuối cùng; tiến trình và cảnh báo đi ra stderr.
Mã thoát là 0 khi thành công, 2 khi lỗi cách dùng hoặc cấu hình, 3 khi
không tìm thấy hoặc không đọc được dataset, 4 khi không nạp được mô hình, và
1 cho các lỗi runtime khác.
Liên quan: libreyolo doctor để kiểm tra dataset trước khi
bắt tay vào một lần chạy, libreyolo monitor để theo dõi
lần chạy trên trình duyệt, libreyolo val để đo kết quả.