Ultralytics YOLO27:

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 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 hình ảnh hiện có. Khi huấn luyện các model học sâu 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à nâng cao khả năng khái quát hóa trong 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 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 các model 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ả kích thước tập dữ liệu huấn luyện mà không cần thu thập dữ liệu mới.
  • Cải thiện khả năng khái 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, giúp chúng bền vững hơn trong các ứng dụng thực tế.
  • Giảm overfitting: Bằng cách đưa tính 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 hình ảnh.
  • Nâng cao hiệu suất: Các model được huấn luyện với chiến lược tăng cường phù hợp thường đạt độ chính xác tốt hơn trên các tập validation và test.

Triển khai của Ultralytics YOLO cung cấp một bộ công cụ toàn diện gồm các kỹ thuật tăng cường, mỗi kỹ thuật phục vụ những mục đích cụ thể và đóng góp theo các cách khác nhau vào hiệu suất của model. Hướng dẫn này trình bày các cài đặt 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 các dự án của mình.

Cấu hình ví dụ#

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ụ thiết lập tăng cường dữ liệu bằng 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)
Đặt các đối 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 phép biến đổi bạn kiểm soát thông qua các đối 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 với xác suất p=0.01 — bất cứ khi nào gói albumentations được cài đặt; không có đối số nào trong default.yaml có thể tắt bộ này. Gỡ cài đặt gói để loại bỏ nó 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). Tham số mode chỉ bắt buộc khi sử dụng CLI. Tệp YAML mới này sau đó 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: Dịch chuyển màu sắc của hình ảnh trong khi duy trì mối quan hệ giữa chúng. Hyperparameter hsv_h xác định độ lớn dịch chuyển, với đ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 khoảng từ -0.3 đến 0.3. 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 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 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 diện mạo của đối tượng. Ví dụ, một quả chuối có thể trông vàng hơn dưới ánh nắng mạnh nhưng xanh hơn khi ở 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: Điều chỉnh cường độ màu trong hình ảnh. Hyperparameter hsv_s xác định độ lớn dịch chuyển, với đ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 khoảng từ -0.7 đến 0.7.
  • Mục đích: Giúp model 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ể rất rực rỡ trong ngày nắng nhưng trông xỉn màu và nhạt hơn 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. Hyperparameter hsv_v xác định độ lớn dịch chuyển, với đ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 khoảng từ -0.4 đến 0.4.
  • Mục đích: Cần thiết khi huấn luyện các model phải hoạt động trong những đ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 nắng 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

Các 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 được chỉ định. Hyperparameter degrees xác định góc xoay, với đ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 khoảng từ -10.0 đến 10.0.
  • Mục đích: Quan trọng đối với các ứng dụng trong đó đố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 theo bất kỳ hướng nào, yêu cầu model nhận diện đối tượng bất kể góc xoay.
  • 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

Dịch chuyể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à chiều dọc bằng một phần ngẫu nhiên của kích thước hình ảnh. Hyperparameter translate xác định độ lớn dịch chuyển, với đ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 từ -translate đến translate. Ví dụ, với translate=0.5, phép dịch chuyển theo trục x được chọn ngẫu nhiên trong khoảng từ -0.5 đến 0.5, và một giá trị ngẫu nhiên độc lập khác được chọn trong cùng khoảng trên trục y.
  • 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à cải thiện độ bền vững trước vị trí đối tượng. Ví dụ, trong các ứng dụng đánh giá hư hỏng phương tiện, các bộ phận 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 người chụp; phép tăng cường dịch chuyển sẽ dạy model 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 đều 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 hoàn toàn hình ảnh 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 dưới dạng float hoặc tuple (min, max) tường minh
  • 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. Ở dạng float, hyperparameter scale xác định hệ số tăng tỷ lệ, với hệ số 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, tỷ lệ được chọn ngẫu nhiên trong khoảng từ 0.5 đến 1.5. Ở dạng 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ố trong khoảng từ 0.5 đến 2.0.
  • Mục đích: Cho phép model xử lý các đối tượng ở nhiều 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, yêu cầu model nhận diện chúng bất kể kích thước.
  • Triển khai của Ultralytics: RandomPerspective
  • Lưu ý:
    • Giá trị -1.0 không được hiển thị vì nó sẽ khiến hình ảnh biến mất, trong khi 1.0 chỉ tạo ra hiệu ứng zoom 2x.
    • Các giá trị hiển thị trong bảng bên dưới là độ lệch tỷ lệ thực tế, không phải các giá trị bạn truyền vào hyperparameter scale.
    • Dạng float được kiểm tra trong phạm vi 0.0 - 1.0; giá trị nằm ngoài phạm vi sẽ tạo ra ValueError. Để lấy mẫu hệ số vượt quá mức zoom 2x, hãy truyền dạng tuple (min, max).
    • Dạng tuple chỉ áp dụng cho các tác vụ hình học. Quá trình huấn luyện classification tự suy ra phạm vi crop từ float (từ 1.0 - scale đến 1.0), vì vậy truyền tuple trong trường hợp này sẽ tạo ra TypeError.
-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

Shear (shear)#

  • Phạm vi: -180 đến +180
  • Mặc định: 0
  • Cách sử dụng: Áp dụng phép biến đổi hình học làm nghiêng hình ảnh theo cả trục x và trục y, thực chất dịch chuyển các phần của hình ảnh theo một hướng trong khi vẫn duy trì các đường thẳng song song. Hyperparameter shear xác định góc shear, với đ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, shear đượ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 khoảng trên trục y.
  • Mục đích: Giúp model khái quát hóa trước các biến thiên về góc nhìn do độ nghiêng nhẹ hoặc góc nhìn xiên gây ra. Chẳng hạn, trong giám sát giao thông, các đối tượng như ô tô và biển báo đường có thể trông nghiêng do camera được đặt không vuông góc. Áp dụng 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.
  • Triển khai của Ultralytics: RandomPerspective
  • Lưu ý:
    • Các giá trị shear có thể nhanh chóng làm biến dạng hình ảnh, vì vậy nên bắt đầu với các giá trị nhỏ và tăng dần.
    • Không giống các phép 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 của chúng trong khi 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 sử dụng: Áp dụng phép biến đổi phối cảnh đầy đủ theo cả trục x và trục y, mô phỏng cách đối tượng xuất hiện khi được nhìn từ các độ sâu hoặc góc khác nhau. Hyperparameter perspective xác định độ lớn phối cảnh, với đ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 khoảng trên trục y.
  • Mục đích: Tăng cường phối cảnh rất quan trọng để xử lý những thay đổi lớn về góc nhìn, đặc biệt trong các kịch bản mà đối tượng bị thu 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 dựa trên drone, các tòa nhà, con đường và phương tiện có thể bị kéo giãn 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, model học cách nhận diện đối tượng bất chấp các biến dạng do phối cảnh gây ra, từ đó cải thiện độ bền vững trong triển khai thực tế.
  • Triển khai của Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

Lật trên-dưới (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 hình ảnh theo trục y. Phép biến đổi này phản chiếu toàn bộ hình ảnh theo chiều ngược lại nhưng vẫn giữ nguyên mọi mối quan hệ không gian giữa các đối tượng. Hyperparameter flipud xác định xác suất áp dụng phép biến đổi, trong đó giá trị flipud=1.0 đảm bảo mọi hình ảnh đều được lật, còn 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 hình ảnh có 50% khả năng bị lật ngược.
  • Mục đích: Hữu ích trong các kịch bản mà đối tượng có thể xuất hiện theo hướng ngược. Ví dụ, trong các hệ thống thị giác robot, đối tượng trên băng chuyền hoặc cánh tay robot có thể được gắp và đặt theo 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
Original image without augmentationVertical flip augmentation enabled

Lật trái-phải (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 hình ảnh theo trục x. Phép biến đổi này hoán đổi hai phía trái và phải trong khi duy trì tính nhất quán về không gian, giúp model khái quát hóa với các đối tượng xuất hiện theo hướng đối xứng. Hyperparameter fliplr xác định xác suất áp dụng phép biến đổi, trong đó giá trị fliplr=1.0 đảm bảo mọi hình ảnh đều được lật, còn 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% khả năng 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 lượng tư thế và nhận diện khuôn mặt để cải thiện độ bền vững trước các biến thiên 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, còn 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
Original image without augmentationHorizontal flip augmentation enabled

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 hình ảnh từ RGB sang BGR, thay đổi thứ tự biểu diễn màu. Hyperparameter bgr xác định xác suất áp dụng phép biến đổi, trong đó bgr=1.0 đảm bảo mọi hình ảnh đều được hoán đổi kênh, còn bgr=0.0 vô hiệu hóa phép biến đổi. Ví dụ, với bgr=0.5, mỗi hình ảnh có 50% khả năng được chuyển đổi 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 các model phải 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.
  • Triển khai của Ultralytics: Format
bgr tắtbgr bật
Original image without augmentationBGR channel swap augmentation

Mosaic (mosaic)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 1
  • Cách sử dụng: Kết hợp bốn hình ảnh huấn luyện thành một hình ảnh. Hyperparameter mosaic xác định xác suất áp dụng phép biến đổi, trong đó mosaic=1.0 đảm bảo mọi hình ảnh đều được kết hợp, còn 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% khả năng được kết hợp với ba hình ả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ã, nơi độ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, trong tình trạng 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 nhân tạo tạo ra 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 giúp model bền vững hơn, nó cũng có thể khiến quá trình huấn luyện trở nên khó khăn hơn.
    • Có thể vô hiệu hóa phép tăng cường mosaic 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 hoàn tất mà tại đó phép tăng cường sẽ đượ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 epoch. 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 vô hiệu hóa copy_paste, mixupcutmix tại cùng một epoch. Cả bốn phép tăng cường được tắt cùng nhau, 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 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 trên một hình ảnh duy nhất thay vì kết hợp nhiều hình ả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 hoặc bên ngoài hình ảnh.
    • Triển khai hiện tại của phép tăng cường mosaic kết hợp hình ảnh hiện tại với 3 hình ảnh khác, được lấy từ bộ đệm các hình ảnh vừa tải gần đây hoặc từ bất kỳ vị trí nào trong tập dữ liệu khi cache='ram'. Trong cả hai trường hợp, hình ảnh được lấy mẫu có hoàn lại, vì vậy cùng một hình ảnh có thể xuất hiện nhiều hơn một lần trong một mosaic.
mosaic tắtmosaic bật
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách sử dụng: Trộn hai hình ảnh và nhãn của chúng với xác suất cho trước. Hyperparameter mixup xác định xác suất áp dụng phép biến đổi, trong đó mixup=1.0 đảm bảo mọi hình ảnh đều được trộn, còn 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% khả năng được trộn với một hình ả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 hình ảnh của những sản phẩm khác nhau, giúp model nhận diện mặt hàng 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 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 lấy từ phân phối beta np.random.beta(32.0, 32.0), nghĩa là mỗi hình ảnh đóng góp khoảng 50%, với một số biến thiên nhỏ.
Hình ảnh thứ nhất, mixup tắtHình ảnh thứ hai, mixup tắtmixup bật
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

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 hình ảnh và dán lên hình ảnh khác với xác suất cho trước. Hyperparameter cutmix xác định xác suất áp dụng phép biến đổi, trong đó cutmix=1.0 đảm bảo mọi hình ảnh đều trải qua phép biến đổi này, còn cutmix=0.0 vô hiệu hóa hoàn toàn phép biến đổi. Ví dụ, với cutmix=0.5, mỗi hình ảnh có 50% khả năng có một vùng bị thay thế bằng một mảnh từ hình ả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 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ự 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 chúng bị các đối tượng khác che khuất một phần, từ đó 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 có các đối tượng chồng lấn.
  • 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 mixup, vốn trộn các giá trị pixel trên toàn cục, cutmix duy trì cường độ pixel ban đầu bên 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 đích nếu không chồng lấn với bất kỳ BBox hiện có nào. Ngoài ra, chỉ các BBox vẫn giữ đủ phần diện tích ban đầu trong vùng được dán mới được bảo toàn.
    • Ngưỡng diện tích BBox tối thiểu này không thể thay đổi trong triển khai hiện tại. Giá trị là 0.1 (10%) đối với nhãn detection và 0.01 (1%) khi nhãn chứa các segment.
Hình ảnh thứ nhất, cutmix tắtHình ảnh thứ hai, cutmix tắtcutmix bật
First image for CutMixSecond image for CutMixCutMix augmentation enabled

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 sử 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 các đối tượng trong cùng một hình ảnh hoặc giữa các hình ảnh, được điều khiển bởi copy_paste_mode. Ở chế độ flip, copy_paste là phần 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 tại copy_paste=0.5. Ở chế độ mixup, cùng giá trị đó cũng kiểm soát xác suất chạy copy-paste. copy_paste=0.0 vô hiệu hóa phép biến đổi.
  • Mục đích: Đặc biệt hữu ích cho các tác vụ phân đoạn instance 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ể nhân tạo tăng số lần xuất hiện của các lỗi hiếm 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 model học tốt hơn các trường hợp ít đạ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, augmentation copy_paste có thể được sử dụng để sao chép các đối tượng từ ảnh này sang ảnh khác.
    • Sau khi một đối tượng được chọn để sao chép, IoA của đối tượng đó được tính toán với tất cả các đối tượng đã có trong ảnh đích, bất kể copy_paste_mode. Đối tượng chỉ được dán vào nếu tất cả giá trị IoA đều dưới 0.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ơn 0.3.
    • Không thể thay đổi ngưỡng IoA bằng implementation hiện tại và ngưỡng này mặc định được đặt thành 0.3.
copy_paste tắtBật copy_paste với copy_paste_mode=flipTrực quan hóa quy trình copy_paste
Original image without augmentationCopy-paste augmentation enabled

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 thức được sử dụng cho augmentation copy-paste. Nếu được đặt thành 'flip', các đối tượng sẽ đến từ cùng một ảnh, còn 'mixup' cho phép sao chép các đối tượng từ những ảnh khác nhau.
  • 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 đối với cả hai tùy chọn copy_paste_mode, nhưng cách sao chép các đối tượng 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 nằm ngoài khung hình.
    • Tùy thuộc vào chất lượng của các annotation polygon, các đối tượng được sao chép có thể có một số biến thể nhỏ về hình dạng so với bản gốc.
Ảnh tham chiếuẢnh được chọn cho copy_pasteBật copy_paste với copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Augmentation dành riêng 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 policy augmentation tự động cho classification. Tùy chọn 'randaugment' sử dụng RandAugment, 'autoaugment' sử dụng AutoAugment và 'augmix' sử dụng AugMix. Đặt thành None để tắt augmentation tự động.
  • Mục đích: Tự động tối ưu hóa các chiến lược augmentation cho các tác vụ classification. Những khác biệt như sau:
    • AutoAugment: Chế độ này áp dụng các policy augmentation đượ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 hiện có này nhưng không thể train policy mới trong Torchvision. Để tìm ra các chiến lược augmentation tối ưu cho những dataset cụ thể, cần sử dụng thư viện bên ngoài hoặc implementation tùy chỉnh. 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 magnitude đồng nhất. Phương pháp này giảm nhu cầu thực hiện một giai đoạn tìm kiếm mở rộng, nhờ đó hiệu quả hơn về mặt tính toán mà vẫn cải thiện độ robustness của model. Tham khảo bài báo RandAugment.
    • AugMix: AugMix là một phương pháp augmentation dữ liệu giúp cải thiện độ robustness của model bằng cách tạo ra các biến thể ảnh đa dạng thông qua những 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.
  • Implementation 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 các policy augmentation được định nghĩa và áp dụ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 sử dụng: Ngẫu nhiên xóa các phần của ảnh trong quá trình train classification. Hyperparameter erasing xác định xác suất áp dụng phép biến đổi, trong đó erasing=1.0 xóa một vùng trong mọi ảnh còn erasing=0.0 tắt phép biến đổi. Ví dụ, với erasing=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 robust và ngăn việc phụ thuộc quá mức vào những vùng cụ thể trong ảnh. Ví dụ, trong các hệ thống nhận dạng khuôn mặt, random erasing giúp model robust hơn trước các trường hợp che khuất một phần như kính râm, khẩu trang hoặc những đối tượng khác có thể che một phần các đặ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 dạng từng 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 trưng nổi bật có thể bị che khuất.
  • Implementation của Ultralytics: classify_augmentations()
  • Lưu ý:
    • Augmentation erasing đi kèm các hyperparameter scale, ratiovalue, không thể thay đổi bằng implementation hiện tại. Các giá trị mặc định lần lượt là (0.02, 0.33), (0.3, 3.3)0, như được nêu trong tài liệu PyTorch.
erasing tắtBật erasing (ví dụ 1)Bật erasing (ví dụ 2)Bật erasing (ví dụ 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

Các tính năng Augmentation nâng cao#

Transform Albumentations tùy chỉnh (augmentations)#

  • Loại: list của các transform Albumentations
  • Mặc định: None
  • Cách sử dụng: Cho phép bạn cung cấp các transform Albumentations tùy chỉnh để augmentation dữ liệu bằng Python API. Tham số này nhận một danh sách các object transform Albumentations được áp dụng trong quá trình train thay cho các transform Albumentations mặc định.
  • Mục đích: Cung cấp khả năng kiểm soát chi tiết đối với các chiến lược augmentation dữ liệu bằng cách tận dụng thư viện transform Albumentations phong phú. Điều này đặc biệt hữu ích khi bạn cần các augmentation 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à biến dạng lưới cho ảnh y tế, các transform được tinh chỉnh cho góc nhìn trên cao từ trên không và vệ tinh, thay đổi noise và brightness mô phỏng điều kiện ánh sáng yếu, hoặc các biến thể texture giống lỗi phục vụ kiểm tra công nghiệp.
  • Implementation của Ultralytics: Albumentations
  • Lưu ý:
    • Việc xây dựng các object transform cần Python API. Ultralytics serialize chúng bằng A.to_dict() khi lưu checkpoint, vì vậy một danh sách đã được serialize có thể round-trip qua file cấu hình YAML hoặc CLI, nhờ đó resume có thể khôi phục chúng.
    • Các transform tùy chỉnh thay thế hoàn toàn bộ Albumentations mặc định. Mọi augmentation được cấu hình ở nơi khác trên trang này — mosaic, hsv_h, degrees và các augmentation còn lại — 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 của ảnh, bao gồm cả những phép biến đổi được lồng trong A.OneOf hoặc A.Compose, sẽ di chuyển các bounding box, đa giác, keypoint, và mặt nạ độ sâu hoặc ngữ nghĩa cùng với ảnh; A.RandomGridShuffle không thể bảo toàn cấu trúc tô-pô của đa giác hoặc keypoint và sẽ báo lỗi đối với các mẫu segmentation, pose, và OBB.
    • Albumentations cung cấp hơn 70 transform; tài liệu Albumentations liệt kê toàn bộ các transform này. Việc thêm nhiều transform hoặc các transform tốn nhiều tài nguyên tính toán sẽ làm chậm quá trình train, 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 task detect, segment, semantic, depth, poseobb. Classification không được áp dụng vì sử dụng một pipeline augmentation riêng.

Các ví dụ bên dưới yêu cầu Albumentations 1.4.22 hoặc mới hơn, do đó cần Python 3.9 hoặc mới hơn.

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(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,
)

FAQ#

  • Việc chọn augmentation phù hợp phụ thuộc vào use case 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à brightness đều có lợi. Các giá trị mặc định cho hsv_h, hsv_shsv_v là điểm khởi đầu phù hợp.
    • Nếu góc nhìn của camera nhất quán và sẽ không thay đổi sau khi model được deployment, 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 robust hơn, tốt hơn là giữ lại các augmentation này.
    • Chỉ sử dụng augmentation mosaic nếu việc có các đối tượng bị che khuất một phần hoặc nhiều đối tượng trong mỗi ảnh là chấp nhận được và không làm thay đổi giá trị label. Ngoài ra, bạn có thể giữ mosaic hoạt động nhưng tăng giá trị close_mosaic để tắt augmentation này sớm hơn trong quá trình train.

    Tóm lại: hãy giữ mọi thứ đơn giản. Bắt đầu với một tập augmentation nhỏ và dần thêm các augmentation khác khi cần. Mục tiêu là cải thiện khả năng khái quát hóa và độ robustness của model, không làm quy trình train trở nên quá phức tạp. Ngoài ra, hãy đảm bảo các augmentation bạn áp dụng phản ánh cùng một phân phối dữ liệu mà model sẽ gặp trong production.

  • Nếu package albumentations được cài đặt, Ultralytics sẽ tự động áp dụng một tập augmentation ảnh bổ sung bằng package này. Các augmentation này được xử lý nội bộ và không cần 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ỉ những augmentation có probability p lớn hơn 0 mới hoạt động. Các augmentation này được áp dụng có chủ đích với tần suất thấp để mô phỏng các artifact hình ảnh trong thực tế, chẳng hạn như hiệu ứng blur hoặc grayscale.

    Bạn cũng có thể cung cấp các transform Albumentations tùy chỉnh của riêng mình bằng Python API. Xem phần Các tính năng Augmentation nâng cao để biết thêm chi tiết.

  • Hãy kiểm tra package albumentations đã được cài đặt chưa. Nếu chưa, hãy cài đặt package này:

    pip install albumentations

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

  • Bạn có thể tùy chỉnh augmentation bằng cách tạo một dataset class và trainer tùy chỉnh. Ví dụ, bạn có thể thay thế augmentation classification mặc định của Ultralytics bằng torchvision.transforms.Resize của PyTorch hoặc các transform khác. Xem ví dụ training tùy chỉnh trong tài liệu classification để biết chi tiết implementation.

Bình luận