Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started
Xây dựng Dataset YOLO Hiệu năng Cao·Chuẩn bị·Bài học 7/10
Bài họcngười mới bắt đầu

Sử dụng Augmentation cẩn thận

Kiểm thử mọi phép augmentation với camera triển khai, xây dựng profile có căn cứ, train với profile đó và kiểm tra kết quả trong các batch train.

Hãy hình dung một dây chuyền phân loại tách viên nang đỏ khỏi viên nang cam, được train với mức dịch hue mặc định. Ở mỗi epoch, model đều thấy viên nang đỏ bị đổi màu thành cam, nên model học rằng màu sắc không quan trọng, trong khi đó chính là điều duy nhất model cần học. Augmentation chỉ giúp model vững chắc hơn khi mỗi phép biến đổi là điều camera triển khai thực sự có thể tạo ra. Bài học này cung cấp cho bạn phép kiểm tra để quyết định nên giữ lại những phép biến đổi nào.

Kết quả

Chọn profile augmentation, giải thích mỗi đối số được thay đổi bằng một dòng nêu rõ căn cứ triển khai, train với profile đó và xác minh trong train_batch0.jpg.

Lộ trình cấp tốc
Nếu bạn đã nắm rõ cách thực hiện, đây là phiên bản tóm tắt.
  1. Trước tiên, train với augmentation mặc định và ghi lại baseline.

  2. Tắt những phép biến đổi mà camera không thể tạo ra, chẳng hạn dịch hue khi màu sắc xác định lớp.

  3. Bật những phép biến đổi mà camera có thể tạo ra, chẳng hạn flipud cho góc nhìn từ trên xuống.

  4. Mở train_batch0.jpg và xác nhận các bounding box vẫn khít, đồng thời các đặc điểm nhận biết lớp vẫn rõ.

Thực hành

Augmentation có tác dụng gì#

Các phép augmentation áp dụng cho một ảnh vẹt đuôi dài: lật ngang, cắt ảnh, làm mờ trung vị, tương phản, dịch hue-saturation-value và gamma

Data augmentation biến đổi ảnh train ngay trong quá trình chạy, để model nhìn thấy phiên bản hơi khác của mỗi ảnh ở từng epoch. Nếu thực hiện đúng cách, augmentation cải thiện khả năng chống chịu với thay đổi về ánh sáng, tỷ lệ và hướng, đồng thời giảm overfitting, vì model không thể ghi nhớ những ảnh liên tục thay đổi. Nếu thực hiện sai, augmentation dạy model nhận diện những cảnh bất khả thi về mặt vật lý và che giấu các khoảng trống trong dataset mà bạn cần khắc phục.

Hãy nhìn vào bảng hue ở trên: con vẹt đuôi dài màu đỏ chuyển thành màu vàng. Điều đó không ảnh hưởng nếu bài toán là "vẹt đuôi dài hay không phải vẹt đuôi dài", nhưng lại gây hại nếu màu sắc là yếu tố phân biệt hai lớp của bạn.

Các giá trị mặc định quan trọng#

Đây là các giá trị mặc định trong Ultralytics 8.4; tài liệu tham chiếu về cài đặt augmentation liệt kê mọi đối số:

Đối sốMặc địnhTác dụngThay đổi khi nào
hsv_h0.015Dịch hueĐặt thành 0 khi màu sắc xác định lớp
hsv_s / hsv_v0.7 / 0.4Dịch saturation và độ sángGiảm nếu điều kiện ánh sáng cố định và được kiểm soát
degrees0.0Xoay ngẫu nhiên (±độ)Tăng khi object có thể xuất hiện ở mọi góc độ
translate / scale0.1 / 0.5Dịch chuyển và phóng to/thu nhỏGiảm nếu việc cắt ảnh có thể làm mất các bộ phận xác định lớp
fliplr0.5Xác suất lật ngangĐặt thành 0 khi trái và phải có ý nghĩa, chẳng hạn với văn bản
flipud0.0Xác suất lật dọcTăng cho góc nhìn từ trên xuống, ảnh chụp trên không hoặc ảnh kính hiển vi
mosaic1.0Ghép bốn ảnh thành mộtHiếm khi dùng; xem close_mosaic
close_mosaic10Tắt mosaic trong N epoch cuốiGiảm nếu lượt train rất ngắn
mixup / cutmix0.0 / 0.0Trộn hai ảnh / dán một vùng ảnh lên ảnh khácThử trên dataset nhỏ sau khi đã có baseline
copy_paste0.0Dán các instance object giữa các ảnhDataset segmentation, semantic và OBB có các lớp hiếm

Dataset depth là trường hợp ngoại lệ: mosaic, mixup, cutmix và copy_paste sẽ tạo ra các bản đồ depth ghép cặp không hợp lệ, vì vậy bộ nạp dữ liệu depth tự động đặt chúng thành 0.

Kiểm tra theo môi trường triển khai#

Mỗi phép biến đổi được bật phải vượt qua một câu hỏi, rồi đến câu hỏi thứ hai:

Phép biến đổiThực tế?Kết luận
Độ sáng ±30% trên camera ngoài trờiCó: thay đổi theo thời điểm trong ngàyGiữ lại
Lật ngang trên camera an ninhCó: người đi lại theo cả hai hướngGiữ lại
Lật dọc trên camera gắn tườngKhông: sàn nhà luôn ở phía dướiTắt
Lật dọc trên camera băng chuyền nhìn từ trên xuốngCó: trong khung hình không có khái niệm “phía trên”Bật
Xoay 90° trên camera đường bộ cố địnhKhông: camera không bao giờ xoayTắt
Dịch sắc độ khi các bộ phận màu đỏ và xanh lá thuộc các class khác nhauKhông: làm mất tín hiệuTắt

Phép tăng cường xoay 180 độ: một con vẹt đuôi dài lộn ngược, góc nhìn mà camera cố định hướng thẳng đứng không bao giờ ghi được

Ảnh con vẹt đuôi dài lộn ngược phù hợp để huấn luyện drone nhìn thẳng xuống, nhưng lại lãng phí với camera gắn cố định trên tường. Các phép biến đổi không vượt qua được bài kiểm tra này tạo ra tín hiệu huấn luyện tiêu cực: model học cách nhận diện những hình ảnh mà model sẽ không bao giờ thấy, làm giảm dung lượng dành cho những hình ảnh mà model sẽ gặp.

Một cấu hình mẫu#

Camera nhìn từ trên xuống đặt phía trên băng chuyền phân loại các bộ phận có class chỉ khác nhau về màu sắc. Cần bỏ jitter sắc độ, trong khi lật dọc và xoay nhẹ trở nên thực tế. Cấu hình này chạy như minh họa trên bộ demo COCO8; thay bằng YAML dữ liệu và số epoch thực tế của bạn:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=1,
    imgsz=320,
    hsv_h=0.0,  # màu sắc là tín hiệu của lớp: giữ nguyên sắc độ
    flipud=0.5,  # góc nhìn từ trên xuống: không có "phía trên" trong khung hình
    degrees=10.0,  # các bộ phận có thể nằm ở mọi góc nhỏ
)

Mở train_batch0.jpg trong thư mục chạy và kiểm tra ba điều: bbox vẫn khít sau phép biến đổi, các đặc điểm xác định class (màu sắc, hình dạng, văn bản) vẫn được giữ nguyên, và không có gì trông bất khả thi về mặt vật lý. Giảm cường độ của bất kỳ phép biến đổi nào vi phạm một trong các điều đó. Huấn luyện model đầu tiên trình bày về chính quy trình huấn luyện.

Mosaic và close_mosaic#

Phép tăng cường Mosaic ghép bốn ảnh vẹt thành một ảnh huấn luyện

Mosaic ghép bốn ảnh thành một và được bật theo mặc định. Đây là phép tăng cường có tác động lớn nhất cho bài toán phát hiện: mỗi ảnh huấn luyện chứa nhiều cảnh, tỷ lệ và ngữ cảnh đối tượng. Điểm hạn chế là ảnh mosaic không giống các khung hình khi triển khai, vì vậy close_mosaic=10 tắt mosaic trong 10 epoch cuối để model hoàn tất huấn luyện trên đầu vào thực tế. Việc tắt mosaic cũng tắt mixup, cutmix và copy_paste, trong khi các phép lật, HSV và biến đổi hình học vẫn tiếp tục chạy.

Các lần chạy ngắn không bao giờ dùng mosaic

Trong các lần chạy không dài hơn close_mosaic epoch, bao gồm cấu hình một epoch ở trên, mosaic sẽ tắt ngay từ epoch đầu tiên. Hãy đánh giá mosaic từ train_batch0.jpg của một lần chạy đủ độ dài, không phải từ một bài kiểm tra nhanh.

Những điều phép tăng cường không thể khắc phục#

Phép tăng cường khuếch đại những gì vốn đã có. Nếu dataset không có ảnh ban đêm, không thiết lập nào tạo ra cảnh đêm: nó chỉ tạo ra các phiên bản sáng hơn và tối hơn của cảnh ban ngày. Nếu một class chỉ hoạt động tốt khi dùng phép tăng cường mạnh, bạn chưa có đủ dữ liệu của class đó. Hãy quay lại Thu thập dữ liệu chất lượng cao, có tính đại diện.

Vặn mọi nút điều chỉnh lên cao sẽ che khuất vấn đề thực sự

Dataset nhỏ với mọi phép tăng cường ở mức tối đa sẽ khiến model huấn luyện trên các ảnh ngày càng xa điều kiện triển khai, và mAP val thường giảm. Mỗi lần chỉ thay đổi một tham số, có lý do rõ ràng, rồi so sánh với baseline mặc định trên cùng lần chia tách.

Khi phép crop xóa mất lớp

Nếu một lớp được xác định bởi một phần nhỏ của đối tượng, chẳng hạn biểu tượng ở góc lá bài, mosaic, translate và scale có thể cắt mất phần đó, tạo ra ảnh huấn luyện trông giống hệt một lớp khác. Hãy giảm các giá trị đó cho dataset này và xác nhận cách khắc phục trong train_batch0.jpg.

Dùng thử

Đánh dấu từng tham số trong bảng mặc định là giữ nguyên, thay đổi hoặc tắt tùy theo môi trường triển khai, kèm một dòng giải thích cho mỗi thay đổi. Huấn luyện một lần với mặc định và một lần với cấu hình của bạn trên cùng một tập chia, rồi ghi lại mAP50-95 trên val cho cả hai. Sản phẩm bàn giao: bảng đã chú thích, cả hai điểm số và một train_batch0.jpg từ lượt chạy tùy chỉnh.

Điều kiện hoàn thành
Bạn đã hoàn thành bài học khi tất cả các điều kiện sau đều đúng.
  • Mỗi tham số được thay đổi đều có một dòng giải thích dựa trên môi trường triển khai.

  • So sánh cấu hình mặc định và cấu hình tùy chỉnh trên cùng một tập val.

  • train_batch0.jpg từ lượt chạy tùy chỉnh cho thấy bbox khít và các đặc điểm của class được giữ nguyên.

Hiển thị lời giải

Drone khảo sát một cảng từ trên cao, phát hiện tàu bằng bbox định hướng. Từ góc nhìn đó không có khái niệm “phía trên”, tàu hướng theo mọi chiều và màu sắc không xác định class:

Đối sốLựa chọnGiải thích
flipud0.5Góc nhìn từ trên xuống trông giống hệt khi lật dọc
degrees180Tàu xuất hiện với mọi hướng
hsv_hmặc địnhMàu thân tàu thay đổi và không phải tín hiệu phân biệt class
mosaicmặc địnhNhiều đối tượng nhỏ trong mỗi ảnh; mosaic có ích

Trên bộ demo ảnh hàng không DOTA8:

yolo obb train data=dota8.yaml model=yolo26n-obb.pt epochs=1 imgsz=320 flipud=0.5 degrees=180

Với camera đường phố cố định, hai thay đổi tương tự sẽ không vượt qua bài kiểm tra triển khai: xe hơi không bao giờ lộn ngược trong luồng hình ảnh từ camera gắn trên tường.

Tiếp theo là gì

Dataset, các tập chia và phép tăng cường đã sẵn sàng; bài học tiếp theo sẽ xác định một cách khách quan liệu dataset đã sẵn sàng để huấn luyện hay chưa.

Đăng nhập để lưu tiến độ