YOLO Vision 2026:

Tăng cường dữ liệu sử dụng Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

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 tập dữ liệu huấn luyện của bạn một cách nhân tạo bằng cách áp dụng các phép biến đổi khác nhau lên các hình ảnh hiện có. Khi huấn luyện các mô hình học sâu như Ultralytics YOLO, tăng cường dữ liệu giúp cải thiện tính mạnh mẽ của mô hình, giảm hiện tượng quá khớp (overfitting) và nâng cao khả năng tổng quát hóa đối với các tình huống thực tế.



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

Tại sao Tăng cường dữ liệu lại quan trọng#

Tăng cường dữ liệu phục vụ nhiều mục đích thiết yếu trong việc huấn luyện các mô hình thị giác máy tính:

  • Mở rộng tập dữ liệu: Bằng cách tạo ra các biến thể của hình ảnh hiện có, bạn có thể tăng hiệu quả quy mô tập dữ liệu huấn luyện mà không cần thu thập thêm dữ liệu mới.
  • Cải thiện khả năng tổng quát hóa: Mô hình học cách nhận diện đối tượng trong các điều kiện khác nhau, giúp chúng trở nên ổn định hơn trong các ứng dụng thực tế.
  • Giảm quá khớp (overfitting): Bằng cách đưa sự biến đổi vào dữ liệu huấn luyện, mô hình ít có khả năng ghi nhớ các đặc điểm hình ảnh cụ thể.
  • Hiệu suất được cải thiện: Các mô hình được huấn luyện với các kỹ thuật tăng cường phù hợp thường đạt được độ chính xác tốt hơn trên các tập dữ liệu xác thực và kiểm thử.

Phần cài đặt của Ultralytics YOLO cung cấp một bộ công cụ tăng cường dữ liệu toàn diện, mỗi kỹ thuật phục vụ các mục đích cụ thể và đóng góp vào hiệu suất của model theo những cách khác nhau. Hướng dẫn này khám phá các cài đặt tăng cường dưới đây, giúp bạn hiểu khi nào và cách sử dụng chúng hiệu quả trong các dự án của mình.

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 file cấu hình. Dưới đây là các ví dụ về cách thiết lập tăng cường dữ liệu theo từng phương pháp.

Ví dụ về Cấu hình
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Training with custom augmentation parameters
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training with every configurable augmentation disabled (disabled values omitted for clarity)
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,
)

# Training with custom Albumentations transforms (Python API only)
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)
Việc đưa các tham số tăng cường về 0 không vô hiệu hóa Albumentations

Các phép biến đổi được liệt kê trên trang này là những thứ bạn kiểm soát thông qua các tham số huấn luyện. Ultralytics cũng áp dụng một tập Albumentations nhỏ — độ mờ, độ mờ trung vị, thang độ xám và CLAHE, mỗi loại ở mức p=0.01 — bất cứ khi nào gói albumentations được cài đặt và không có tham số nào trong default.yaml tắt nó đi. Gỡ cài đặt gói để loại bỏ nó, hoặc truyền danh sách của riêng bạn vào augmentations để thay thế nó.

Sử dụng một file cấu hình#

Bạn có thể định nghĩa tất cả các tham số huấn luyện, bao gồm cả các phép tăng cường, trong một tệp cấu hình YAML (ví dụ: train_custom.yaml). Tham số mode chỉ bắt buộc khi sử dụng CLI. Tệp YAML mới này sau đó sẽ ghi đè lên 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.5

Sau đó, khởi chạy huấn luyện với Python API:

Ví dụ về Training
from ultralytics import YOLO

# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")

Tăng cường không gian màu#

Điều chỉnh sắc độ (Hue) (hsv_h)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.015
  • Cách sử dụng: Thay đổi màu sắc của ảnh trong khi vẫn bảo toàn mối quan hệ giữa chúng. Siêu tham số hsv_h xác định độ lớn của sự dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -hsv_h đến hsv_h. Ví dụ, với hsv_h=0.3, độ dịch chuyển được chọn ngẫu nhiên trong phạm vi từ -0.3 đến 0.3. Đối với các giá trị lớn hơn 0.5, độ dịch chuyển sắc độ sẽ quay vòng quanh bánh xe màu, đó là lý do tại sao các phép tăng cường trông giống nhau giữa 0.5-0.5.
  • Mục đích: Đặc biệt hữu ích cho các tình huống ngoài trời nơi điều kiện ánh sáng có thể ảnh hưởng đáng kể đến diện mạo đối tượng. Ví dụ, một quả chuối có thể trông vàng hơn dưới ánh nắng chói chang nhưng lại hơi xanh hơn khi ở trong nhà.
  • Triển khai của Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Tăng cường dịch chuyển sắc độ -0.5Tăng cường dịch chuyển sắc độ -0.25Ảnh gốc không tăng cườngTăng cường dịch chuyển sắc độ 0.25Tăng cường dịch chuyển sắc độ -0.5

Điều chỉnh độ bão hòa (Saturation) (hsv_s)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.7
  • Cách sử dụng: Sửa đổi cường độ màu sắc trong ảnh. Siêu tham số hsv_s xác định độ lớn dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -hsv_s đến hsv_s. Ví dụ, với hsv_s=0.7, cường độ được chọn ngẫu nhiên trong phạm vi từ -0.7 đến 0.7.
  • Mục đích: Giúp các mô hình xử lý các điều kiện thời tiết và cài đặt camera khác nhau. Ví dụ, biển báo giao thông màu đỏ có thể trông rất sống động vào một ngày nắng nhưng lại trông xỉn màu và nhạt nhòa trong điều kiện sương mù.
  • Triển khai của Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Tăng cường độ bão hòa -1.0 ảnh xámTăng cường độ bão hòa -0.5Ảnh gốc không tăng cườngTăng cường độ bão hòa 0.5Tăng cường độ bão hòa sống động 1.0

Điều chỉnh độ sáng (Brightness) (hsv_v)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.4
  • Cách sử dụng: Thay đổi độ sáng của ảnh. Siêu tham số hsv_v xác định độ lớn dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -hsv_v đến hsv_v. Ví dụ, với hsv_v=0.4, cường độ được chọn ngẫu nhiên trong phạm vi từ -0.4 đến 0.4.
  • Mục đích: Cần thiết để huấn luyện các mô hình cần hoạt động trong các điều kiện ánh sáng khác nhau. Ví dụ, một quả táo đỏ có thể trông sáng dưới ánh mặt trời nhưng tối hơn nhiều trong bóng râm.
  • Triển khai của Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Tăng cường độ sáng -1.0 tốiTăng cường độ sáng -0.5Ảnh gốc không tăng cườngTăng cường độ sáng 0.5Tăng cường độ sáng 1.0 sáng

Biến đổi hình học#

Xoay ảnh (Rotation) (degrees)#

  • Phạm vi: 0.0 đến 180
  • Mặc định: 0
  • Cách sử dụng: Xoay ảnh ngẫu nhiên trong phạm vi đã chỉ định. Siêu tham số degrees xác định góc xoay, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -degrees đến degrees. Ví dụ, với degrees=10.0, góc xoay được chọn ngẫu nhiên trong phạm vi từ -10.0 đến 10.0.
  • Mục đích: Rất quan trọng cho các ứng dụng nơi các đối tượng có thể xuất hiện ở các hướng khác nhau. Ví dụ, trong ảnh chụp từ flycam, các phương tiện có thể được định hướng theo bất kỳ hướng nào, đòi hỏi mô hình phải nhận diện được đối tượng bất kể góc xoay của chúng.
  • Triển khai của Ultralytics: RandomPerspective
-180-900.090180
Tăng cường xoay -180 độTăng cường xoay -90 độẢnh gốc không tăng cườngTăng cường xoay 90 độTăng cường xoay 180 độ

Dịch chuyển (Translation) (translate)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.1
  • Cách sử dụng: Dịch chuyển ảnh theo chiều ngang và chiều dọc một khoảng ngẫu nhiên bằng một phần kích thước của ảnh. Siêu tham số translate xác định độ lớn dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên hai lần (mỗi lần cho một trục) trong phạm vi -translatetranslate. Ví dụ, với translate=0.5, phép dịch chuyển được chọn ngẫu nhiên trong khoảng từ -0.5 đến 0.5 trên trục x, và một giá trị ngẫu nhiên độc lập khác được chọn trong cùng phạm vi trên trục y.
  • Mục đích: Giúp các mô hình học cách phát hiện các đối tượng hiển thị một phần và cải thiện độ ổn định đối với vị trí đối tượng. Ví dụ, trong các ứng dụng đánh giá thiệt hại phương tiện, các bộ phận của xe có thể xuất hiện đầy đủ 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 nhiếp ảnh gia, tăng cường dịch chuyển sẽ dạy mô hình nhận diện các đặc điểm này bất kể mức độ đầy đủ hay vị trí của chúng.
  • Triển khai của Ultralytics: RandomPerspective
  • Lưu ý: Để đơn giản, các phép dịch chuyển được áp dụng bên dưới là giống nhau mỗi lần cho cả hai trục xy. Các giá trị -1.01.0 không được hiển thị vì chúng sẽ dịch chuyển ảnh ra khỏi khung hình hoàn toàn.
-0.5-0.250.00.250.5
Tăng cường dịch chuyển -0.5Tăng cường dịch chuyển -0.25Ảnh gốc không tăng cườngTăng cường dịch chuyển 0.25Tăng cường dịch chuyển 0.5

Phóng to/Thu nhỏ (Scale) (scale)#

  • Phạm vi: 0.0 - 1.0 dưới dạng số thực (float), hoặc một tuple (min, max) tường minh
  • Mặc định: 0.5
  • Cách sử 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. Dưới dạng số thực, siêu tham số scale xác định hệ số phóng đại, với hệ số cuối cùng được chọn ngẫu nhiên giữa 1-scale1+scale. Ví dụ, với scale=0.5, hệ số phóng đại được chọn ngẫu nhiên trong khoảng từ 0.5 đến 1.5. Dưới dạng một tuple, scale thiết lập trực tiếp phạm vi đó, vì vậy scale=(0.5, 2.0) lấy mẫu hệ số giữa 0.52.0.
  • Mục đích: Cho phép các mô hình xử lý đối tượng ở các khoảng cách và kích thước khác nhau. Ví dụ, trong các ứng dụng lái xe tự động, các phương tiện có thể xuất hiện ở các khoảng cách khác nhau so với camera, đòi hỏi mô hình phải nhận diện chúng bất kể kích thước nào.
  • Triển khai của Ultralytics: RandomPerspective
  • Lưu ý:
    • Giá trị -1.0 không được hiển thị vì nó sẽ làm cho ảnh biến mất, trong khi 1.0 đơn giản là dẫn đến việc phóng to gấp 2 lần.
    • Các giá trị hiển thị trong bảng dưới đây là các độ lệch tỷ lệ thực tế, không phải các giá trị bạn truyền cho siêu tham số scale.
    • Dạng số thực được kiểm tra hợp lệ theo phạm vi 0.0 - 1.0, và một giá trị nằm ngoài phạm vi đó sẽ tạo ra một ngoại lệ ValueError. Để lấy mẫu một hệ số vượt quá mức thu phóng 2x, hãy truyền dạng tuple (min, max) thay thế.
    • Dạng tuple chỉ áp dụng cho các tác vụ hình học. Quá trình huấn luyện phân loại tự động suy ra phạm vi cắt của riêng nó từ dạng số thực (1.0 - scale đến 1.0), do đó việc truyền tuple vào đó sẽ tạo ra một ngoại lệ TypeError.
-0.5-0.250.00.250.5
Tăng cường thu nhỏ tỷ lệ 0.5xTăng cường thu nhỏ tỷ lệ 0.75xẢnh gốc không tăng cườngTăng cường phóng to tỷ lệ 1.25xTăng cường phóng to tỷ lệ 1.5x

Biến dạng xiên (Shear) (shear)#

  • Phạm vi: -180 đến +180
  • Mặc định: 0
  • Cách sử dụng: Giới thiệu một phép biến đổi hình học làm nghiêng ảnh dọc theo cả trục x và trục y, dịch chuyển hiệu quả các phần của ảnh theo một hướng trong khi vẫn duy trì các đường song song. Siêu tham số shear xác định góc xiên, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên giữa -shearshear. Ví dụ, với shear=10.0, độ xiên được chọn ngẫu nhiên trong khoảng từ -10 đến 10 trên trục x, và một giá trị ngẫu nhiên độc lập khác được chọn trong cùng phạm vi trên trục y.
  • Mục đích: Giúp các mô hình tổng quát hóa tốt hơn với các biến thể về góc nhìn do các góc nghiêng nhẹ hoặc góc nhìn xiên. Ví dụ, trong giám sát giao thông, các đối tượng như xe hơi và biển báo đường bộ có thể trông bị nghiêng do cách lắp đặt camera không vuông góc. Áp dụng tăng cường shear đảm bảo mô hình học được cách nhận diện đối tượng bất chấp những biến dạng lệch này.
  • Triển khai của Ultralytics: RandomPerspective
  • Lưu ý:
    • Các giá trị shear có thể làm biến dạng ảnh một cách nhanh chóng, vì vậy bạn nên bắt đầu với các giá trị nhỏ và tăng dần chúng.
    • Không giống như các phép biến đổi phối cảnh, shear không tạo ra chiều sâu hoặc điểm tụ mà thay vào đó làm biến dạng hình dạng của đối tượng bằng cách thay đổi các góc trong khi vẫn giữ các cạnh đối diện song song.
-10-50.0510
Tăng cường biến dạng trượt -10 độTăng cường biến dạng trượt -5 độẢnh gốc không tăng cườngTăng cường biến dạng trượt 5 độTăng cường biến dạng trượt 10 độ

Phối cảnh (Perspective) (perspective)#

  • Phạm vi: 0.0 - 0.001
  • Mặc định: 0
  • Cách sử dụng: Áp dụng phép biến đổi phối cảnh toàn diện dọc theo cả trục x và trục y, mô phỏng cách các vật thể xuất hiện khi nhìn từ các độ sâu hoặc góc độ khác nhau. Siêu tham số perspective xác định độ lớn phối cảnh, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên giữa -perspectiveperspective. Ví dụ, với perspective=0.001, phối cảnh được chọn ngẫu nhiên trong khoảng từ -0.001 đến 0.001 trên trục x, và một giá trị ngẫu nhiên độc lập khác được chọn trong cùng phạm vi trên trục y.
  • Mục đích: Phép tăng cường dữ liệu phối cảnh là rất quan trọng để xử lý các thay đổi góc nhìn cực đoan, đặc biệt trong các tình huống mà đối tượng xuất hiện bị rút ngắn hoặc biến dạng do thay đổi phối cảnh. Ví dụ, trong hệ thống phát hiện đối tượng bằng máy bay không người lái (drone), các tòa nhà, đường sá và phương tiện có thể trông bị kéo dài hoặc nén lại tùy thuộc vào độ 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, các model học đượ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, từ đó cải thiện tính mạnh mẽ của chúng trong các triển khai thực tế.
  • Triển khai của Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Biến đổi phối cảnh -0.001Biến đổi phối cảnh -0.0005Ảnh gốc không tăng cườngBiến đổi phối cảnh 0.0005Biến đổi phối cảnh 0.001

Lật dọc (Flip Up-Down) (flipud)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách sử dụng: Thực hiện lật dọc bằng cách đảo ngược ảnh dọc theo trục y. Phép biến đổi này phản chiếu toàn bộ bức ảnh lộn ngược nhưng vẫn bảo toàn tất cả các mối quan hệ không gian giữa các vật thể. Siêu tham số flipud xác định xác suất áp dụng phép biến đổi, với giá trị flipud=1.0 đảm bảo rằng tất cả các ảnh đều bị lật và giá trị flipud=0.0 vô hiệu hóa hoàn toàn phép biến đổi. Ví dụ, với flipud=0.5, mỗi ảnh có 50% cơ hội bị lộn ngược.
  • Mục đích: Hữu ích cho các tình huống mà đối tượng có thể xuất hiện ngược đầu. Ví dụ, trong các 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 gắp 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ể vị trí trên dưới của chúng.
  • Triển khai của Ultralytics: RandomFlip
flipud tắtflipud bật
Ảnh gốc không tăng cườngĐã bật tăng cường lật dọc

Lật ngang (Flip Left-Right) (fliplr)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.5
  • Cách sử dụng: Thực hiện lật ngang bằng cách phản chiếu ảnh dọc theo trục x. Phép biến đổi này hoán đổi hai bên trái và phải trong khi vẫn duy trì tính nhất quán về mặt không gian, giúp mô hình tổng quát hóa tốt hơn đối với các vật thể xuất hiện ở các hướng bị phản chiếu. Siêu tham số fliplr xác định xác suất áp dụng phép biến đổi, với giá trị fliplr=1.0 đảm bảo tất cả ảnh đều bị lật và giá trị fliplr=0.0 tắt hoàn toàn phép biến đổi. Ví dụ, với fliplr=0.5, mỗi ảnh có 50% cơ hội bị lật từ trái sang 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 tính tư thế và nhận diện khuôn mặt để cải thiện khả năng chống chịu đối với các biến thể trái-phải. Ví dụ, trong lái xe tự động, phương tiện và người đi bộ có thể xuất hiện ở bất kỳ bên nào của đường, và lật ngang giúp model nhận diện chúng tốt như nhau ở cả hai hướng.
  • Triển khai của Ultralytics: RandomFlip
fliplr tắtfliplr bật
Ảnh gốc không tăng cườngĐã bật tăng cường lật ngang

Hoán đổi kênh BGR (bgr)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách sử dụng: Hoán đổi các kênh màu của ảnh từ RGB sang BGR, thay đổi thứ tự biểu diễn các màu. Siêu tham số bgr xác định xác suất áp dụng phép biến đổi, với bgr=1.0 đảm bảo tất cả các ảnh đều trải qua quá trình hoán đổi kênh và bgr=0.0 tắt tính năng này. Ví dụ, với bgr=0.5, mỗi ảnh có 50% cơ hội được chuyển đổi từ RGB sang BGR.
  • Mục đích: Tăng cường khả năng chống chịu đối với các thứ tự kênh màu khác nhau. Ví dụ, khi huấn luyện các model phải hoạt động trên nhiều hệ thống camera và thư viện hình ả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 các model vào môi trường mà định dạng màu đầu vào có thể khác với dữ liệu huấn luyện.
  • Triển khai của Ultralytics: Format
bgr tắtbgr bật
Ảnh gốc không tăng cườngTăng cường hoán đổi kênh BGR

Mosaic (mosaic)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 1
  • Cách sử dụng: Kết hợp bốn ảnh huấn luyện thành một. Siêu tham số mosaic xác định xác suất áp dụng phép biến đổi, với mosaic=1.0 đảm bảo rằng tất cả các ảnh được kết hợp và mosaic=0.0 vô hiệu hóa phép biến đổi. Ví dụ, với mosaic=0.5, mỗi ảnh có 50% cơ hội được kết hợp với ba ảnh khác.
  • Mục đích: Rất hiệu quả để 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ã nơi động vật có thể xuất hiện ở các 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 qua các kích thước khác nhau, các phần bị che khuất và các ngữ cảnh môi trường khác nhau bằng cách tạo ra các mẫu huấn luyện đa dạng một cách nhân tạo từ dữ liệu hạn chế.
  • Triển khai của Ultralytics: Mosaic
  • Lưu ý:
    • Ngay cả khi phép tăng cường mosaic giúp mô hình mạnh mẽ hơn, nó cũng có thể làm cho quá trình huấn luyện trở nên thách thức hơn.
    • Phép tăng cường mosaic có thể được tắt gần cuối quá trình huấn luyện bằng cách đặt close_mosaic thành số lượng epochs trước khi hoàn thành mà tại đó nó nên được tắt. Ví dụ, nếu epochs được đặt thành 200close_mosaic được đặt thành 20, phép tăng cường mosaic sẽ bị vô hiệu hóa sau 180 epochs. Nếu close_mosaic được đặt thành 0, phép tăng cường mosaic sẽ được bật trong toàn bộ quá trình huấn luyện.
    • Việc đóng mosaic cũng đồng thời vô hiệu hóa copy_paste, mixup, và cutmix tại cùng một epoch. Bốn tính năng này được tắt cùng nhau, do đó các epoch cuối cùng được huấn luyện mà không có chúng trong khi mọi kỹ thuật tăng cường khác — các phép biến đổi hình học, HSV, lật và Albumentations — vẫn tiếp tục chạy. Lưu ý rằng copy_paste ở chế độ mặc định flip hoạt động trong phạm vi một ảnh đơn thay vì kết hợp nhiều ảnh.
    • Tâm của mosaic được tạo ra được xác định bằng các giá trị ngẫu nhiên, và có thể nằm bên trong ảnh hoặc bên ngoài ảnh.
    • Phiên bản hiện tại của phép tăng cường mosaic kết hợp ảnh hiện tại với 3 ảnh khác, được lấy từ bộ đệm các ảnh được tải gần đây, hoặc từ bất kỳ đâu trong dataset khi cache='ram'. Dù theo cách nào thì chúng cũng đượ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 hơn một lần trong một mosaic duy nhất.
mosaic tắtmosaic bật
Ảnh gốc không tăng cườngĐã bật tăng cường Mosaic 4 ảnh

Mixup (mixup)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách sử dụng: Trộn lẫn hai ảnh và nhãn của chúng với xác suất cho trước. Siêu tham số mixup xác định xác suất áp dụng phép biến đổi, với mixup=1.0 đảm bảo rằng tất cả các ảnh đều được trộn và mixup=0.0 vô hiệu hóa phép biến đổi. Ví dụ, với mixup=0.5, mỗi ảnh có 50% cơ hội được trộn với một ảnh khác.
  • Mục đích: Cải thiện độ mạnh mẽ của model và giảm tình trạng quá khớp (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 đặc trưng mạnh mẽ hơn bằng cách pha trộn các hình ảnh của các sản phẩm khác nhau, dạy cho nó cách xác định các mặt hàng ngay cả khi chúng bị che khuất một phần hoặc bởi các sản phẩm khác trên kệ hàng đông đúc.
  • Triển khai của Ultralytics: Mixup
  • Lưu ý:
    • Tỉ lệ mixup là một giá trị ngẫu nhiên được chọn từ phân phối beta np.random.beta(32.0, 32.0), có nghĩa là mỗi ảnh đóng góp khoảng 50%, với một số biến động nhỏ.
Ảnh đầu tiên, mixup tắtẢnh thứ hai, mixup tắtmixup bật
Ảnh thứ nhất để pha trộn MixUpẢnh thứ hai để pha trộn MixUpĐã bật tăng cường pha trộn MixUp

CutMix (cutmix)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách sử dụng: Cắt một vùng hình chữ nhật từ một ảnh và dán nó lên ảnh khác với xác suất cho trước. Siêu tham số cutmix xác định xác suất áp dụng phép biến đổi, với cutmix=1.0 đảm bảo rằng tất cả các ảnh đều trải qua phép biến đổi này và cutmix=0.0 vô hiệu hóa hoàn toàn nó. Ví dụ, với cutmix=0.5, mỗi ảnh có 50% cơ hội bị thay thế một vùng bằng một bản vá từ ảnh khác.
  • Mục đích: Nâng cao hiệu suất model bằng cách tạo ra các tình huống che khuất thực tế trong khi vẫn duy trì tính toàn vẹn của các đặc trưng cục bộ. Ví dụ, trong các hệ thống lái xe tự động, 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 chúng bị che khuất một phần bởi các đối tượng khác, cải thiện độ chính xác phát hiện trong các môi trường thực tế phức tạp với các đối tượng 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 xác định ngẫu nhiên cho mỗi lần áp dụng.
    • Không giống như mixup pha trộn giá trị pixel trên toàn cục, cutmix duy trì cường độ pixel ban đầu trong các vùng bị cắt, giữ nguyên các đặc trưng cục bộ.
    • Một vùng chỉ được dán vào ảnh mục tiêu nếu nó không chồng chéo với bất kỳ bounding box nào hiện có. Ngoài ra, chỉ những bounding box giữ lại đủ diện tích ban đầu của chúng trong vùng được dán mới được giữ lại.
    • Ngưỡng diện tích bounding box tối thiểu này không thể thay đổi với phiên bản hiện tại. Nó là 0.1 (10%) đối với nhãn phát hiện và 0.01 (1%) khi các nhãn mang theo các phân đoạn (segments).
Ảnh đầu tiên, cutmix tắtẢnh thứ hai, cutmix tắtcutmix bật
Ảnh đầu tiên cho CutMixẢnh thứ hai cho CutMixĐã bật tăng cường CutMix

Tăng cường đặc thù cho Segmentation#

Copy-Paste (copy_paste)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách sử dụng: Chỉ hoạt động cho các tác vụ segmentation, phép tăng cường này sao chép các đối tượng trong hoặc giữa các hình ảnh, được điều khiển bởi copy_paste_mode. Ở chế độ flip, copy_paste là tỷ lệ các đối tượng đủ điều kiện được sao chép: một hình ảnh có sáu đối tượng đủ điều kiện sẽ có thêm ba bản sao ở mức copy_paste=0.5. Ở chế độ mixup, giá trị tương tự cũng điều khiển xác suất chạy copy-paste. copy_paste=0.0 vô hiệu hóa phép biến đổi này.
  • Mục đích: Đặc biệt hữu ích cho các tác vụ phân đoạn cá thể (instance segmentation) và các lớp đối tượng hiếm. Ví dụ, trong phát hiện lỗi công nghiệp nơi một số loại lỗi xuất hiện không thường xuyên, tăng cường Copy-Paste có thể làm tăng tần suất xuất hiện của các lỗi hiếm này một cách nhân tạo 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 này mà không yêu cầu thêm các mẫu lỗi.
  • Triển khai của Ultralytics: CopyPaste
  • Lưu ý:
    • Như được minh họa trong video dưới đây, phương pháp tăng cường copy_paste có thể được sử dụng để sao chép các đối tượng từ ảnh này sang ảnh khác.
    • Khi một vật thể đã được chọn để sao chép, chỉ số IoA của nó được tính toán với tất cả các vật thể đã có sẵn trong ảnh mục tiêu, bất kể copy_paste_mode. Vật thể chỉ được dán nếu tất cả các giá trị IoA đều nhỏ hơn 0.3 (30%); nó sẽ không được dán nếu có bất kỳ giá trị IoA nào từ 0.3 trở lên.
    • Ngưỡng IoA không thể thay đổi trong bản triển khai hiện tại và được đặt thành 0.3 theo mặc định.
copy_paste tắtcopy_paste bật với copy_paste_mode=flipTrực quan hóa quá trình copy_paste
Ảnh gốc không tăng cườngĐã bật tăng cường copy-paste

Chế độ Copy-Paste (copy_paste_mode)#

  • Tùy chọn: 'flip', 'mixup'
  • Mặc định: 'flip'
  • Cách sử dụng: Xác định phương pháp được sử dụng cho phép tăng cường copy-paste. Nếu được đặt thành 'flip', các vật thể đến từ cùng một ảnh, trong khi 'mixup' cho phép các vật thể được sao chép từ các ảnh khác nhau.
  • Mục đích: Cho phép sự linh hoạt trong cách tích hợp các đối tượng đã sao chép vào ảnh mục tiêu.
  • Triển khai của Ultralytics: CopyPaste
  • Lưu ý:
    • Nguyên tắc IoA là giống nhau đối với cả hai tùy chọn copy_paste_mode, nhưng cách các vật thể được sao chép thì khác nhau.
    • Tùy thuộc vào kích thước ảnh, các đối tượng đôi khi có thể được sao chép một phần hoặc hoàn toàn ra ngoài khung hình.
    • Tùy thuộc vào chất lượng của chú thích đa giác (polygon), các đối tượng được sao chép có thể có những biến đổi nhỏ về hình dạng so với các đối tượng gốc.
Ảnh tham chiếuẢnh được chọn cho copy_pastecopy_paste bật với copy_paste_mode=mixup
Ảnh thứ hai để pha trộn MixUpẢnh gốc không tăng cườngCopy-paste ở chế độ MixUp

Tăng cường đặc thù cho Classification#

Auto Augment (auto_augment)#

  • Tùy chọn: 'randaugment', 'autoaugment', 'augmix', None
  • Mặc định: 'randaugment'
  • Cách sử dụng: Áp dụng các chính sách tăng cường tự động cho việc 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ành None sẽ vô hiệu hóa việc tăng cường tự động.
  • Mục đích: Tối ưu hóa các chiến lược tăng cường dữ liệu tự động cho các tác vụ phân loại. Sự khác biệt cụ thể như sau:
    • AutoAugment: Chế độ này áp dụng các chính sách tăng cường được định nghĩa trước học được từ các tập dữ liệu như ImageNet, CIFAR10 và SVHN. Người dùng có thể chọn các chính sách hiện có này nhưng không thể huấn luyện các chính sách mới trong Torchvision. Để khám phá các chiến lược tăng cường tối ưu cho các tập dữ liệu cụ thể, các thư viện bên ngoài hoặc các giải pháp tùy chỉnh sẽ là cần thiết. Tham khảo bài báo AutoAugment.
    • RandAugment: Áp dụng một tập hợp các phép biến đổi ngẫu nhiên với độ lớn đồng đều. Cách tiếp cận này làm giảm nhu cầu tìm kiếm mở rộng, giúp tối ưu hóa hiệu quả tính toán hơn trong khi vẫn nâng cao tính mạnh mẽ của mô hình. Tham khảo bài báo RandAugment.
    • AugMix: AugMix là một phương pháp tăng cường dữ liệu giúp cải thiện độ mạnh mẽ của mô hình bằng cách tạo ra các biến thể hình ảnh đa dạng thông qua sự 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, sự khác biệt chính giữa ba phương pháp là cách các chính sách tăng cường được định nghĩa và áp dụng.
    • Bạn có thể tham khảo bài viết này so sánh chi tiết ba phương pháp trên.

Xóa ngẫu nhiên (Random Erasing) (erasing)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.4
  • Cách sử dụng: Xóa ngẫu nhiên các phần của ảnh trong quá trình huấn luyện phân loại. Siêu tham số erasing xác định xác suất áp dụng phép biến đổi, với erasing=1.0 xóa một vùng trong mọi ảnh và erasing=0.0 vô hiệu hóa phép biến đổi. Ví dụ, với erasing=0.5, mỗi ảnh có 50% cơ hội bị xóa một phần.
  • Mục đích: Giúp mô hình học các đặc trưng bền vững và ngăn ngừa việc quá phụ thuộc vào các vùng hình ảnh cụ thể. Ví dụ, trong các hệ thống nhận diện khuôn mặt, xóa ngẫu nhiên giúp mô hình trở nên bền vững hơn với các vật cản một phần như kính mát, khẩu trang hoặc các vật thể khác có thể che khuất các đặc điểm trên khuôn mặt. Điều này cải thiện hiệu suất thực tế bằng cách buộc mô hình nhận diện cá nhân dựa trên nhiều đặc điểm khuôn mặt thay vì chỉ phụ thuộc vào các đặc điểm nổi bật dễ bị che khuất.
  • Triển khai của Ultralytics: classify_augmentations()
  • Lưu ý:
    • Phép tăng cường erasing đi kèm với các siêu tham số scale, ratiovalue không thể thay đổi bằng bản 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)0, như đã nêu trong tài liệu của PyTorch.
erasing tắterasing bật (ví dụ 1)erasing bật (ví dụ 2)erasing bật (ví dụ 3)
Ảnh gốc không tăng cườngVí dụ xóa ngẫu nhiên 1Ví dụ xóa ngẫu nhiên 2Ví dụ xóa ngẫu nhiên 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: list của các phép biến đổi Albumentations
  • Mặc định: None
  • Cách sử dụng: Cho phép bạn cung cấp các phép biến đổi Albumentations tùy chỉnh để tăng cường dữ liệu bằng cách sử dụng Python API. Tham số này nhận một danh sách các đối tượng biến đổi Albumentations sẽ đượ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 quyền kiểm soát chi tiết đối với 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 của Albumentations. Điều này cực kỳ hữu ích khi bạn cần các phép tăng cường chuyên specialized vượt ra ngoài các tùy chọn YOLO tích hợp sẵn, chẳng hạn như biến dạng đàn hồi và biến dạng lưới cho hình ảnh y tế, các phép biến đổi được tinh chỉnh cho góc nhìn trên không và vệ tinh, dịch chuyển nhiễu và độ sáng mô phỏng điều kiện ánh sáng yếu, hoặc các biến thể kết cấu giống như lỗi để kiểm tra công nghiệp.
  • Triển khai của Ultralytics: Albumentations
  • Lưu ý:
    • Việc xây dựng các đối tượng biến đổi yêu cầu API Python. Ultralytics tuần tự hóa chúng bằng A.to_dict() khi lưu checkpoint, do đó một danh sách đã được tuần tự hóa có thể khứ hồi qua tệp cấu hình YAML hoặc CLI, đây là tính năng cho phép resume khôi phục chúng.
    • Các phép biến đổi tùy chỉnh thay thế hoàn toàn tập 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, degrees, và các phần còn lại — vẫn hoạt động và được áp dụng một cách độc lập.
    • Hãy thận trọng với các phép biến đổi không gian làm thay đổi hình học ảnh. Ultralytics tự động điều chỉnh bounding box, nhưng một số phép biến đổi phức tạp có thể yêu cầu cấu hình bổ sung.
    • Albumentations cung cấp hơn 70 phép biến đổi; tài liệu Albumentations liệt kê tất cả chúng. Việc thêm nhiều phép biến đổi, hoặc những phép tốn kém về mặt 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 của mỗi epoch.
    • Áp dụng cho các tác vụ detect, segment, semantic, depth, pose, và obb. Phân loại được loại trừ, vì nó sử dụng một pipeline tăng cường riêng biệt.

Các ví dụ dưới đây yêu cầu Albumentations 1.4.22 trở lên, và do đó cần Python 3.9 trở lên.

Ví dụ về Albumentations tùy chỉnh
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Define custom Albumentations transforms
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),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

Câu hỏi thường gặp#

  • Việc lựa chọn các phép tăng cường phù hợp phụ thuộc vào trường hợp sử dụng cụ thể và tập dữ liệu của bạn. Dưới đây là một vài hướng dẫn chung để giúp bạn quyết định:

    • Trong hầu hết các trường hợp, sự biến động nhẹ về màu sắc và độ sáng là có lợi. Các giá trị mặc định cho hsv_h, hsv_shsv_v là một điểm khởi đầu vững chắc.
    • Nếu góc nhìn của camera là cố định và sẽ không thay đổi sau khi mô hình được triển khai, bạn có thể bỏ qua các phép biến đổi hình học như rotation, translation, scale, shear hoặc perspective. Tuy nhiên, nếu góc máy có thể thay đổi và bạn cần mô hình mạnh mẽ hơn, tốt hơn hết là giữ lại các phép tăng cường này.
    • Chỉ sử dụng phép tăng cường mosaic nếu việc có các vật thể bị che khuất một phần hoặc nhiều vật thể trong một ảnh là chấp nhận được và không làm thay đổi giá trị nhãn. Ngoài ra, bạn có thể giữ mosaic hoạt động nhưng tăng giá trị close_mosaic để vô hiệu hóa nó 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 hợp các phép tăng cường nhỏ và dần dần thêm nhiều hơn khi cần. Mục tiêu là cải thiện khả năng tổng quát và độ bền vững của mô hình, không phải làm phức tạp hóa quá trình huấn luyện. Ngoài ra, hãy đảm bảo các phép tăng cường bạn áp dụng phản ánh phân phối dữ liệu mà mô hình của bạn sẽ gặp phải trong môi trường thực tế.

  • Nếu gói albumentations được cài đặt, Ultralytics sẽ tự động áp dụng một tập hợp các phép tăng cường hình ảnh bổ sung bằng cách sử dụng nó. Các phép tăng cường này được xử lý nội bộ và không yêu cầu cấu hình bổ sung nào.

    Bạn có thể tìm thấy toàn bộ danh sách các phép biến đổi được áp dụng trong tài liệu kỹ thuật của chúng tôi, cũng như trong 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 p lớn hơn 0 mới hoạt động. Chúng được cố ý áp dụng ở tần suất thấp để mô phỏng các hiện tượng giả tạo trực quan trong thế giới thực, 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 cách sử dụng Python API. Xem phần 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 nó:

    pip install albumentations

    Sau khi cài đặt, gói này sẽ được tự động phát hiện và sử dụng bởi Ultralytics.

  • Bạn có thể tùy chỉnh các phép tăng cường bằng cách tạo một lớp tập dữ liệu và trình huấn luyện 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 về cách thực hiện.

Bình luận