Tăng cường dữ liệu bằng Ultralytics YOLO#
Giới thiệu#
Tăng cường dữ liệu là một kỹ thuật quan trọng trong thị giác máy tính, giúp mở rộng nhân tạo tập dữ liệu huấn luyện bằng cách áp dụng nhiều phép biến đổi khác nhau lên các ảnh hiện có. Khi huấn luyện các model deep learning như Ultralytics YOLO, tăng cường dữ liệu giúp cải thiện độ bền vững của model, giảm overfitting và tăng khả năng tổng quát hóa trong các tình huống thực tế.
Xem: Cách sử dụng Mosaic, MixUp và các kỹ thuật tăng cường dữ liệu khác để giúp model Ultralytics YOLO tổng quát hóa tốt hơn 🚀
Tại sao tăng cường dữ liệu quan trọng#
Tăng cường dữ liệu phục vụ nhiều mục đích quan trọng trong quá trình huấn luyện model thị giác máy tính:
- Mở rộng tập dữ liệu: Bằng cách tạo các biến thể từ ảnh hiện có, bạn có thể tăng kích thước tập dữ liệu huấn luyện một cách hiệu quả mà không cần thu thập dữ liệu mới.
- Cải thiện khả năng tổng quát hóa: Model học cách nhận diện đối tượng trong nhiều điều kiện khác nhau, nhờ đó hoạt động bền vững hơn trong các ứng dụng thực tế.
- Giảm overfitting: Bằng cách đưa thêm biến thiên vào dữ liệu huấn luyện, model ít có khả năng ghi nhớ các đặc điểm cụ thể của ảnh.
- Cải thiện hiệu suất: Model được huấn luyện với phương pháp tăng cường phù hợp thường đạt độ chính xác cao hơn trên các tập validation và test.
Phương pháp triển khai của Ultralytics YOLO cung cấp một bộ kỹ thuật tăng cường toàn diện; mỗi kỹ thuật phục vụ mục đích cụ thể và đóng góp khác nhau vào hiệu suất model. Hướng dẫn này trình bày các thiết lập tăng cường bên dưới, giúp bạn hiểu khi nào và cách sử dụng chúng hiệu quả trong dự án.
Ví dụ cấu hình#
Bạn có thể tùy chỉnh từng tham số bằng Python API, giao diện dòng lệnh (CLI) hoặc tệp cấu hình. Dưới đây là ví dụ thiết lập tăng cường dữ liệu bằng từng phương pháp.
import albumentations as A
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt")
# Huấn luyện với các tham số tăng cường tùy chỉnh
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Huấn luyện khi tắt mọi phép tăng cường có thể cấu hình (lược bỏ các giá trị đã tắt để dễ theo dõi)
model.train(
data="coco8.yaml",
epochs=100,
hsv_h=0.0,
hsv_s=0.0,
hsv_v=0.0,
translate=0.0,
scale=0.0,
fliplr=0.0,
mosaic=0.0,
erasing=0.0,
auto_augment=None,
)
# Huấn luyện với các phép biến đổi Albumentations tùy chỉnh (chỉ Python API)
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco8.yaml", epochs=100, augmentations=custom_transforms)Các phép biến đổi được liệt kê trên trang này là những phép biến đổi bạn có thể kiểm soát thông qua các tham số huấn luyện. Ultralytics cũng áp dụng một bộ Albumentations nhỏ — blur, median blur, grayscale và CLAHE, mỗi phép ở mức p=0.01 — khi gói albumentations được cài đặt; không có tham số nào trong default.yaml tắt được các phép này. Gỡ cài đặt gói để loại bỏ chúng hoặc truyền danh sách riêng của bạn vào augmentations để thay thế.
Sử dụng tệp cấu hình#
Bạn có thể định nghĩa tất cả tham số huấn luyện, bao gồm cả các phép tăng cường, trong tệp cấu hình YAML (ví dụ: train_custom.yaml). Chỉ cần tham số mode khi sử dụng CLI. Sau đó, tệp YAML mới này sẽ ghi đè tệp mặc định nằm trong gói ultralytics.
# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5Sau đó, khởi chạy quá trình huấn luyện bằng Python API:
from ultralytics import YOLO
# Tải model YOLO26n pretrained trên COCO
model = YOLO("yolo26n.pt")
# Huấn luyện model với cấu hình tùy chỉnh
model.train(cfg="train_custom.yaml")Tăng cường không gian màu#
Điều chỉnh sắc độ (hsv_h)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.015 - Cách dùng: Dịch chuyển màu sắc của ảnh trong khi vẫn giữ nguyên mối tương quan giữa các màu. Siêu tham số
hsv_hxác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-hsv_hđếnhsv_h. Ví dụ, vớihsv_h=0.3, độ dịch chuyển được chọn ngẫu nhiên trong khoảng từ-0.3đến0.3. Với các giá trị lớn hơn0.5, dịch chuyển sắc độ sẽ quay vòng trên vòng màu; vì vậy, các phép tăng cường trông giống nhau trong khoảng từ0.5đến-0.5. - Mục đích: Đặc biệt hữu ích trong môi trường ngoài trời, nơi điều kiện ánh sáng có thể ảnh hưởng đáng kể đến hình dạng của đối tượng. Ví dụ, quả chuối có thể trông vàng hơn dưới ánh nắng chói chang nhưng ngả xanh hơn khi ở trong nhà.
- Cách triển khai của Ultralytics: RandomHSV
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Điều chỉnh độ bão hòa (hsv_s)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.7 - Cách dùng: Thay đổi cường độ màu trong ảnh. Siêu tham số
hsv_sxác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-hsv_sđếnhsv_s. Ví dụ, vớihsv_s=0.7, cường độ được chọn ngẫu nhiên trong khoảng từ-0.7đến0.7. - Mục đích: Giúp model xử lý các điều kiện thời tiết và thiết lập camera khác nhau. Ví dụ, biển báo giao thông màu đỏ có thể rất rực rỡ vào ngày nắng nhưng trông xỉn màu và phai nhạt khi trời có sương mù.
- Cách triển khai của Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Điều chỉnh độ sáng (hsv_v)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.4 - Cách dùng: Thay đổi độ sáng của ảnh. Siêu tham số
hsv_vxác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-hsv_vđếnhsv_v. Ví dụ, vớihsv_v=0.4, cường độ được chọn ngẫu nhiên trong khoảng từ-0.4đến0.4. - Mục đích: Cần thiết khi huấn luyện model phải hoạt động trong các điều kiện ánh sáng khác nhau. Ví dụ, quả táo đỏ có thể trông sáng dưới ánh nắng nhưng tối hơn nhiều khi ở trong bóng râm.
- Cách triển khai của Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Biến đổi hình học#
Xoay (degrees)#
- Phạm vi:
0.0đến180 - Mặc định:
0 - Cách dùng: Xoay ảnh ngẫu nhiên trong phạm vi được chỉ định. Siêu tham số
degreesxác định góc xoay; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-degreesđếndegrees. Ví dụ, vớidegrees=10.0, góc xoay được chọn ngẫu nhiên trong khoảng từ-10.0đến10.0. - Mục đích: Rất quan trọng đối với các ứng dụng mà đối tượng có thể xuất hiện ở nhiều hướng khác nhau. Ví dụ, trong ảnh chụp từ drone trên không, phương tiện có thể hướng về bất kỳ phía nào, vì vậy model cần nhận diện đối tượng bất kể góc xoay.
- Cách triển khai của Ultralytics: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Dịch chuyển (translate)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.1 - Cách dùng: Dịch chuyển ảnh theo chiều ngang và chiều dọc một phần ngẫu nhiên so với kích thước ảnh. Siêu tham số
translatexác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên hai lần (một lần cho mỗi trục) trong khoảng-translateđếntranslate. Ví dụ, vớitranslate=0.5, độ dịch chuyển trên trục x được chọn ngẫu nhiên trong khoảng từ-0.5đến0.5, còn trên trục y sẽ chọn một giá trị ngẫu nhiên độc lập khác trong cùng khoảng. - Mục đích: Giúp model học cách phát hiện các đối tượng chỉ hiển thị một phần và tăng độ bền vững trước sự thay đổi vị trí đối tượng. Ví dụ, trong các ứng dụng đánh giá hư hỏng phương tiện, bộ phận ô tô có thể xuất hiện toàn bộ hoặc một phần trong khung hình tùy thuộc vào vị trí và khoảng cách của người chụp; phép tăng cường dịch chuyển sẽ giúp model nhận diện các đặc điểm này bất kể mức độ hiển thị đầy đủ hay vị trí của chúng.
- Cách triển khai của Ultralytics: RandomPerspective
- Lưu ý: Để đơn giản, các phép dịch chuyển minh họa bên dưới đều giống nhau ở cả hai trục
xvày. Không hiển thị các giá trị-1.0và1.0vì chúng sẽ dịch chuyển toàn bộ ảnh ra khỏi khung hình.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Tỷ lệ (scale)#
- Phạm vi:
0.0-1.0dưới dạng số thực, hoặc một bộ(min, max)được chỉ định tường minh - Mặc định:
0.5 - Cách dùng: Thay đổi kích thước ảnh theo một hệ số ngẫu nhiên trong phạm vi được chỉ định. Với dạng số thực, siêu tham số
scalexác định mức tăng tỷ lệ; hệ số cuối cùng được chọn ngẫu nhiên trong khoảng từ1-scaleđến1+scale. Ví dụ, vớiscale=0.5, tỷ lệ được chọn ngẫu nhiên trong khoảng từ0.5đến1.5. Với dạng tuple,scaleđặt trực tiếp phạm vi đó, vì vậyscale=(0.5, 2.0)lấy mẫu hệ số trong khoảng từ0.5đến2.0. - Mục đích: Giúp model xử lý các đối tượng ở khoảng cách và kích thước khác nhau. Ví dụ, trong các ứng dụng lái xe tự hành, phương tiện có thể xuất hiện ở nhiều khoảng cách khác nhau so với camera, do đó model cần nhận diện chúng bất kể kích thước.
- Cách triển khai của Ultralytics: RandomPerspective
- Lưu ý:
- Không hiển thị giá trị
-1.0vì giá trị này sẽ làm ảnh biến mất, còn1.0chỉ tạo ra mức zoom 2x. - Các giá trị hiển thị trong bảng bên dưới là độ chênh lệch tỷ lệ thực tế, không phải giá trị bạn truyền vào siêu tham số
scale. - Dạng số thực được kiểm tra để nằm trong phạm vi
0.0-1.0; giá trị nằm ngoài phạm vi này sẽ gây raValueError. Để lấy mẫu hệ số vượt quá mức zoom 2x, hãy dùng dạng tuple(min, max). - Dạng tuple chỉ áp dụng cho các tác vụ hình học. Khi huấn luyện phân loại, phạm vi crop riêng được suy ra từ giá trị số thực (
1.0 - scaleđến1.0), vì vậy truyền tuple vào đây sẽ gây raTypeError.
- Không hiển thị giá trị
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Shear (shear)#
- Phạm vi:
-180đến+180 - Mặc định:
0 - Cách dùng: Áp dụng biến đổi hình học làm xiên ảnh theo cả trục x và trục y, qua đó dịch chuyển các phần của ảnh theo một hướng trong khi vẫn giữ các đường thẳng song song. Siêu tham số
shearxác định góc shear; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-shearđếnshear. Ví dụ, vớishear=10.0, giá trị shear trên trục x được chọn ngẫu nhiên trong khoảng từ-10đến10, còn trên trục y sẽ chọn một giá trị ngẫu nhiên độc lập khác trong cùng khoảng. - Mục đích: Giúp model tổng quát hóa tốt hơn trước những thay đổi góc nhìn do nghiêng nhẹ hoặc quan sát xiên. Chẳng hạn, trong giám sát giao thông, các đối tượng như ô tô và biển báo có thể bị nghiêng do camera không được đặt vuông góc. Tăng cường shear giúp model học cách nhận diện đối tượng bất chấp các biến dạng xiên như vậy.
- Cách triển khai của Ultralytics: RandomPerspective
- Lưu ý:
- Các giá trị
shearcó thể nhanh chóng làm biến dạng ảnh, vì vậy bạn nên bắt đầu bằng các giá trị nhỏ rồi tăng dần. - Khác với biến đổi phối cảnh, shear không tạo ra chiều sâu hay điểm tụ mà làm biến dạng hình dạng đối tượng bằng cách thay đổi góc, đồng thời giữ các cạnh đối diện song song.
- Các giá trị
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Phối cảnh (perspective)#
- Phạm vi:
0.0-0.001 - Mặc định:
0 - Cách dùng: Áp dụng biến đổi phối cảnh đầy đủ theo cả trục x và trục y, mô phỏng hình dạng của đối tượng khi được nhìn từ các độ sâu hoặc góc khác nhau. Siêu tham số
perspectivexác định mức độ phối cảnh; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-perspectiveđếnperspective. Ví dụ, vớiperspective=0.001, mức phối cảnh trên trục x được chọn ngẫu nhiên trong khoảng từ-0.001đến0.001, còn trên trục y sẽ chọn một giá trị ngẫu nhiên độc lập khác trong cùng khoảng. - Mục đích: Tăng cường phối cảnh rất quan trọng để xử lý những thay đổi góc nhìn lớn, đặc biệt trong các tình huống đối tượng bị rút ngắn hoặc biến dạng do thay đổi phối cảnh. Ví dụ, trong phát hiện đối tượng bằng drone, nhà cửa, đường sá và phương tiện có thể trông bị kéo giãn hoặc nén lại tùy theo độ nghiêng và độ cao của drone. Bằng cách áp dụng các phép biến đổi phối cảnh, model học cách nhận diện đối tượng bất chấp những biến dạng do phối cảnh gây ra, qua đó tăng độ bền vững khi triển khai trong thực tế.
- Cách triển khai của Ultralytics: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Lật dọc (flipud)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách dùng: Lật dọc ảnh quanh trục y. Phép biến đổi này lật ngược toàn bộ ảnh nhưng vẫn giữ nguyên mối quan hệ không gian giữa các đối tượng. Siêu tham số flipud xác định xác suất áp dụng phép biến đổi; giá trị
flipud=1.0bảo đảm mọi ảnh đều được lật, còn giá trịflipud=0.0tắt hoàn toàn phép biến đổi. Ví dụ, vớiflipud=0.5, mỗi ảnh có 50% khả năng bị lật ngược. - Mục đích: Hữu ích trong các tình huống đối tượng có thể xuất hiện lộn ngược. Ví dụ, trong hệ thống thị giác robot, các đối tượng trên băng chuyền hoặc cánh tay robot có thể được nhấc lên và đặt ở nhiều hướng khác nhau. Lật dọc giúp model nhận diện đối tượng bất kể hướng trên-dưới.
- Cách triển khai của Ultralytics: RandomFlip
Tắt flipud | Bật flipud |
|---|---|
![]() | ![]() |
Lật ngang (fliplr)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.5 - Cách dùng: Lật ngang ảnh bằng cách phản chiếu ảnh quanh trục x. Phép biến đổi này hoán đổi bên trái và bên phải trong khi vẫn duy trì tính nhất quán về không gian, giúp model tổng quát hóa tốt hơn với các đối tượng xuất hiện theo hướng phản chiếu. Siêu tham số
fliplrxác định xác suất áp dụng phép biến đổi; giá trịfliplr=1.0bảo đảm mọi ảnh đều được lật, còn giá trịfliplr=0.0tắt hoàn toàn phép biến đổi. Ví dụ, vớifliplr=0.5, mỗi ảnh có 50% khả năng bị lật trái-phải. - Mục đích: Lật ngang được sử dụng rộng rãi trong phát hiện đối tượng, ước lượng tư thế và nhận diện khuôn mặt để tăng độ bền vững trước những khác biệt trái-phải. Ví dụ, trong lái xe tự hành, phương tiện và người đi bộ có thể xuất hiện ở hai bên đường; lật ngang giúp model nhận diện chúng hiệu quả như nhau theo cả hai hướng.
- Cách triển khai của Ultralytics: RandomFlip
Tắt fliplr | Bật fliplr |
|---|---|
![]() | ![]() |
Hoán đổi kênh BGR (bgr)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách dùng: Hoán đổi các kênh màu của ảnh từ RGB sang BGR, làm thay đổi thứ tự biểu diễn màu. Siêu tham số
bgrxác định xác suất áp dụng phép biến đổi;bgr=1.0bảo đảm mọi ảnh đều được hoán đổi kênh, cònbgr=0.0tắt phép biến đổi. Ví dụ, vớibgr=0.5, mỗi ảnh có 50% khả năng được chuyển từ RGB sang BGR. - Mục đích: Tăng độ bền vững trước các thứ tự kênh màu khác nhau. Ví dụ, khi huấn luyện model cần hoạt động trên nhiều hệ thống camera và thư viện xử lý ảnh, nơi định dạng RGB và BGR có thể được sử dụng không nhất quán, hoặc khi triển khai model trong môi trường có định dạng màu đầu vào khác với dữ liệu huấn luyện.
- Cách triển khai của Ultralytics: Format
Tắt bgr | Bật bgr |
|---|---|
![]() | ![]() |
Mosaic (mosaic)#
- Phạm vi:
0.0-1.0 - Mặc định:
1 - Cách dùng: Kết hợp bốn ảnh huấn luyện thành một ảnh. Siêu tham số
mosaicxác định xác suất áp dụng phép biến đổi;mosaic=1.0bảo đảm mọi ảnh đều được kết hợp, cònmosaic=0.0tắt phép biến đổi. Ví dụ, vớimosaic=0.5, mỗi ảnh có 50% khả năng được kết hợp với ba ảnh khác. - Mục đích: Rất hiệu quả trong việc cải thiện khả năng phát hiện đối tượng nhỏ và hiểu ngữ cảnh. Ví dụ, trong các dự án bảo tồn động vật hoang dã, động vật có thể xuất hiện ở nhiều khoảng cách và tỷ lệ khác nhau; tăng cường mosaic giúp model học cách nhận diện cùng một loài ở nhiều kích thước, khi bị che khuất một phần và trong các ngữ cảnh môi trường khác nhau bằng cách tạo nhân tạo các mẫu huấn luyện đa dạng từ lượng dữ liệu hạn chế.
- Cách triển khai của Ultralytics: Mosaic
- Lưu ý:
- Dù phép tăng cường
mosaicgiúp model bền vững hơn, phép này cũng có thể khiến quá trình huấn luyện khó hơn. - Có thể tắt phép tăng cường
mosaicgần cuối quá trình huấn luyện bằng cách đặtclose_mosaicthành số epoch còn lại trước khi hoàn tất mà tại đó cần tắt phép tăng cường. Ví dụ, nếuepochsđược đặt thành200vàclose_mosaicđược đặt thành20, phép tăng cườngmosaicsẽ bị tắt sau180epoch. Nếuclose_mosaicđược đặt thành0, phép tăng cườngmosaicsẽ được bật trong toàn bộ quá trình huấn luyện. - Việc tắt mosaic cũng tắt
copy_paste,mixupvàcutmixở cùng epoch. Cả bốn phép đều được tắt đồng thời, vì vậy các epoch cuối sẽ huấn luyện mà không có chúng, trong khi mọi phép tăng cường khác — các biến đổi hình học, HSV, phép lật và Albumentations — vẫn tiếp tục hoạt động. Lưu ý rằngcopy_pasteở chế độ mặc địnhfliphoạt động trên một ảnh riêng lẻ thay vì kết hợp nhiều ảnh. - Tâm của mosaic được tạo ra xác định bằng các giá trị ngẫu nhiên và có thể nằm bên trong hoặc bên ngoài ảnh.
- Cách triển khai hiện tại của phép tăng cường
mosaickết hợp ảnh hiện tại với 3 ảnh khác, được lấy từ bộ đệm ảnh mới tải gần đây hoặc từ bất kỳ vị trí nào trong tập dữ liệu khicache='ram'. Trong cả hai trường hợp, ảnh được lấy mẫu có hoàn lại, vì vậy cùng một ảnh có thể xuất hiện nhiều lần trong một mosaic.
- Dù phép tăng cường
Tắt mosaic | Bật mosaic |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách dùng: Trộn hai ảnh cùng nhãn của chúng theo xác suất được chỉ định. Siêu tham số
mixupxác định xác suất áp dụng phép biến đổi;mixup=1.0bảo đảm mọi ảnh đều được trộn, cònmixup=0.0tắt phép biến đổi. Ví dụ, vớimixup=0.5, mỗi ảnh có 50% khả năng được trộn với một ảnh khác. - Mục đích: Cải thiện độ bền vững của model và giảm overfitting. Ví dụ, trong các hệ thống nhận diện sản phẩm bán lẻ, mixup giúp model học các đặc trưng bền vững hơn bằng cách trộn ảnh của nhiều sản phẩm khác nhau, qua đó giúp model nhận diện sản phẩm ngay cả khi chúng chỉ hiển thị một phần hoặc bị các sản phẩm khác che khuất trên các kệ hàng đông đúc.
- Cách triển khai của Ultralytics: MixUp
- Lưu ý:
- Tỷ lệ
mixuplà một giá trị ngẫu nhiên được lấy từ phân phối betanp.random.beta(32.0, 32.0), nghĩa là mỗi ảnh đóng góp khoảng 50%, với một số biến thiên nhỏ.
- Tỷ lệ
Ảnh thứ nhất, tắt mixup | Ảnh thứ hai, tắt mixup | Bật mixup |
|---|---|---|
![]() | ![]() | ![]() |
CutMix (cutmix)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách dùng: Cắt một vùng hình chữ nhật từ một ảnh và dán lên ảnh khác theo xác suất đã cho. Siêu tham số
cutmixxác định xác suất áp dụng phép biến đổi;cutmix=1.0đảm bảo phép biến đổi được áp dụng cho tất cả ảnh, còncutmix=0.0tắt hoàn toàn phép biến đổi. Ví dụ, vớicutmix=0.5, mỗi ảnh có 50% khả năng có một vùng được thay bằng một mảng lấy từ ảnh khác. - Mục đích: Cải thiện hiệu suất model bằng cách tạo ra các tình huống che khuất chân thực, đồng thời duy trì tính toàn vẹn của đặc trưng cục bộ. Ví dụ, trong các hệ thống lái xe tự hành, CutMix giúp model học cách nhận diện phương tiện hoặc người đi bộ ngay cả khi họ bị các vật thể khác che khuất một phần, qua đó cải thiện độ chính xác phát hiện trong môi trường thực tế phức tạp có các vật thể chồng lấp.
- Triển khai của Ultralytics: CutMix
- Lưu ý:
- Kích thước và vị trí của vùng cắt được chọn ngẫu nhiên mỗi khi áp dụng.
- Không giống MixUp, vốn hòa trộn giá trị pixel trên toàn ảnh,
cutmixgiữ nguyên cường độ pixel ban đầu trong các vùng được cắt, nhờ đó bảo toàn đặc trưng cục bộ. - Một vùng chỉ được dán vào ảnh đích nếu không chồng lấp với bất kỳ bounding box hiện có nào. Ngoài ra, chỉ giữ lại các bounding box còn đủ diện tích ban đầu bên trong vùng được dán.
- Không thể thay đổi ngưỡng diện tích bounding box tối thiểu này trong triển khai hiện tại. Ngưỡng là
0.1(10%) đối với nhãn phát hiện và0.01(1%) khi nhãn có chứa segment.
Ảnh thứ nhất, tắt cutmix | Ảnh thứ hai, tắt cutmix | Bật cutmix |
|---|---|---|
![]() | ![]() | ![]() |
Các phép tăng cường Copy-Paste#
Copy-Paste (copy_paste)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách dùng: Yêu cầu nhãn polygon, vì vậy áp dụng cho các tác vụ segment và OBB; phép tăng cường này sao chép đối tượng trong cùng ảnh hoặc giữa các ảnh, được điều khiển bởi
copy_paste_mode. Ở chế độflip,copy_pastelà tỷ lệ đối tượng đủ điều kiện được sao chép: ảnh có sáu đối tượng đủ điều kiện sẽ được thêm ba bản sao khi đặtcopy_paste=0.5. Ở chế độmixup, cùng giá trị đó cũng điều khiển xác suất chạy Copy-Paste.copy_paste=0.0tắt phép biến đổi. - Mục đích: Đặc biệt hữu ích cho các tác vụ phân đoạn đối tượng và các lớp đối tượng hiếm. Ví dụ, trong phát hiện lỗi công nghiệp, khi một số loại lỗi ít xuất hiện, phép tăng cường Copy-Paste có thể làm tăng nhân tạo tần suất xuất hiện của những lỗi hiếm này bằng cách sao chép chúng từ ảnh này sang ảnh khác, giúp model học tốt hơn các trường hợp ít được đại diện mà không cần thêm mẫu lỗi.
- Triển khai của Ultralytics: CopyPaste
- Lưu ý:
- Như minh họa trong video bên dưới, phép tăng cường
copy_pastecó thể được dùng để sao chép đối tượng từ ảnh này sang ảnh khác. - Sau khi chọn một đối tượng để sao chép, IoA của đối tượng đó được tính với tất cả đối tượng đã có trong ảnh đích, bất kể
copy_paste_mode. Đối tượng chỉ được dán nếu mọi giá trị IoA đều thấp hơn0.3(30%); đối tượng sẽ không được dán nếu bất kỳ giá trị IoA nào bằng hoặc cao hơn0.3. - Không thể thay đổi ngưỡng IoA trong triển khai hiện tại; mặc định, ngưỡng này được đặt thành
0.3.
- Như minh họa trong video bên dưới, phép tăng cường
Tắt copy_paste | copy_paste bật với copy_paste_mode=flip | Trực quan hóa quy trình copy_paste |
|---|---|---|
![]() | ![]() |
Chế độ Copy-Paste (copy_paste_mode)#
- Tùy chọn:
'flip','mixup' - Mặc định:
'flip' - Cách dùng: Xác định phương thức được dùng cho phép tăng cường Copy-Paste. Nếu đặt thành
'flip', đối tượng được lấy từ cùng ảnh; còn'mixup'cho phép sao chép đối tượng từ các ảnh khác. - Mục đích: Cho phép linh hoạt trong cách tích hợp các đối tượng được sao chép vào ảnh đích.
- Triển khai của Ultralytics: CopyPaste
- Lưu ý:
- Nguyên tắc IoA giống nhau ở cả hai tùy chọn
copy_paste_mode, nhưng cách sao chép đối tượng thì khác. - Tùy kích thước ảnh, đôi khi đối tượng có thể được sao chép một phần hoặc hoàn toàn ra ngoài khung hình.
- Tùy chất lượng chú giải polygon, hình dạng của đối tượng được sao chép có thể hơi khác so với bản gốc.
- Nguyên tắc IoA giống nhau ở cả hai tùy chọn
| Ảnh tham chiếu | Ảnh được chọn cho copy_paste | copy_paste bật với copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Các phép tăng cường dành riêng cho phân loại#
Auto Augment (auto_augment)#
- Tùy chọn:
'randaugment','autoaugment','augmix',None - Mặc định:
'randaugment' - Cách dùng: Áp dụng các policy tăng cường tự động cho phân loại. Tùy chọn
'randaugment'sử dụng RandAugment,'autoaugment'sử dụng AutoAugment và'augmix'sử dụng AugMix. Đặt thànhNoneđể tắt tăng cường tự động. - Mục đích: Tự động tối ưu hóa chiến lược tăng cường cho các tác vụ phân loại. Các phương pháp khác nhau như sau:
- AutoAugment: Chế độ này áp dụng các policy tăng cường được xác định trước và học từ những dataset như ImageNet, CIFAR10 và SVHN. Người dùng có thể chọn các policy có sẵn này nhưng không thể huấn luyện policy mới trong Torchvision. Để tìm ra chiến lược tăng cường tối ưu cho các dataset cụ thể, cần dùng thư viện bên ngoài hoặc triển khai tùy chỉnh. Tham khảo bài báo AutoAugment.
- RandAugment: Áp dụng ngẫu nhiên các phép biến đổi với cường độ đồng nhất. Phương pháp này giảm nhu cầu thực hiện giai đoạn tìm kiếm quy mô lớn, giúp tiết kiệm tài nguyên tính toán mà vẫn tăng độ bền vững của model. Tham khảo bài báo RandAugment.
- AugMix: AugMix là phương pháp tăng cường dữ liệu giúp tăng độ bền vững của model bằng cách tạo ra nhiều biến thể ảnh đa dạng thông qua việc kết hợp ngẫu nhiên các phép biến đổi đơn giản. Tham khảo bài báo AugMix.
- Triển khai của Ultralytics: classify_augmentations()
- Lưu ý:
- Về cơ bản, điểm khác biệt chính giữa ba phương pháp là cách xác định và áp dụng các policy tăng cường.
- Bạn có thể tham khảo bài viết này, trong đó so sánh chi tiết ba phương pháp.
Random Erasing (erasing)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.4 - Cách dùng: Xóa ngẫu nhiên một phần ảnh trong quá trình huấn luyện phân loại. Siêu tham số
erasingxác định xác suất áp dụng phép biến đổi;erasing=1.0xóa một vùng trong mọi ảnh, cònerasing=0.0tắt phép biến đổi. Ví dụ, vớierasing=0.5, mỗi ảnh có 50% khả năng bị xóa một phần. - Mục đích: Giúp model học các đặc trưng bền vững và tránh phụ thuộc quá mức vào các vùng ảnh cụ thể. Ví dụ, trong các hệ thống nhận diện khuôn mặt, Random Erasing giúp model tăng khả năng xử lý tình trạng che khuất một phần như kính râm, khẩu trang hoặc các vật thể khác có thể che một phần đặc trưng khuôn mặt. Điều này cải thiện hiệu suất trong thực tế bằng cách buộc model nhận diện người dựa trên nhiều đặc điểm khuôn mặt thay vì chỉ phụ thuộc vào những đặc trưng nổi bật có thể bị che khuất.
- Triển khai của Ultralytics: classify_augmentations()
- Lưu ý:
- Phép tăng cường
erasingcó các siêu tham sốscale,ratiovàvaluekhông thể thay đổi trong triển khai hiện tại. Giá trị mặc định của chúng lần lượt là(0.02, 0.33),(0.3, 3.3)và0, như nêu trong tài liệu của PyTorch.
- Phép tăng cường
Tắt erasing | erasing bật (ví dụ 1) | erasing bật (ví dụ 2) | erasing bật (ví dụ 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Các tính năng tăng cường nâng cao#
Các phép biến đổi Albumentations tùy chỉnh (augmentations)#
- Loại:
listtrong các phép biến đổi Albumentations - Mặc định:
None - Cách dùng: Cho phép cung cấp các phép biến đổi Albumentations tùy chỉnh để tăng cường dữ liệu bằng Python API. Tham số này nhận danh sách các đối tượng phép biến đổi Albumentations, được áp dụng trong quá trình huấn luyện thay cho các phép biến đổi Albumentations mặc định.
- Mục đích: Cung cấp khả năng kiểm soát chi tiết các chiến lược tăng cường dữ liệu bằng cách tận dụng thư viện phong phú các phép biến đổi Albumentations. Tính năng này đặc biệt hữu ích khi cần các phép tăng cường chuyên biệt ngoài những tùy chọn YOLO tích hợp sẵn, chẳng hạn như biến dạng đàn hồi và méo lưới cho ảnh y tế, phép biến đổi được tinh chỉnh cho góc nhìn từ trên cao và ảnh vệ tinh, thay đổi nhiễu và độ sáng để mô phỏng điều kiện thiếu sáng, hoặc các biến thể kết cấu giống lỗi để kiểm tra công nghiệp.
- Triển khai của Ultralytics: Albumentations
- Lưu ý:
- Việc tạo các đối tượng phép biến đổi cần Python API. Khi lưu checkpoint, Ultralytics tuần tự hóa chúng bằng
A.to_dict(), nhờ đó danh sách đã tuần tự hóa có thể được ghi rồi đọc lại thông qua tệp cấu hình YAML hoặc CLI, cho phépresumekhôi phục các đối tượng này. - Các phép biến đổi tùy chỉnh thay thế hoàn toàn bộ Albumentations mặc định. Mọi phép tăng cường được cấu hình ở nơi khác trên trang này —
mosaic,hsv_h,degreesvà các phép khác — vẫn hoạt động và được áp dụng độc lập. - Các phép biến đổi không gian làm thay đổi hình học ảnh, bao gồm cả những phép biến đổi lồng trong
A.OneOfhoặcA.Compose, sẽ dịch chuyển bounding box, polygon, keypoint và mask độ sâu hoặc ngữ nghĩa cùng với ảnh;A.RandomGridShufflekhông thể bảo toàn cấu trúc liên kết của polygon hoặc keypoint và sẽ báo lỗi với mẫu phân đoạn, tư thế và OBB. - Albumentations cung cấp hơn 70 phép biến đổi; tài liệu Albumentations liệt kê tất cả. Việc thêm nhiều phép biến đổi hoặc các phép biến đổi tốn nhiều tài nguyên tính toán sẽ làm chậm quá trình huấn luyện, vì vậy hãy bắt đầu với một tập nhỏ và theo dõi thời gian mỗi epoch.
- Áp dụng cho các tác vụ
detect,segment,semantic,depth,posevàobb. Không áp dụng cho phân loại vì tác vụ này sử dụng pipeline tăng cường riêng.
- Việc tạo các đối tượng phép biến đổi cần Python API. Khi lưu checkpoint, Ultralytics tuần tự hóa chúng bằng
Các ví dụ bên dưới yêu cầu Albumentations 1.4.22 trở lên, do đó cần Python 3.9 trở lên.
import albumentations as A
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt")
# Định nghĩa các phép biến đổi Albumentations tùy chỉnh
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.GaussNoise(std_range=(0.0124, 0.0277), p=0.3),
A.CLAHE(clip_limit=4.0, p=0.5),
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]
# Huấn luyện với các phép biến đổi Albumentations tùy chỉnh
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Truyền các phép biến đổi tùy chỉnh
imgsz=640,
)Câu hỏi thường gặp#
Việc chọn phép tăng cường phù hợp phụ thuộc vào trường hợp sử dụng và dataset cụ thể của bạn. Dưới đây là một số hướng dẫn chung giúp bạn quyết định:
- Trong hầu hết trường hợp, những thay đổi nhẹ về màu sắc và độ sáng đều có lợi. Các giá trị mặc định của
hsv_h,hsv_svàhsv_vlà điểm khởi đầu phù hợp. - Nếu góc nhìn của camera ổn định và sẽ không thay đổi sau khi triển khai model, có thể bạn không cần các phép biến đổi hình học như
degrees(xoay),translate,scale,shearhoặcperspective. Tuy nhiên, nếu góc camera có thể thay đổi và bạn cần model bền vững hơn, tốt hơn hết là giữ lại các phép tăng cường này. - Chỉ dùng phép tăng cường
mosaicnếu chấp nhận được việc các đối tượng bị che khuất một phần hoặc có nhiều đối tượng trong mỗi ảnh, đồng thời điều này không làm thay đổi giá trị nhãn. Ngoài ra, bạn có thể giữmosaichoạt động nhưng tăng giá trịclose_mosaicđể tắt phép này sớm hơn trong quá trình huấn luyện.
Tóm lại: hãy giữ mọi thứ đơn giản. Bắt đầu với một tập nhỏ các phép tăng cường và bổ sung dần khi cần. Mục tiêu là cải thiện khả năng tổng quát hóa và độ bền vững của model, không phải làm quy trình huấn luyện phức tạp hơn mức cần thiết. Ngoài ra, hãy đảm bảo các phép tăng cường được áp dụng phản ánh cùng phân phối dữ liệu mà model sẽ gặp trong môi trường production.
- Trong hầu hết trường hợp, những thay đổi nhẹ về màu sắc và độ sáng đều có lợi. Các giá trị mặc định của
Nếu đã cài gói
albumentations, Ultralytics sẽ tự động áp dụng một số phép tăng cường ảnh bổ sung thông qua gói này. Các phép tăng cường được xử lý nội bộ và không cần cấu hình thêm.Bạn có thể tìm danh sách đầy đủ các phép biến đổi được áp dụng trong tài liệu kỹ thuật cũng như hướng dẫn tích hợp Albumentations. Lưu ý rằng chỉ những phép tăng cường có xác suất
plớn hơn0mới hoạt động. Các phép này được cố ý áp dụng với tần suất thấp để mô phỏng các hiện tượng hình ảnh trong thực tế, chẳng hạn như hiệu ứng mờ hoặc ảnh xám.Bạn cũng có thể cung cấp các phép biến đổi Albumentations tùy chỉnh của riêng mình bằng Python API. Xem phần Các tính năng tăng cường nâng cao để biết thêm chi tiết.
Kiểm tra xem gói
albumentationsđã được cài đặt chưa. Nếu chưa, hãy cài đặt:pip install albumentationsSau khi cài đặt, Ultralytics sẽ tự động phát hiện và sử dụng gói này.
Bạn có thể tùy chỉnh các phép tăng cường bằng cách tạo dataset class và trainer tùy chỉnh. Ví dụ, bạn có thể thay thế các phép tăng cường phân loại mặc định của Ultralytics bằng torchvision.transforms.Resize của PyTorch hoặc các phép biến đổi khác. Xem ví dụ huấn luyện tùy chỉnh trong tài liệu phân loại để biết chi tiết triển khai.













































