Tăng cường dữ liệu
Augmentation được cấu hình bằng các nút điều chỉnh trên TrainConfig, nhưng mỗi model family chạy pipeline huấn luyện riêng, và pipeline không có nhánh mosaic sẽ bỏ qua mosaic_prob thay vì mô phỏng gần đúng.
Thiết lập các nút điều chỉnh
Các nút điều chỉnh tăng cường dữ liệu (augmentation) là đối số train() thông
thường.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.train( data="my-dataset.yaml", epochs=100, mosaic_prob=1.0, mixup_prob=0.15, hsv_prob=1.0, flip_prob=0.5, no_aug_epochs=15,)# CLI viết mosaic_prob thành mosaic và mixup_prob thành mixup.libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \ epochs=100 mosaic=1.0 mixup=0.15 hsv_prob=1.0 \ flip_prob=0.5 no_aug_epochs=15Ba nút có cách viết ngắn hơn, được cả train() lẫn CLI chấp nhận: mosaic ánh
xạ tới mosaic_prob, fliplr tới flip_prob, và với phát hiện, mixup ánh xạ
tới mixup_prob. Truyền một cách viết ngắn cùng trường tương ứng của nó với hai
giá trị khác nhau sẽ báo lỗi. Mọi nút khác được viết giống hệt ở cả hai nơi.
Ba trạng thái, không phải hai
Một nút có tác dụng hay không phụ thuộc vào family. Thư viện duy trì một bảng khai báo về điều đó, và mỗi mục có một trong ba trạng thái.
used nghĩa là nút đi tới pipeline và thay đổi sample. ignored nghĩa là nó
không bao giờ đến pipeline, vì vậy việc đặt giá trị không có tác dụng.
gated_by_mosaic nghĩa là nó chỉ áp dụng cho sample đi qua nhánh mosaic, vì vậy
với mosaic_prob=0, nó không bao giờ kích hoạt dù đã được nối vào pipeline.
Trạng thái thứ ba thường gây bất ngờ. Trên pipeline kiểu YOLOX, affine warp chạy
trên canvas mosaic và MixUp trộn một sample mosaic, vì vậy mosaic_prob=0 âm
thầm tắt đồng thời degrees, translate, shear, perspective,
mosaic_scale, mixup_prob và mixup_scale. Trainer ghi cảnh báo riêng cho
trường hợp MixUp:
mixup_prob=0.15 has no effect for YOLOv9: mixup only applies to mosaic samplesand mosaic_prob=0. Set mosaic_prob > 0 to enable mixup.CLI cũng cảnh báo về các nút bị bỏ qua và chỉ liệt kê những nút bạn thực sự nhập:
Warning: RF-DETR ignores these parameters: degrees, mosaicBốn dạng pipeline
Các family tập trung thành bốn pipeline huấn luyện, và pipeline quyết định gần như toàn bộ câu trả lời.
Pipeline mosaic kiểu YOLOX áp dụng HSV jitter và phép lật theo từng sample, sau đó chạy affine và MixUp bên trong nhánh mosaic. Pipeline này bao gồm YOLOX, YOLOv7, YOLOv9 cùng các biến thể E2E và P2, RTMDet, PicoDet, RT-DETR, RT-DETRv2 và FOMO.
Pipeline pass-through kiểu DETR không có mosaic và không có affine warp.
Photometric distortion, zoom-out và IoU crop của nó là hằng số recipe thay vì
nút cấu hình, nên chỉ flip_prob và no_aug_epochs có tác dụng. Pipeline này
bao gồm D-FINE, Dome-DETR, DEIM, DEIMv2, RT-DETRv4, EC và RF-DETR với một thay
đổi.
Pipeline phân loại ImageFolder có các điều khiển augmentation riêng. flip_prob điều khiển lật ngang và mặc định là 0.5; fliplr là tên thay thế của nó.
YOLO-NAS có dạng riêng: hoàn toàn không có mosaic, affine theo từng sample luôn
bật, và MixUp được áp dụng độc lập thay vì bị ràng buộc. Giá trị mosaic_scale
của nó được dùng lại làm phạm vi tỷ lệ affine.
SegFormer, LingBot-Vision và NAFNet đều chạy pipeline riêng theo tác vụ, với tính
ngẫu nhiên được cố định trong family thay vì có thể cấu hình. Với SegFormer và
LingBot-Vision, các nút có tác dụng là thuộc tính class semantic_scale_jitter và
semantic_hsv_prob, không phải mosaic_scale và hsv_prob. Phép crop và lật của NAFNet là các thao tác
ghép cặp đầu vào với target ở xác suất cố định 0.5.
Mỗi family áp dụng nút nào
Bảng bên dưới là đặc tả được phân phối tại
libreyolo/data/augment/spec.py, được các test riêng của thư viện đối chiếu với
cách nối pipeline thực. Hãy đọc bảng ở đó thay vì suy luận từ kiến trúc.
from libreyolo.data.augment.spec import AUG_KNOBS, aug_support for knob, description in AUG_KNOBS.items(): support = aug_support("yolo9")[knob] print(f"{knob:16} {support.status:16} {support.note or description}")from libreyolo.data.augment.spec import ignored_aug_params print(sorted(ignored_aug_params("rfdetr")))Tóm tắt theo pipeline cho các nút cơ sở:
| Nút | Kiểu YOLOX | YOLO-NAS | Kiểu DETR | Phân loại |
|---|---|---|---|---|
mosaic_prob | được dùng | bị bỏ qua | bị bỏ qua | bị bỏ qua |
mixup_prob | bị ràng buộc bởi mosaic | được dùng | bị bỏ qua | bị bỏ qua |
hsv_prob | được dùng | được dùng | bị bỏ qua | bị bỏ qua |
flip_prob | được dùng | được dùng | được dùng | được dùng |
flipud | được dùng | được dùng | bị bỏ qua | được dùng |
degrees | bị ràng buộc bởi mosaic | được dùng | bị bỏ qua | bị bỏ qua |
translate | bị ràng buộc bởi mosaic | được dùng | bị bỏ qua | bị bỏ qua |
shear | bị ràng buộc bởi mosaic | được dùng | bị bỏ qua | bị bỏ qua |
perspective | bị ràng buộc bởi mosaic | được dùng | bị bỏ qua | bị bỏ qua |
mosaic_scale | bị ràng buộc bởi mosaic | được dùng | bị bỏ qua | bị bỏ qua |
mixup_scale | bị ràng buộc bởi mosaic | được dùng | bị bỏ qua | bị bỏ qua |
no_aug_epochs | được dùng | được dùng | được dùng | được dùng |
Các ngoại lệ trong những cột đó đều thu hẹp phạm vi:
- RTMDet, PicoDet, RT-DETR, RT-DETRv2 và FOMO không có phép lật dọc, vì vậy
flipudbị bỏ qua. Wrapper mosaic của FOMO cũng được dựng không có perspective. - Pipeline gốc của RF-DETR không có HSV jitter, vì vậy
hsv_probbị bỏ qua bên cạnh các mục trong cột kiểu DETR. - EC áp dụng
hsv_prob,degreesvàtranslate, nhưng chỉ chotask="pose", nơi transform nhận biết keypoint đọc các giá trị này. Đường dẫn detect và segment dùng recipe photometric cố định. - DINOv2 tuân theo cột kiểu DETR cho tác vụ detect và semantic, đồng thời bổ
sung bộ tùy chọn phân loại cho
task="classify".
no_aug_epochs có trạng thái used ở mọi nơi nhưng không mang cùng ý nghĩa. Trên pipeline mosaic, nó tắt mosaic và MixUp trong các epoch cuối. Trên pipeline kiểu DETR, nó dừng augmentation quang học, zoom-out và cắt ảnh, đồng thời định hình phần cuối lịch trình. Trên pipeline phân loại, nó tắt auto-augmentation, erasing, MixUp và CutMix; cắt và lật ảnh vẫn hoạt động.
perspective thêm một phép méo phối cảnh lên trên phép xoay, scale, shear và dịch
chuyển. Mỗi góc canvas dịch vào trong một lượng ngẫu nhiên tối đa
min(perspective * 100, 0.2) lần nửa cạnh canvas, theo từng trục, nên
perspective=0.001 dịch một góc tối đa 5 phần trăm cạnh ở mọi độ phân giải, và
mọi giá trị từ 0.002 trở lên đạt cùng mức tối đa. Mặc định 0 giữ phép méo ở
dạng affine, và một giá trị âm phát sinh ValueError khi mẫu đầu tiên bị làm
méo. YOLOv9 cùng các biến thể E2E và P2, YOLOX, YOLOv7, YOLO-NAS, PP-YOLOE,
RTMDet, PicoDet, RT-DETR và RT-DETRv2 áp dụng nó.
MixUp trong pipeline mosaic của YOLOv9, mà YOLOv9 cùng các biến thể, YOLOv7, RT-DETR và RT-DETRv2 huấn luyện qua, lấy tỉ lệ trộn từ Beta(1, 1), đồng đều trên [0, 1]. Wrapper mosaic của YOLOX, dùng bởi YOLOX, RTMDet và PicoDet, trộn ở mức cố định 0.5.
Bộ tùy chọn phân loại
Bốn nút điều khiển pipeline phân loại và không điều khiển gì khác. Các family phát hiện bỏ qua cả bốn.
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train( data="my-classification-dataset", epochs=50, auto_augment="randaugment", erasing=0.25, mixup=0.2, cutmix=0.2,)auto_augment nhận "randaugment", "autoaugment", "augmix" hoặc None.
erasing là xác suất RandomErasing. mixup và cutmix là xác suất theo batch
tạo nhãn mềm; tối đa một loại chạy trên mỗi batch, MixUp chạy trước, vì vậy hai
giá trị được cộng lại và tổng không nên vượt quá 1.
Cả bốn đều mặc định tắt, vì vậy quá trình huấn luyện phân loại không thay đổi nếu bạn không yêu cầu.
train() và CLI định tuyến mixup theo tác vụ: phân loại dùng trộn batch, còn phát hiện dùng mixup_prob.
scale=0.5 nghĩa là khoảng diện tích cắt ngẫu nhiên (0.5, 1.0); một cặp rõ ràng đặt cả hai giới hạn. crop_pct=None giữ tỷ lệ đổi kích thước đánh giá của họ mô hình; giá trị ghi đè ảnh hưởng đánh giá trong huấn luyện và đánh giá riêng, còn xuất giữ tiền xử lý gốc của họ mô hình.
CLI cung cấp auto_augment, erasing, cutmix, fliplr và flipud. mixup trong phân loại nghĩa là trộn batch và mặc định là 0.0. Lật ngang mặc định là 0.5 và lật dọc là 0.0. mixup + cutmix không được vượt quá 1.
no_aug_epochs tắt auto-augmentation, erasing, MixUp và CutMix trong các epoch cuối, giữ cắt và lật ảnh. Công thức phân loại mặc định đặt phần cuối này là 0.
Nút riêng theo family
Một số nút nằm trên subclass cấu hình của family thay vì class cơ sở, vì vậy chúng chỉ tồn tại cho family đó và không có flag CLI.
| Family | Nút | Tác dụng |
|---|---|---|
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste | Xác suất augmentation thực thể copy-paste, chỉ cho task="segment" |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste_mode | "flip" dùng lại cùng sample đã lật, "mixup" lấy sample thứ hai |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | rot90 | Xác suất xoay ngẫu nhiên 90 độ |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | max_labels | Giới hạn ground truth trên mỗi ảnh trong transform huấn luyện, mặc định 300 |
| RF-DETR | copy_paste, copy_paste_mode | Copy-paste cho task="segment", chỉ ở chế độ "flip" |
| RF-DETR, D-FINE, EC | crop_resize_prob | Xác suất crop-resize ngẫu nhiên |
| EC, YOLO-NAS | brightness_contrast_prob, affine_prob | Xác suất jitter và affine nhận biết keypoint trên đường dẫn tư thế |
max_labels là nút làm mất dữ liệu. Các hộp vượt quá giới hạn bị loại kèm một
cảnh báo một lần thay vì phát sinh lỗi, vì vậy cần tăng giá trị cho ảnh dày đặc
như ảnh hàng không. Bộ nhớ gán nhãn theo ảnh dày đặc nhất trong batch, không theo
giới hạn này.
Mosaic và MixUp bị tắt cho quá trình huấn luyện hộp xoay bất kể giá trị các nút, vì augmentation nhận biết góc cho hộp xoay chưa được triển khai.
Nội dung liên quan
- Xem Siêu tham số để biết
no_aug_epochsdưới dạng đối số lịch và phần còn lại củatrain(). - Xem Dataset để biết các định dạng nhãn mà những transform này sử dụng.