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/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--epochs 50 là cùng một tham số. Giá trị boolean nhận truefalse: 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 trên mỗi thiết bị
imgsz640Kích thước ảnh huấn luyện: 640 (vuông) hoặc 480x640 (HxW)
deviceautoThiết bị: 0, cpu, mps, auto
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
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

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
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
nameexpTên thí nghiệm
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

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 nt 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_scalemixup_scale không tác động tới đâu cả ở đó. EC dùng chung pipeline đó nhưng vẫn đọc hsv_prob, degreestranslate khi task của nó là pose. Các family phân loại, SegFormer 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, momentumnesterov.

Đặ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 cho hầu hết các family; RF-DETR không thể tắt việc đánh giá theo cách đó và ghi log rằng nó đã bỏ qua yêu cầu.

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 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ó.

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.

mosaicmixup là cách viết trên dòng lệnh của các trường cấu hình mosaic_probmixup_prob. Ở 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.5.0.