Ultralytics YOLO27:
Get Started

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 ảnh hiện có. Khi huấn luyện các model deep learning như Ultralytics YOLO, tăng cường dữ liệu giúp cải thiện độ bền vững của model, giảm overfitting và tăng khả năng tổng quát hóa trong các tình huống thực tế.



Xem: Cách sử dụng Mosaic, MixUp và các kỹ thuật tăng cường dữ liệu khác để giúp model Ultralytics YOLO tổng quát hóa tốt hơn 🚀

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

Tăng cường dữ liệu phục vụ nhiều mục đích quan trọng trong quá trình huấn luyện model thị giác máy tính:

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

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

Ví dụ cấu hình#

Bạn có thể tùy chỉnh từng tham số bằng Python API, giao diện dòng lệnh (CLI) hoặc tệp cấu hình. Dưới đây là ví dụ thiết lập tăng cường dữ liệu bằng từng phương pháp.

Ví dụ cấu hình
import albumentations as A

from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.pt")

# Huấn luyện với các tham số tăng cường tùy chỉnh
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Huấn luyện khi tắt mọi phép tăng cường có thể cấu hình (lược bỏ các giá trị đã tắt để dễ theo dõi)
model.train(
    data="coco8.yaml",
    epochs=100,
    hsv_h=0.0,
    hsv_s=0.0,
    hsv_v=0.0,
    translate=0.0,
    scale=0.0,
    fliplr=0.0,
    mosaic=0.0,
    erasing=0.0,
    auto_augment=None,
)

# Huấn luyện với các phép biến đổi Albumentations tùy chỉnh (chỉ Python API)
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco8.yaml", epochs=100, augmentations=custom_transforms)
Đặt các tham số tăng cường về 0 không tắt 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 có thể kiểm soát thông qua các tham số huấn luyện. Ultralytics cũng áp dụng một bộ Albumentations nhỏ — blur, median blur, grayscale và CLAHE, mỗi phép ở mức p=0.01 — khi gói albumentations được cài đặt; không có tham số nào trong default.yaml tắt được các phép này. Gỡ cài đặt gói để loại bỏ chúng hoặc truyền danh sách riêng của bạn vào augmentations để thay thế.

Sử dụng tệp cấu hình#

Bạn có thể định nghĩa tất cả tham số huấn luyện, bao gồm cả các phép tăng cường, trong tệp cấu hình YAML (ví dụ: train_custom.yaml). Chỉ cần tham số mode khi sử dụng CLI. Sau đó, tệp YAML mới này sẽ ghi đè tệp mặc định nằm trong gói ultralytics.

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.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

# Tải model YOLO26n pretrained trên COCO
model = YOLO("yolo26n.pt")

# Huấn luyện model với cấu hình tùy chỉnh
model.train(cfg="train_custom.yaml")

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

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

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.015
  • Cách dùng: Dịch chuyển màu sắc của ảnh trong khi vẫn giữ nguyên mối tương quan giữa các màu. Siêu tham số hsv_h xác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -hsv_h đế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 trên vòng màu; vì vậy, các phép tăng cường trông giống nhau trong khoảng từ 0.5 đến -0.5.
  • Mục đích: Đặc biệt hữu ích trong môi trường ngoài trời, nơi điều kiện ánh sáng có thể ảnh hưởng đáng kể đến hình dạng của đối tượng. Ví dụ, quả chuối có thể trông vàng hơn dưới ánh nắng chói chang nhưng ngả xanh hơn khi ở trong nhà.
  • Cách triển khai của Ultralytics: RandomHSV
-0.5-0.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 dùng: Thay đổi cường độ màu trong ảnh. Siêu tham số hsv_s xác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -hsv_s đế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à thiết lập camera khác nhau. Ví dụ, biển báo giao thông màu đỏ có thể rất rực rỡ vào ngày nắng nhưng trông xỉn màu và phai nhạt khi trời có sương mù.
  • Cách triển khai của Ultralytics: RandomHSV
-1.0-0.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 dùng: Thay đổi độ sáng của ảnh. Siêu tham số hsv_v xác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -hsv_v đế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 model phải hoạt động trong các điều kiện ánh sáng khác nhau. Ví dụ, quả táo đỏ có thể trông sáng dưới ánh nắng nhưng tối hơn nhiều khi ở trong bóng râm.
  • Cách triển khai của Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

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

Xoay (degrees)#

  • Phạm vi: 0.0 đến 180
  • Mặc định: 0
  • Cách dùng: Xoay ảnh ngẫu nhiên trong phạm vi được chỉ định. Siêu tham số degrees xác định góc xoay; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -degrees đế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: Rất quan trọng đối với các ứng dụng mà đối tượng có thể xuất hiện ở nhiều hướng khác nhau. Ví dụ, trong ảnh chụp từ drone trên không, phương tiện có thể hướng về bất kỳ phía nào, vì vậy model cần nhận diện đối tượng bất kể góc xoay.
  • Cách triển khai của Ultralytics: RandomPerspective
-180-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 dùng: Dịch chuyển ảnh theo chiều ngang và chiều dọc một phần ngẫu nhiên so với kích thước ảnh. Siêu tham số translate xác định độ lớn dịch chuyển; mức điều chỉnh cuối cùng được chọn ngẫu nhiên hai lần (một lần cho mỗi trục) trong khoảng -translate đến translate. Ví dụ, với translate=0.5, độ dịch chuyển trên trục x được chọn ngẫu nhiên trong khoảng từ -0.5 đến 0.5, còn trên trục y sẽ chọn một giá trị ngẫu nhiên độc lập khác trong cùng khoảng.
  • Mục đích: Giúp model học cách phát hiện các đối tượng chỉ hiển thị một phần và tăng độ bền vững trước sự thay đổi vị trí đối tượng. Ví dụ, trong các ứng dụng đánh giá hư hỏng phương tiện, bộ phận ô tô có thể xuất hiện toàn bộ hoặc một phần trong khung hình tùy thuộc vào vị trí và khoảng cách của người chụp; phép tăng cường dịch chuyển sẽ giúp model nhận diện các đặc điểm này bất kể mức độ hiển thị đầy đủ hay vị trí của chúng.
  • Cách triển khai của Ultralytics: RandomPerspective
  • Lưu ý: Để đơn giản, các phép dịch chuyển minh họa bên dưới đều giống nhau ở cả hai trục x và y. Không hiển thị các giá trị -1.0 và 1.0 vì chúng sẽ dịch chuyển toàn bộ ả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 số thực, hoặc một bộ (min, max) được chỉ định tường minh
  • Mặc định: 0.5
  • Cách dùng: Thay đổi kích thước ảnh theo một hệ số ngẫu nhiên trong phạm vi được chỉ định. Với dạng số thực, siêu tham số scale xác định mức tăng tỷ lệ; hệ số cuối cùng được chọn ngẫu nhiên trong khoảng từ 1-scale đế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. Với dạng tuple, scale đặt 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: Giúp model xử lý các đối tượng ở khoảng cách và kích thước khác nhau. Ví dụ, trong các ứng dụng lái xe tự hành, phương tiện có thể xuất hiện ở nhiều khoảng cách khác nhau so với camera, do đó model cần nhận diện chúng bất kể kích thước.
  • Cách triển khai của Ultralytics: RandomPerspective
  • Lưu ý:
    • Không hiển thị giá trị -1.0 vì giá trị này sẽ làm ảnh biến mất, còn 1.0 chỉ tạo ra mức zoom 2x.
    • Các giá trị hiển thị trong bảng bên dưới là độ chênh lệch tỷ lệ thực tế, không phải giá trị bạn truyền vào siêu tham số scale.
    • Dạng số thực được kiểm tra để nằm trong phạm vi 0.0 - 1.0; giá trị nằm ngoài phạm vi này sẽ gây ra ValueError. Để lấy mẫu hệ số vượt quá mức zoom 2x, hãy dùng dạng tuple (min, max).
    • Dạng tuple chỉ áp dụng cho các tác vụ hình học. Khi huấn luyện phân loại, phạm vi crop riêng được suy ra từ giá trị số thực (1.0 - scale đến 1.0), vì vậy truyền tuple vào đây sẽ gây 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 dùng: Áp dụng biến đổi hình học làm xiên ảnh theo cả trục x và trục y, qua đó dịch chuyển các phần của ảnh theo một hướng trong khi vẫn giữ các đường thẳng song song. Siêu tham số shear xác định góc shear; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -shear đến shear. Ví dụ, với shear=10.0, giá trị shear trên trục x được chọn ngẫu nhiên trong khoảng từ -10 đến 10, còn trên trục y sẽ chọn một giá trị ngẫu nhiên độc lập khác trong cùng khoảng.
  • Mục đích: Giúp model tổng quát hóa tốt hơn trước những thay đổi góc nhìn do nghiêng nhẹ hoặc quan sát xiên. Chẳng hạn, trong giám sát giao thông, các đối tượng như ô tô và biển báo có thể bị nghiêng do camera không được đặt vuông góc. Tăng cường shear giúp model học cách nhận diện đối tượng bất chấp các biến dạng xiên như vậy.
  • Cách triển khai của Ultralytics: RandomPerspective
  • Lưu ý:
    • Các giá trị shear có thể nhanh chóng làm biến dạng ảnh, vì vậy bạn nên bắt đầu bằng các giá trị nhỏ rồi tăng dần.
    • Khác với biến đổi phối cảnh, shear không tạo ra chiều sâu hay điểm tụ mà làm biến dạng hình dạng đối tượng bằng cách thay đổi góc, đồng thời giữ các cạnh đối diện song song.
-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 biến đổi phối cảnh đầy đủ theo cả trục x và trục y, mô phỏng hình dạng của đối tượng khi được nhìn từ các độ sâu hoặc góc khác nhau. Siêu tham số perspective xác định mức độ phối cảnh; mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ -perspective đến perspective. Ví dụ, với perspective=0.001, mức phối cảnh trên trục x được chọn ngẫu nhiên trong khoảng từ -0.001 đến 0.001, còn trên trục y sẽ chọn một giá trị ngẫu nhiên độc lập khác trong cùng khoảng.
  • Mục đích: Tăng cường phối cảnh rất quan trọng để xử lý những thay đổi góc nhìn lớn, đặc biệt trong các tình huống đối tượng bị rút ngắn hoặc biến dạng do thay đổi phối cảnh. Ví dụ, trong phát hiện đối tượng bằng drone, nhà cửa, đường sá và phương tiện có thể trông bị kéo giãn hoặc nén lại tùy theo độ nghiêng và độ cao của drone. Bằng cách áp dụng các phép biến đổi phối cảnh, model học cách nhận diện đối tượng bất chấp những biến dạng do phối cảnh gây ra, qua đó tăng độ bền vững khi triển khai trong thực tế.
  • Cách triển khai của Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

Lật dọc (flipud)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách dùng: Lật dọc ảnh quanh trục y. Phép biến đổi này lật ngược toàn bộ ảnh nhưng vẫn giữ nguyên mối quan hệ không gian giữa các đối tượng. Siêu tham số flipud xác định xác suất áp dụng phép biến đổi; giá trị flipud=1.0 bảo đảm mọi ảnh đều được lật, còn giá trị flipud=0.0 tắt hoàn toàn phép biến đổi. Ví dụ, với flipud=0.5, mỗi ảnh có 50% khả năng bị lật ngược.
  • Mục đích: Hữu ích trong các tình huống đối tượng có thể xuất hiện lộn ngược. Ví dụ, trong hệ thống thị giác robot, các đối tượng trên băng chuyền hoặc cánh tay robot có thể được nhấc lên và đặt ở nhiều hướng khác nhau. Lật dọc giúp model nhận diện đối tượng bất kể hướng trên-dưới.
  • Cách triển khai của Ultralytics: RandomFlip
Tắt flipudBật flipud
Original image without augmentationVertical flip augmentation enabled

Lật ngang (fliplr)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.5
  • Cách dùng: Lật ngang ảnh bằng cách phản chiếu ảnh quanh trục x. Phép biến đổi này hoán đổi bên trái và bên phải trong khi vẫn duy trì tính nhất quán về không gian, giúp model tổng quát hóa tốt hơn với các đối tượng xuất hiện theo hướng phản chiếu. Siêu tham số fliplr xác định xác suất áp dụng phép biến đổi; giá trị fliplr=1.0 bảo đảm mọi ảnh đều được lật, còn 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% khả năng bị lật trái-phải.
  • Mục đích: Lật ngang được sử dụng rộng rãi trong phát hiện đối tượng, ước lượng tư thế và nhận diện khuôn mặt để tăng độ bền vững trước những khác biệt trái-phải. Ví dụ, trong lái xe tự hành, phương tiện và người đi bộ có thể xuất hiện ở hai bên đường; lật ngang giúp model nhận diện chúng hiệu quả như nhau theo cả hai hướng.
  • Cách triển khai của Ultralytics: RandomFlip
Tắt fliplrBật fliplr
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 dùng: Hoán đổi các kênh màu của ảnh từ RGB sang BGR, làm thay đổi thứ tự biểu diễn màu. Siêu tham số bgr xác định xác suất áp dụng phép biến đổi; bgr=1.0 bảo đảm mọi ảnh đều được hoán đổi kênh, còn bgr=0.0 tắt phép biến đổi. Ví dụ, với bgr=0.5, mỗi ảnh có 50% khả năng được chuyển từ RGB sang BGR.
  • Mục đích: Tăng độ bền vững trước các thứ tự kênh màu khác nhau. Ví dụ, khi huấn luyện model cần hoạt động trên nhiều hệ thống camera và thư viện xử lý ảnh, nơi định dạng RGB và BGR có thể được sử dụng không nhất quán, hoặc khi triển khai model trong môi trường có định dạng màu đầu vào khác với dữ liệu huấn luyện.
  • Cách triển khai của Ultralytics: Format
Tắt bgrBật bgr
Original image without augmentationBGR channel swap augmentation

Mosaic (mosaic)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 1
  • Cách dùng: Kết hợp bốn ảnh huấn luyện thành một ảnh. Siêu tham số mosaic xác định xác suất áp dụng phép biến đổi; mosaic=1.0 bảo đảm mọi ảnh đều được kết hợp, còn mosaic=0.0 tắt phép biến đổi. Ví dụ, với mosaic=0.5, mỗi ảnh có 50% khả năng được kết hợp với ba ảnh khác.
  • Mục đích: Rất hiệu quả trong việc cải thiện khả năng phát hiện đối tượng nhỏ và hiểu ngữ cảnh. Ví dụ, trong các dự án bảo tồn động vật hoang dã, động vật có thể xuất hiện ở nhiều khoảng cách và tỷ lệ khác nhau; tăng cường mosaic giúp model học cách nhận diện cùng một loài ở nhiều kích thước, khi bị che khuất một phần và trong các ngữ cảnh môi trường khác nhau bằng cách tạo nhân tạo các mẫu huấn luyện đa dạng từ lượng dữ liệu hạn chế.
  • Cách triển khai của Ultralytics: Mosaic
  • Lưu ý:
    • Dù phép tăng cường mosaic giúp model bền vững hơn, phép này cũng có thể khiến quá trình huấn luyện khó hơn.
    • Có thể tắt phép tăng cường mosaic gần cuối quá trình huấn luyện bằng cách đặt close_mosaic thành số epoch còn lại trước khi hoàn tất mà tại đó cần tắt phép tăng cường. Ví dụ, nếu epochs được đặt thành 200 và close_mosaic được đặt thành 20, phép tăng cường mosaic sẽ bị tắt 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 tắt mosaic cũng tắt copy_paste, mixup và cutmix ở cùng epoch. Cả bốn phép đều được tắt đồng thời, vì vậy các epoch cuối sẽ huấn luyện mà không có chúng, trong khi mọi phép tăng cường khác — các biến đổi hình học, HSV, phép lật và Albumentations — vẫn tiếp tục hoạt động. Lưu ý rằng copy_paste ở chế độ mặc định flip hoạt động trên một ảnh riêng lẻ thay vì kết hợp nhiều ảnh.
    • Tâm của mosaic được tạo ra xác định bằng các giá trị ngẫu nhiên và có thể nằm bên trong hoặc bên ngoài ảnh.
    • Cách triển khai hiện tại của phép tăng cường mosaic kết hợp ảnh hiện tại với 3 ảnh khác, được lấy từ bộ đệm ảnh mới tải gần đây hoặc từ bất kỳ vị trí nào trong tập dữ liệu khi cache='ram'. Trong cả hai trường hợp, ảnh được lấy mẫu có hoàn lại, vì vậy cùng một ảnh có thể xuất hiện nhiều lần trong một mosaic.
Tắt mosaicBật mosaic
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0
  • Cách dùng: Trộn hai ảnh cùng nhãn của chúng theo xác suất được chỉ định. Siêu tham số mixup xác định xác suất áp dụng phép biến đổi; mixup=1.0 bảo đảm mọi ảnh đều được trộn, còn mixup=0.0 tắt phép biến đổi. Ví dụ, với mixup=0.5, mỗi ảnh có 50% khả năng được trộn với một ảnh khác.
  • Mục đích: Cải thiện độ bền vững của model và giảm overfitting. Ví dụ, trong các hệ thống nhận diện sản phẩm bán lẻ, mixup giúp model học các đặc trưng bền vững hơn bằng cách trộn ảnh của nhiều sản phẩm khác nhau, qua đó giúp model nhận diện sản phẩm ngay cả khi chúng chỉ hiển thị một phần hoặc bị các sản phẩm khác che khuất trên các kệ hàng đông đúc.
  • Cách triển khai của Ultralytics: MixUp
  • Lưu ý:
    • Tỷ lệ 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 ảnh đóng góp khoảng 50%, với một số biến thiên nhỏ.
Ảnh thứ nhất, tắt mixupẢnh thứ hai, tắt mixupBật mixup
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 dùng: Cắt một vùng hình chữ nhật từ một ảnh và dán lên ảnh khác theo xác suất đã cho. Siêu tham số cutmix xác định xác suất áp dụng phép biến đổi; cutmix=1.0 đảm bảo phép biến đổi được áp dụng cho tất cả ảnh, còn cutmix=0.0 tắt hoàn toàn phép biến đổi. Ví dụ, với cutmix=0.5, mỗi ảnh có 50% khả năng có một vùng được thay bằng một mảng lấy từ ảnh khác.
  • Mục đích: Cải thiện hiệu suất model bằng cách tạo ra các tình huống che khuất chân thực, đồng thời duy trì tính toàn vẹn của đặc trưng cục bộ. Ví dụ, trong các hệ thống lái xe tự hành, CutMix giúp model học cách nhận diện phương tiện hoặc người đi bộ ngay cả khi họ bị các vật thể khác che khuất một phần, qua đó cải thiện độ chính xác phát hiện trong môi trường thực tế phức tạp có các vật thể chồng lấp.
  • Triển khai của Ultralytics: CutMix
  • Lưu ý:
    • Kích thước và vị trí của vùng cắt được chọn ngẫu nhiên mỗi khi áp dụng.
    • Không giống MixUp, vốn hòa trộn giá trị pixel trên toàn ảnh, cutmix giữ nguyên cường độ pixel ban đầu trong các vùng được cắt, nhờ đó bảo toàn đặc trưng cục bộ.
    • Một vùng chỉ được dán vào ảnh đích nếu không chồng lấp với bất kỳ bounding box hiện có nào. Ngoài ra, chỉ giữ lại các bounding box còn đủ diện tích ban đầu bên trong vùng được dán.
    • Không thể thay đổi ngưỡng diện tích bounding box tối thiểu này trong triển khai hiện tại. Ngưỡng là 0.1 (10%) đối với nhãn phát hiện và 0.01 (1%) khi nhãn có chứa segment.
Ảnh thứ nhất, tắt cutmixẢnh thứ hai, tắt cutmixBật cutmix
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 dùng: Yêu cầu nhãn polygon, vì vậy áp dụng cho các tác vụ segment và OBB; phép tăng cường này sao chép đối tượng trong cùng ảnh hoặc giữa các ảnh, được điều khiển bởi copy_paste_mode. Ở chế độ flip, copy_paste là tỷ lệ đối tượng đủ điều kiện được sao chép: ảnh có sáu đối tượng đủ điều kiện sẽ được thêm ba bản sao khi đặt copy_paste=0.5. Ở chế độ mixup, cùng giá trị đó cũng điều khiển xác suất chạy Copy-Paste. copy_paste=0.0 tắt phép biến đổi.
  • Mục đích: Đặc biệt hữu ích cho các tác vụ phân đoạn đối tượng và các lớp đối tượng hiếm. Ví dụ, trong phát hiện lỗi công nghiệp, khi một số loại lỗi ít xuất hiện, phép tăng cường Copy-Paste có thể làm tăng nhân tạo tần suất xuất hiện của những lỗi hiếm này bằng cách sao chép chúng từ ảnh này sang ảnh khác, giúp model học tốt hơn các trường hợp ít được đại diện mà không cần thêm mẫu lỗi.
  • Triển khai của Ultralytics: CopyPaste
  • Lưu ý:
    • Như minh họa trong video bên dưới, phép tăng cường copy_paste có thể được dùng để sao chép đối tượng từ ảnh này sang ảnh khác.
    • Sau khi chọn một đối tượng để sao chép, IoA của đối tượng đó được tính với tất cả đối tượng đã có trong ảnh đích, bất kể copy_paste_mode. Đối tượng chỉ được dán nếu mọi giá trị IoA đều thấp hơn 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 trong triển khai hiện tại; mặc định, ngưỡng này được đặt thành 0.3.
Tắt copy_pastecopy_paste bật 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 dùng: Xác định phương thức được dùng cho phép tăng cường Copy-Paste. Nếu đặt thành 'flip', đối tượng được lấy từ cùng ảnh; còn 'mixup' cho phép sao chép đối tượng từ các ảnh khác.
  • Mục đích: Cho phép linh hoạt trong cách tích hợp các đối tượng được sao chép vào ảnh đích.
  • Triển khai của Ultralytics: CopyPaste
  • Lưu ý:
    • Nguyên tắc IoA giống nhau ở cả hai tùy chọn copy_paste_mode, nhưng cách sao chép đối tượng thì khác.
    • Tùy kích thước ảnh, đôi khi đối tượng có thể được sao chép một phần hoặc hoàn toàn ra ngoài khung hình.
    • Tùy chất lượng chú giải polygon, hình dạng của đối tượng được sao chép có thể hơi khác so với bản gốc.
Ảnh tham chiếuẢnh được chọn cho copy_pastecopy_paste bật với copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Các phép tăng cường dành riêng cho phân loại#

Auto Augment (auto_augment)#

  • Tùy chọn: 'randaugment', 'autoaugment', 'augmix', None
  • Mặc định: 'randaugment'
  • Cách dùng: Áp dụng các policy tăng cường tự động cho phân loại. Tùy chọn 'randaugment' sử dụng RandAugment, 'autoaugment' sử dụng AutoAugment và 'augmix' sử dụng AugMix. Đặt thành None để tắt tăng cường tự động.
  • Mục đích: Tự động tối ưu hóa chiến lược tăng cường cho các tác vụ phân loại. Các phương pháp khác nhau như sau:
    • AutoAugment: Chế độ này áp dụng các policy tăng cường được xác định trước và học từ những dataset như ImageNet, CIFAR10 và SVHN. Người dùng có thể chọn các policy có sẵn này nhưng không thể huấn luyện policy mới trong Torchvision. Để tìm ra chiến lược tăng cường tối ưu cho các dataset cụ thể, cần dùng thư viện bên ngoài hoặc triển khai tùy chỉnh. Tham khảo bài báo AutoAugment.
    • RandAugment: Áp dụng ngẫu nhiên các phép biến đổi với cường độ đồng nhất. Phương pháp này giảm nhu cầu thực hiện giai đoạn tìm kiếm quy mô lớn, giúp tiết kiệm tài nguyên tính toán mà vẫn tăng độ bền vững của model. Tham khảo bài báo RandAugment.
    • AugMix: AugMix là phương pháp tăng cường dữ liệu giúp tăng độ bền vững của model bằng cách tạo ra nhiều biến thể ảnh đa dạng thông qua việc kết hợp ngẫu nhiên các phép biến đổi đơn giản. Tham khảo bài báo AugMix.
  • Triển khai của Ultralytics: classify_augmentations()
  • Lưu ý:
    • Về cơ bản, điểm khác biệt chính giữa ba phương pháp là cách xác định và áp dụng các policy tăng cường.
    • Bạn có thể tham khảo bài viết này, trong đó so sánh chi tiết ba phương pháp.

Random Erasing (erasing)#

  • Phạm vi: 0.0 - 1.0
  • Mặc định: 0.4
  • Cách dùng: Xóa ngẫu nhiên một phần ảnh trong quá trình huấn luyện phân loại. Siêu tham số erasing xác định xác suất áp dụng phép biến đổi; 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 bền vững và tránh phụ thuộc quá mức vào các vùng ảnh cụ thể. Ví dụ, trong các hệ thống nhận diện khuôn mặt, Random Erasing giúp model tăng khả năng xử lý tình trạng che khuất một phần như kính râm, khẩu trang hoặc các vật thể khác có thể che một phần đặc trưng khuôn mặt. Điều này cải thiện hiệu suất trong thực tế bằng cách buộc model nhận diện người dựa trên nhiều đặc điểm khuôn mặt thay vì chỉ phụ thuộc vào những đặc trưng nổi bật có thể bị che khuất.
  • Triển khai của Ultralytics: classify_augmentations()
  • Lưu ý:
    • Phép tăng cường erasing có các siêu tham số scale, ratio và value không thể thay đổi trong triển khai hiện tại. Giá trị mặc định của chúng lần lượt là (0.02, 0.33), (0.3, 3.3) và 0, như nêu trong tài liệu của PyTorch.
Tắt erasingerasing bật (ví dụ 1)erasing bật (ví dụ 2)erasing bật (ví dụ 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 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 trong các phép biến đổi Albumentations
  • Mặc định: None
  • Cách dùng: Cho phép cung cấp các phép biến đổi Albumentations tùy chỉnh để tăng cường dữ liệu bằng Python API. Tham số này nhận danh sách các đối tượng phép biến đổi Albumentations, được áp dụng trong quá trình huấn luyện thay cho các phép biến đổi Albumentations mặc định.
  • Mục đích: Cung cấp khả năng kiểm soát chi tiết các chiến lược tăng cường dữ liệu bằng cách tận dụng thư viện phong phú các phép biến đổi Albumentations. Tính năng này đặc biệt hữu ích khi cần các phép tăng cường chuyên biệt ngoài những tùy chọn YOLO tích hợp sẵn, chẳng hạn như biến dạng đàn hồi và méo lưới cho ảnh y tế, phép biến đổi được tinh chỉnh cho góc nhìn từ trên cao và ảnh vệ tinh, thay đổi nhiễu và độ sáng để mô phỏng điều kiện thiếu sáng, hoặc các biến thể kết cấu giống lỗi để kiểm tra công nghiệp.
  • Triển khai của Ultralytics: Albumentations
  • Lưu ý:
    • Việc tạo các đối tượng phép biến đổi cần Python API. Khi lưu checkpoint, Ultralytics tuần tự hóa chúng bằng A.to_dict(), nhờ đó danh sách đã tuần tự hóa có thể được ghi rồi đọc lại thông qua tệp cấu hình YAML hoặc CLI, cho phép resume khôi phục các đối tượng này.
    • Các phép biến đổi tùy chỉnh thay thế hoàn toàn bộ Albumentations mặc định. Mọi phép tăng cường được cấu hình ở nơi khác trên trang này — mosaic, hsv_h, degrees và các phép khác — vẫn hoạt động và được áp dụng độc lập.
    • Các phép biến đổi không gian làm thay đổi hình học ảnh, bao gồm cả những phép biến đổi lồng trong A.OneOf hoặc A.Compose, sẽ dịch chuyển bounding box, polygon, keypoint và mask độ sâu hoặc ngữ nghĩa cùng với ảnh; A.RandomGridShuffle không thể bảo toàn cấu trúc liên kết của polygon hoặc keypoint và sẽ báo lỗi với mẫu phân đoạn, tư thế và OBB.
    • Albumentations cung cấp hơn 70 phép biến đổi; tài liệu Albumentations liệt kê tất cả. Việc thêm nhiều phép biến đổi hoặc các phép biến đổi tốn nhiều tài nguyên tính toán sẽ làm chậm quá trình huấn luyện, vì vậy hãy bắt đầu với một tập nhỏ và theo dõi thời gian mỗi epoch.
    • Áp dụng cho các tác vụ detect, segment, semantic, depth, pose và obb. Không áp dụng cho phân loại vì tác vụ này sử dụng pipeline tăng cường riêng.

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

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

from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.pt")

# Định nghĩa các phép biến đổi Albumentations tùy chỉnh
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.GaussNoise(std_range=(0.0124, 0.0277), p=0.3),
    A.CLAHE(clip_limit=4.0, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]

# Huấn luyện với các phép biến đổi Albumentations tùy chỉnh
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Truyền các phép biến đổi tùy chỉnh
    imgsz=640,
)

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

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

    • Trong hầu hết trường hợp, những thay đổi nhẹ về màu sắc và độ sáng đều có lợi. Các giá trị mặc định của hsv_h, hsv_s và hsv_v là điểm khởi đầu phù hợp.
    • Nếu góc nhìn của camera ổn định và sẽ không thay đổi sau khi triển khai model, có thể bạn không cần các phép biến đổi hình học như degrees (xoay), translate, scale, 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 hết là giữ lại các phép tăng cường này.
    • Chỉ dùng phép tăng cường mosaic nếu chấp nhận được việc các đối tượng bị che khuất một phần hoặc có nhiều đối tượng trong mỗi ảnh, đồng thời điều này không làm thay đổi giá trị nhãn. Ngoài ra, bạn có thể giữ mosaic hoạt động nhưng tăng giá trị close_mosaic để tắt phép này sớm hơn trong quá trình huấn luyện.

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

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

    Bạn có thể tìm danh sách đầy đủ các phép biến đổi được áp dụng trong tài liệu kỹ thuật cũng như hướng dẫn tích hợp Albumentations. Lưu ý rằng chỉ những phép tăng cường có xác suất p lớn hơn 0 mới hoạt động. Các phép này được cố ý áp dụng với tần suất thấp để mô phỏng các hiện tượng hình ảnh trong thực tế, chẳng hạn như hiệu ứng mờ hoặc ảnh xám.

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

  • Kiểm tra xem gói albumentations đã được cài đặt chưa. Nếu chưa, hãy cài đặt:

    pip install albumentations

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

  • Bạn có thể tùy chỉnh các phép tăng cường bằng cách tạo dataset class và trainer tùy chỉnh. Ví dụ, bạn có thể thay thế các phép tăng cường phân loại mặc định của Ultralytics bằng torchvision.transforms.Resize của PyTorch hoặc các phép biến đổi khác. Xem ví dụ huấn luyện tùy chỉnh trong tài liệu phân loại để biết chi tiết triển khai.

Bình luận