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

bash
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
modelyolox-sTên mô hình hoặc đường dẫn tới trọng số
taskGhi đè task một cách tường minh: detect, segment, semantic, pose, classify, gaze, obb, point, depth
pretrainedtrueDù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_scriptsfalseCho 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
epochs300Số epoch huấn luyện
batch16Kích thước batch. Với nhiều GPU, đây là batch toàn cục, được chia đều cho các GPU
imgsz640Kích thước ảnh huấn luyện: 640 (vuông) hoặc 480x640 (HxW)
deviceautoThiế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 đó
workers4Số worker của dataloader
cachefalseCache ảnh để tăng tốc nạp dữ liệu: ram, disk, true, false
seed0Seed ngẫu nhiên
resumeTiếp tục huấn luyện: true, hoặc đường dẫn tới một checkpoint
amptrueAutomatic Mixed Precision
amp_dtypefloat16Kiểu dữ liệu AMP trên CUDA: float16 hoặc bfloat16
cuda_graphfalseThu 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
compilefalseÁ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
lorafalseTinh 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_modelTeacher: một checkpoint detector, hoặc id của foundation teacher như dinov2 để distillation đặc trưng từ backbone
disTrọ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_typemgdLoss đặ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
optimizersgdOptimizer: sgd, adam, adamw
lr00.01Learning rate ban đầu
momentum0.937Momentum của SGD, và hệ số moment bậc nhất cho các optimizer Adam
weight_decay0.0005Điều chuẩn L2
nesterovtrueMomentum Nesterov
clip_max_normCắ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
scheduleryoloxwarmcosKiểu lịch trình LR
warmup_epochs5Thời lượng warmup
warmup_lr_start0.0LR khởi đầu của warmup
min_lr_ratio0.05Tỉ lệ LR tối thiểu
lr_drop100Epoch giảm LR theo bậc của RF-DETR

Tăng cường dữ liệu

Tham sốMặc địnhÝ nghĩa
mosaic1.0Xác suất mosaic
mixup1.0Xác suất mixup
hsv_prob1.0Xác suất jitter HSV
flip_prob0.5Xác suất lật ngang
degrees10.0Biên độ xoay, cộng và trừ, tính bằng độ
translate0.1Tỉ lệ tịnh tiến
shear2.0Gó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_epochs15Tắt tăng cường dữ liệu (data augmentation) trong N epoch cuối

EMA

Tham sốMặc địnhÝ nghĩa
ematrueExponential Moving Average
ema_decay0.9998Hệ số decay của EMA

Đánh giá trong lúc huấn luyện

Tham sốMặc địnhÝ nghĩa
valtrueĐánh giá trong lúc huấn luyện
eval_interval10Đánh giá sau mỗi N epoch, và sau epoch cuối cùng
max_det300Số dự đoán tối đa trên mỗi ảnh sau NMS của bước đánh giá
eval_max_detGiới hạn của bộ đánh giá COCO. Khi không đặt, dùng quy ước AP@100 của pycocotools
faster_coco_evaltrueDùng backend C++ faster-coco-eval cho các chỉ số COCO khi đã cài; nếu không thì quay về pycocotools
save_plotsfalseLưu các biểu đồ đánh giá cuối cùng trong lúc huấn luyện
patience50Patience của early stopping. 0 sẽ tắt nó

Đầu ra

Tham sốMặc địnhÝ nghĩa
projectruns/trainThư mục gốc cho đầu ra
nameTê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_okfalseDùng lại thư mục đầu ra đã có
save_period10Lưu checkpoint sau mỗi N epoch
log_interval10Ghi log loss sau mỗi N batch

Cờ dành cho agent

Tham sốMặc địnhÝ nghĩa
jsonfalseXuất JSON ra stdout
quietfalseChặn stderr
dry_runfalsePhân giải và in cấu hình mà không thực thi
help_jsonfalseXuất schema của lệnh dưới dạng JSON rồi thoát
Tham sốMặc địnhÝ nghĩa
min_samples0Độ 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_balancedFalseLấy mẫu theo hệ số lặp kiểu LVIS cho dataset đuôi dài (mặc định: tắt)
cls_pw0.0Số 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_weightsFalseTrọng số loss phân loại chuẩn hóa theo mẫu kiểu cũ (mặc định: tắt)
single_clsFalseHuấ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
classesNoneHuấ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_best0Lấ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_checkFalseXuấ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_bn0Tí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_weightChỉ 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
fliplrNoneXác suất lật ngang (tên thay thế của flip_prob trong hệ sinh thái)
flipud0.0Xác suất lật dọc
auto_augmentNoneChính sách auto-augment phân loại: randaugment, autoaugment, augmix (mặc định: không có)
erasing0.0Xác suất RandomErasing phân loại, 0 <= erasing < 1
cutmix0.0Xác suất CutMix phân loại (nhãn mềm)
scale0.5Khoả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_pctNoneTỷ 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_samples8Ả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ụ

Cơ bản
# 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
Kiểm tra cấu hình đã phân giải trước
# 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=true
Lần chạy có tên với công thức chỉ định rõ
libreyolo 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=true

Ghi 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ả.

Đã kiểm chứng với LibreYOLO v1.6.0.