Tăng cường dữ liệu bằ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 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 hình ảnh hiện có. Khi huấn luyện các mô hình deep learning như Ultralytics YOLO, tăng cường dữ liệu giúp cải thiện tính ổn định của mô hình, giảm thiểu hiện tượng quá khớp (overfitting) và tăng khả năng tổng quát hóa đối với các kịch bản 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ể từ hình ảnh sẵ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 ổn định hơn trong các ứng dụng thực tế.
  • Giảm thiểu quá khớp (Overfitting): Bằng cách thêm tính biến thiên vào dữ liệu huấn luyện, mô hình ít có khả năng ghi nhớ đặc điểm cụ thể của từng hình ảnh.
  • Nâng cao hiệu suất: Các mô hình đượ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 tốt hơn trên tập kiểm thử và xác thực.

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ụ các mục đích cụ thể và đóng góp vào hiệu suất mô hình theo những cách khác nhau. Hướng dẫn này sẽ khám phá chi tiết từng tham số tăng cường, giúp bạn hiểu rõ thời điểm và cách thức sử dụng chúng hiệu quả trong các dự án của mình.

Ví dụ về 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à các ví dụ về cách thiết lập tăng cường dữ liệu trong mỗi phương thức.

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="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training without any augmentations (disabled values omitted for clarity)
model.train(
    data="coco.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="coco.yaml", epochs=100, augmentations=custom_transforms)

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 phép tăng cường, trong 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 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.5

Sau đó, khởi chạy quá trình huấn luyện bằng Python API:

Ví dụ huấn luyện
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 độ (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 hình ả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ự thay đổi, 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, mức thay đổi sẽ được chọn ngẫu nhiên trong khoảng từ -0.3 đến 0.3. Đối với các giá trị trên 0.5, sự thay đổi sắc độ sẽ xoay 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 trong khoảng từ 0.5 đến -0.5.
  • Mục đích: Đặc biệt hữu ích cho các kịch bản ngoài trời nơi điều kiện ánh sáng có thể ảnh hưởng đáng kể đến ngoại hình đố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 trong nhà.
  • Triển khai của Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

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

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.7
  • Cách sử dụng: Thay đổi cường độ màu sắc trong hình ảnh. Siêu tham số hsv_s xác định độ lớn của sự thay đổi, 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 độ sẽ được chọn ngẫu nhiên trong khoảng từ -0.7 đến 0.7.
  • Mục đích: Giúp 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ụ: một 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 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
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

Điều chỉnh độ sáng (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 hình ảnh. Siêu tham số hsv_v xác định độ lớn của sự thay đổi, 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 độ sẽ được chọn ngẫu nhiên trong khoảng từ -0.4 đến 0.4.
  • Mục đích: Thiết yếu để huấn luyện các mô hình cần thực hiện tốt 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
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

Phép biến đổi hình học

Xoay (degrees)

  • Phạm vi: 0.0 đến 180
  • Mặc định: 0
  • Cách sử dụng: Xoay hình ả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, mức xoay sẽ được chọn ngẫu nhiên trong khoảng từ -10.0 đến 10.0.
  • Mục đích: Cực kỳ quan trọng cho các ứng dụng nơi đối tượng có thể xuất hiện ở các hướng khác nhau. Ví dụ: trong hình ảnh flycam, các phương tiện có thể 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
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

Tịnh tiến (translate)

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.1
  • Cách sử dụng: Dịch chuyển hình ảnh theo chiều ngang và dọc dựa trên một phần kích thước hình ả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ột lần cho mỗi trục) trong phạm vi từ -translate đến translate. Ví dụ: với translate=0.5, mức tịnh tiế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 mô hình học cách phát hiện các đối tượng bị che khuất một phần và cải thiện tính ổn định đối với vị trí đối tượng. Ví dụ: trong các ứng dụng đánh giá hư hại xe cộ, các bộ phận của xe 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 nhiếp ảnh gia; tăng cường tịnh tiến sẽ dạy mô hình nhận diện các đặc điểm này bất kể mức độ hoàn thiện hay vị trí của chúng.
  • Triển khai của Ultralytics: RandomPerspective
  • Lưu ý: Để đơn giản hóa, các phép tịnh tiến được áp dụng dưới đây giống nhau 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 hình ảnh hoàn toàn ra khỏi khung hình.
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

Tỷ lệ (scale)

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.5
  • Cách sử dụng: Thay đổi kích thước hình ảnh theo một hệ số ngẫu nhiên trong phạm vi được chỉ định. Siêu tham số scale xác định hệ số co giãn, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ 1-scale đến 1+scale. Ví dụ: với scale=0.5, mức co giãn được chọn ngẫu nhiên trong khoảng từ 0.5 đến 1.5.
  • Mục đích: Cho phép mô hình 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ự động, các phương tiện có thể xuất hiện ở nhiều khoảng cách khác nhau từ camera, đòi hỏi mô hình phải nhận diện được 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 hình ảnh biến mất, trong khi 1.0 đơn giản dẫn đến việc phóng to 2x.
    • Các giá trị hiển thị trong bảng dưới đây là những giá trị được áp dụng thông qua siêu tham số scale, không phải hệ số quy mô cuối cùng.
    • Nếu scale lớn hơn 1.0, hình ảnh có thể rất nhỏ hoặc bị lật, vì hệ số co giãn được chọn ngẫu nhiên trong khoảng 1-scale đến 1+scale. Ví dụ: với scale=3.0, hệ số co giãn được chọn ngẫu nhiên trong khoảng từ -2.0 đến 4.0. Nếu chọn giá trị âm, hình ảnh sẽ bị lật.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

Trượt (shear)

  • Phạm vi: -180 đến +180
  • Mặc định: 0
  • Cách sử dụng: Đưa ra một phép biến đổi hình học làm lệch hình ảnh dọc theo cả trục x và y, giúp dịch chuyển các phần của hình ảnh theo một hướng trong khi vẫn giữ các đường thẳng song song. Siêu tham số shear xác định góc trượt, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -shear đến shear. Ví dụ: với shear=10.0, mức trượt đượ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 mô hình tổng quát hóa tốt hơn đối với các biến thể về góc nhìn gây ra bởi cá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 có thể trông bị nghiêng do đặt camera không vuông góc. Việc áp dụng tăng cường trượt đảm bảo mô hình học cách nhận diện đối tượng bất chấp những biến dạng lệch lạc như vậy.
  • Triển khai của Ultralytics: RandomPerspective
  • Lưu ý:
    • Các giá trị shear có thể làm biến dạng hình ảnh rất nhanh, vì vậy khuyến nghị nên bắt đầu với giá trị nhỏ và tăng dần chúng lên.
    • Không giống như các phép biến đổi phối cảnh, trượt không tạo ra chiều sâu hay cá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
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

Phối cảnh (perspective)

  • Phạm vi: 0.0 - 0.001
  • Mặc định: 0
  • Cách dùng: Áp dụng phép biến đổi phối cảnh toàn phần dọc theo cả trục x và trục y, mô phỏng cách các đối tượng xuất hiện khi được quan sát từ các độ sâu hoặc góc độ khác nhau. Siêu tham số perspective xác định độ lớn của phối cảnh, với sự điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -perspective đến perspective. 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 phối cảnh 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à các đố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 phát hiện đối tượng bằng drone, các tòa nhà, đường xá 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 mô hình 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, từ đó cải thiện tính mạnh mẽ trong triển khai thực tế.
  • Triển khai của Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Phép biến đổi phối cảnh -0.001Phép biến đổi phối cảnh -0.0005Original image without augmentationPhép biến đổi phối cảnh 0.0005Phép biến đổi phối cảnh 0.001

Lật dọc (flipud)

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • 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. 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 mô hình nhận diện đối tượng bất kể vị trí của chúng là lộn ngược hay xuôi.
  • Triển khai của Ultralytics: RandomFlip
flipud tắtflipud bật
Hình ảnh gốc không tăng cườngBật tăng cường lật dọc

Lật ngang (fliplr)

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.5
  • Cách dùng: Thực hiện lật ngang bằng cách soi gương hình ảnh theo trục x. Phép biến đổi này hoán đổi các phía trái và phải trong khi vẫn duy trì tính nhất quán về không gian, giúp mô hình khái quát hóa đối với các đối tượng xuất hiện ở các hướng soi gương. 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ả hình ảnh đều được lật và giá trị fliplr=0.0 vô hiệu hóa hoàn toàn phép biến đổi. Ví dụ, với fliplr=0.5, mỗi hình ả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 tính mạnh mẽ đố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ỳ phía nào của đường, và lật ngang giúp mô hình nhận diện chúng tốt như nhau trong cả hai hướng.
  • Triển khai của Ultralytics: RandomFlip
fliplr tắtfliplr bật
Hình ảnh gốc không tăng cườngBậ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 dùng: Hoán đổi các kênh màu của hình ảnh từ RGB sang BGR, thay đổi thứ tự mà các màu được đại diện. 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ả hình ảnh đều trải qua quá trình hoán đổi kênh và bgr=0.0 vô hiệu hóa nó. Ví dụ, với bgr=0.5, mỗi hình ảnh có 50% cơ hội được chuyển đổi từ RGB sang BGR.
  • Mục đích: Tăng tính mạnh mẽ đối với các thứ tự kênh màu khác nhau. Ví dụ, khi huấn luyện các mô hình phải hoạt động trên nhiều hệ thống camera và thư viện hình ảnh khác nhau nơi các định dạng RGB và BGR có thể được sử dụng không nhất quán, hoặc khi triển khai mô hình vào các môi trường nơi đị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
Hình ả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 dùng: Kết hợp bốn hình ả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 tất cả các hình ảnh đều đượ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 hình ảnh có 50% cơ hội được kết hợp với ba hình ảnh khác.
  • Mục đích: Cực kỳ hiệu quả để cải thiện khả năng phát hiện các đố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, phép tăng cường mosaic giúp mô hình học cách nhận diện cùng một loài ở các kích thước, sự che khuất một phần và ngữ cảnh môi trường khác nhau bằng cách tạo ra một cách nhân tạo các mẫu huấn luyện đa dạng từ dữ liệu hạn chế.
  • Triển khai của Ultralytics: Mosaic
  • Lưu ý:
    • Mặc dù phép tăng cường mosaic làm cho 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 khó khăn hơn.
    • Phép tăng cường mosaic có thể bị vô hiệu hóa gần cuối quá trình huấn luyện bằng cách đặt close_mosaic thành số epoch trước khi kết thúc khi nó sẽ được tắt. Ví dụ, nếu epochs được đặt thành 200close_mosaic được đặt thành 20, thì phép tăng cường mosaic sẽ bị vô hiệu hóa sau 180 epoch. Nếu close_mosaic được đặt thành 0, thì phép tăng cường mosaic sẽ được bật cho toàn bộ quá trình huấn luyện.
    • Tâm của mosaic được tạo được xác định bằng cách sử dụng các giá trị ngẫu nhiên và có thể nằm trong hoặc ngoài hình ảnh.
    • Việc triển khai hiện tại của phép tăng cường mosaic kết hợp 4 hình ảnh được chọn ngẫu nhiên từ tập dữ liệu. Nếu tập dữ liệu nhỏ, cùng một hình ảnh có thể được sử dụng nhiều lần trong cùng một mosaic.
mosaic tắtmosaic bật
Hình ảnh gốc không tăng cườngBật tăng cường 4-hình ảnh Mosaic

Mixup (mixup)

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách dùng: Trộn hai hình ảnh và các nhãn của chúng với xác suất nhất định. 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 hình ảnh được trộn lẫn và mixup=0.0 vô hiệu hóa phép biến đổi. Ví dụ, với mixup=0.5, mỗi hình ảnh có 50% cơ hội được trộn với một hình ảnh khác.
  • Mục đích: Cải thiện tính mạnh mẽ của mô hình 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 mô hình học các đặc trưng mạnh mẽ hơn bằng cách trộn các hình ảnh của các sản phẩm khác nhau, dạy nó nhận diện 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 các 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 hình ảnh đóng góp khoảng 50%, với những biến thể nhỏ.
Hình ảnh đầu tiên, mixup tắtHình ảnh thứ hai, mixup tắtmixup bật
Hình ảnh đầu tiên cho trộn MixUpHình ảnh thứ hai cho trộn MixUpBật tăng cường trộn MixUp

CutMix (cutmix)

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách dùng: Cắt một vùng chữ nhật từ một hình ảnh và dán nó lên hình ảnh khác với xác suất nhất định. 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 hình ảnh trải qua phép biến đổi này và cutmix=0.0 vô hiệu hóa nó hoàn toàn. Ví dụ, với cutmix=0.5, mỗi hình ảnh có 50% cơ hội được thay thế một vùng bằng một bản vá từ hình ảnh khác.
  • Mục đích: Tăng cường hiệu suất mô hình bằng cách tạo ra các tình huống che khuất thực tế trong khi 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ự động, cutmix giúp mô hình 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 chéo.
  • 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 trộn giá trị pixel toàn cục, cutmix duy trì cường độ pixel gốc trong các vùng cắt, bảo toàn các đặc trưng cục bộ.
    • Một vùng chỉ được dán vào hình ảnh mục tiêu nếu nó không chồng chéo với bất kỳ BBox hiện có nào. Ngoài ra, chỉ những BBox giữ lại ít nhất 0.1 (10%) diện tích gốc của chúng bên trong vùng được dán mới được bảo tồn.
    • Ngưỡng diện tích BBox tối thiểu này không thể thay đổi với triển khai hiện tại và được đặt mặc định là 0.1.
Hình ảnh đầu tiên, cutmix tắtHình ảnh thứ hai, cutmix tắtcutmix bật
Hình ảnh đầu tiên cho CutMixHình ảnh thứ hai cho CutMixBật tăng cường CutMix

Các phép tăng cường đặc thù cho phân đoạn (Segmentation)

Copy-Paste (copy_paste)

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách dùng: Chỉ hoạt động cho các tác vụ phân đoạn, 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 dựa trên một xác suất được chỉ định, được kiểm soát bởi copy_paste_mode. Siêu tham số copy_paste xác định xác suất áp dụng phép biến đổi, với copy_paste=1.0 đảm bảo tất cả các hình ảnh được sao chép và copy_paste=0.0 vô hiệu hóa phép tăng cường. Ví dụ, với copy_paste=0.5, mỗi hình ảnh có 50% cơ hội có các đối tượng được sao chép từ hình ảnh khác.
  • 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 nơi một số loại lỗi xuất hiện không thường xuyên, phép tăng cường copy-paste có thể làm tăng một cách nhân tạo sự xuất hiện của những lỗi hiếm gặp này bằng cách sao chép chúng từ hình ảnh này sang hình ảnh khác, giúp mô hình học tốt hơn những trường hợp ít được đại diện này mà không cần thêm các mẫu bị lỗi.
  • Triển khai của Ultralytics: CopyPaste
  • Lưu ý:
    • Như được minh họa trong ảnh gif bên dưới, phép tăng cường copy_paste có thể được sử dụng để sao chép các đối tượng từ hình ảnh này sang hình ảnh khác.
    • Sau khi một đối tượng được sao chép, bất kể copy_paste_mode là gì, Intersection over Area (IoA) của nó được tính toán với tất cả các đối tượng của hình ảnh nguồn. Nếu tất cả IoA dưới 0.3 (30%), đối tượng được dán vào hình ảnh mục tiêu. Nếu chỉ một IoA trên 0.3, đối tượng không được dán vào hình ảnh mục tiêu.
    • Ngưỡng IoA không thể thay đổi với triển khai hiện tại và được đặt mặc định là 0.3.
copy_paste tắtcopy_paste bật với copy_paste_mode=flipTrực quan hóa quá trình copy_paste
Hình ảnh gốc không tăng cườngBật tăng cường copy-pasteBản demo hoạt hình tăng cường 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 pháp được sử dụng cho phép tăng cường copy-paste. Nếu được đặt thành 'flip', các đối tượng đến từ cùng một hình ảnh, trong khi 'mixup' cho phép các đối tượng được sao chép từ các hình ảnh khác nhau.
  • Mục đích: Cho phép linh hoạt trong cách các đối tượng được sao chép được tích hợp vào các hình ảnh mục tiêu.
  • Triển khai của Ultralytics: CopyPaste
  • Lưu ý:
    • Nguyên tắc IoA là giống nhau cho cả hai copy_paste_mode, nhưng cách các đối tượng được sao chép là khác nhau.
    • Tùy thuộc vào kích thước hình ảnh, các đối tượng đôi khi có thể được sao chép một phần hoặc hoàn toàn bên ngoài khung hình.
    • Tùy thuộc vào chất lượng của các chú thích đa giác, các đối tượng được sao chép có thể có những biến thể hình dạng nhỏ so với bản gốc.
Hình ảnh tham chiếuHình ảnh đã chọn cho copy_pastecopy_paste bật với copy_paste_mode=mixup
Hình ảnh thứ hai cho trộn MixUpHình ảnh gốc không tăng cườngCopy-paste với chế độ MixUp

Các phép tăng cường đặc thù cho phân loại (Classification)

Tự động tăng cường (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 dữ liệu 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. Thiết lập về None sẽ vô hiệu hóa tính năng 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 một cách tự động cho các tác vụ phân loại. Dưới đây là những điểm khác biệt:
    • AutoAugment: Chế độ này áp dụng các chính sách tăng cường được xác định trước, họ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ần sử dụng các thư viện bên ngoài hoặc tùy chỉnh triển khai. Tham khảo bài báo AutoAugment.
    • RandAugment: Áp dụng lựa chọn ngẫu nhiên các phép biến đổi với cường độ đồng nhất. Cách tiếp cận này giảm nhu cầu về giai đoạn tìm kiếm mở rộng, giúp tăng hiệu quả tính toán trong khi vẫn cải thiện độ bền vững của model. 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 độ bền vững của model bằng cách tạo ra các biến thể hình ảnh đa dạng thông qua các tổ hợp ngẫu nhiên của 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 để xem so sánh chi tiết giữa ba phương pháp.

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

  • Phạm vi: 0.0 - 0.9
  • Mặc định: 0.4
  • Cách sử dụng: Xóa ngẫu nhiên các phần của hình ảnh trong quá trình huấn luyện phân loại. Tham số siêu cấp erasing xác định xác suất áp dụng phép biến đổi, với erasing=0.9 đảm bảo hầu hết các hình ảnh đều bị xóa và erasing=0.0 vô hiệu hóa phép biến đổi này. Ví dụ, với erasing=0.5, mỗi hình ảnh có 50% khả năng bị xóa một phần.
  • Mục đích: Giúp model học được các đặc trưng bền vững và ngăn ngừa việc phụ thuộc quá mứ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 model trở nên bền vững hơn với các vật cản một phần như kính râm, khẩu trang hoặc các vật thể khác che khuất đặc điểm 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 model nhận diện cá nhân thông qua nhiều đặc điểm thay vì chỉ dựa vào một đặc trưng duy nhất có thể 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 tham số siêu cấp scale, ratiovalue không thể thay đổi bằng triển khai hiện tại. Các 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.
    • Giới hạn trên của tham số siêu cấp erasing được đặt là 0.9 để tránh áp dụng phép biến đổi lên tất cả các hình ảnh.
erasing tắterasing bật (ví dụ 1)erasing bật (ví dụ 2)erasing bật (ví dụ 3)
Hình ả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

Tính năng tăng cường nâng cao

Phép biến đổi Albumentations tùy chỉnh (augmentations)

  • Kiểu dữ liệu: list 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 Python API. Tham số này chấp 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 vì 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 Albumentations phong phú. Điều này đặc biệt hữu ích khi bạn cần các phép tăng cường chuyên biệt ngoài các tùy chọn YOLO tích hợp sẵn, ví dụ như điều chỉnh màu sắc nâng cao, thêm nhiễu hoặc các phép biến đổi theo miền cụ thể.
  • Triển khai của Ultralytics: Albumentations
Ví dụ 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(var_limit=(10.0, 50.0), 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,
)

Điểm chính:

  • Chỉ có Python API: Các phép biến đổi Albumentations tùy chỉnh hiện chỉ được hỗ trợ thông qua Python API. Chúng không thể được chỉ định qua CLI hoặc các tệp cấu hình YAML.
  • Thay thế các biến đổi mặc định: Khi bạn cung cấp các phép biến đổi tùy chỉnh qua tham số augmentations, chúng sẽ thay thế hoàn toàn các phép biến đổi Albumentations mặc định. Các phép tăng cường YOLO mặc định (như mosaic, hsv_h, hsv_s, degrees, v.v.) vẫn hoạt động và được áp dụng độc lập.
  • Tính tương thích với BBox: Hãy cẩn trọng khi sử dụng các phép biến đổi không gian (các phép biến đổi thay đổi hình học của ảnh). Ultralytics tự động xử lý việc điều chỉnh BBox, nhưng một số phép biến đổi phức tạp có thể cần cấu hình bổ sung.
  • Thư viện mở rộng: Albumentations cung cấp hơn 70+ phép biến đổi khác nhau. Hãy khám phá tài liệu Albumentations để tìm hiểu tất cả các tùy chọn có sẵn.
  • Cân nhắc về hiệu suất: Việc thêm quá nhiều phép tăng cường hoặc sử dụng các phép biến đổi tốn kém về tài nguyên tính toán có thể làm chậm quá trình huấn luyện. Hãy bắt đầu với một tập hợp nhỏ và theo dõi tốc độ huấn luyện.

Các trường hợp sử dụng phổ biến:

  • Chẩn đoán hình ảnh: Áp dụng các phép biến đổi chuyên biệt như biến dạng đàn hồi hoặc bóp méo lưới để tăng cường hình ảnh X-quang hoặc MRI
  • Ảnh hàng không/vệ tinh: Sử dụng các phép biến đổi tối ưu cho góc nhìn từ trên cao
  • Điều kiện ánh sáng yếu: Áp dụng nhiễu và điều chỉnh độ sáng để mô phỏng điều kiện ánh sáng khó khăn
  • Kiểm định công nghiệp: Thêm các mẫu giống như lỗi hoặc biến thể kết cấu cho các ứng dụng kiểm soát chất lượng

Lưu ý về tính tương thích:

  • Yêu cầu Albumentations phiên bản 1.0.3 trở lên
  • Tương thích với tất cả các tác vụ phát hiện và phân đoạn của YOLO
  • Không áp dụng cho các tác vụ phân loại (phân loại sử dụng một quy trình tăng cường khác)

Để biết thêm thông tin về Albumentations và các phép biến đổi có sẵn, hãy truy cập tài liệu chính thức của Albumentations.

Câu hỏi thường gặp (FAQ)

Có quá nhiều phép tăng cường để lựa chọn. Làm thế nào để biết nên sử dụng cái nào?

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 và tập dữ liệu 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 các 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 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 ổn định và sẽ không thay đổi sau khi model đượ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 camera có thể thay đổi và bạn cần model bền vững hơn, tốt hơn là nên giữ 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 hình ảnh là chấp nhận được và không làm thay đổi giá trị nhãn. Hoặc, bạn có thể giữ mosaic bật nhưng tăng giá trị close_mosaic để tắt 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 nhỏ các phép tăng cường và dần dần thêm nhiều hơn nếu 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 phức tạp 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 đúng phân phối dữ liệu mà model của bạn sẽ gặp phải trong thực tế sản xuất.

Khi bắt đầu huấn luyện, tôi thấy tham chiếu albumentations: Blur[...]. Điều đó có nghĩa là Ultralytics YOLO chạy thêm các phép tăng cường như làm mờ không?

Nếu gói albumentations được cài đặt, Ultralytics tự động áp dụng một bộ các phép tăng cường hình ảnh bổ sung bằng thư viện này. 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 thêm.

Bạn có thể tìm thấy danh sách đầy đủ 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ỉ các 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 áp dụng có chủ đích với tần suất thấp để mô phỏng các nhiễu thị giác trong thực tế, chẳng hạn như hiệu ứng làm mờ hoặc ảnh đen trắng.

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.

Khi bắt đầu huấn luyện, tôi không thấy tham chiếu nào đến albumentations. Tại sao?

Kiểm tra xem gói albumentations đã được cài đặt chưa. Nếu chưa, bạn có thể cài đặt bằng cách chạy pip install albumentations. Sau khi cài đặt, gói này sẽ được Ultralytics tự động phát hiện và sử dụng.

Làm thế nào để tùy chỉnh các phép tăng cường của tôi?

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 triển khai.

Bình luận