Tăng cường dữ liệu sử dụng Ultralytics YOLO#
Giới thiệu#
Tăng cường dữ liệu là một kỹ thuật quan trọng trong thị giác máy tính giúp mở rộng tập dữ liệu huấn luyện của bạn một cách nhân tạo bằng cách áp dụng các phép biến đổi khác nhau lên các hình ảnh hiện có. Khi huấn luyện các mô hình học sâu như Ultralytics YOLO, tăng cường dữ liệu giúp cải thiện tính mạnh mẽ của mô hình, giảm hiện tượng quá khớp (overfitting) và nâng cao khả năng tổng quát hóa đối với các tình huống thực tế.
Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀
Tại sao Tăng cường dữ liệu lại quan trọng#
Tăng cường dữ liệu phục vụ nhiều mục đích thiết yếu trong việc huấn luyện các mô hình thị giác máy tính:
- Mở rộng tập dữ liệu: Bằng cách tạo ra các biến thể của hình ảnh hiện có, bạn có thể tăng hiệu quả quy mô tập dữ liệu huấn luyện mà không cần thu thập thêm dữ liệu mới.
- Cải thiện khả năng tổng quát hóa: Mô hình học cách nhận diện đối tượng trong các điều kiện khác nhau, giúp chúng trở nên ổn định hơn trong các ứng dụng thực tế.
- Giảm quá khớp (overfitting): Bằng cách đưa sự biến đổi vào dữ liệu huấn luyện, mô hình ít có khả năng ghi nhớ các đặc điểm hình ảnh cụ thể.
- Hiệu suất được cải thiện: Các mô hình được huấn luyện với các kỹ thuật tăng cường phù hợp thường đạt được độ chính xác tốt hơn trên các tập dữ liệu xác thực và kiểm thử.
Phần cài đặt của Ultralytics YOLO cung cấp một bộ công cụ tăng cường dữ liệu toàn diện, mỗi kỹ thuật phục vụ các mục đích cụ thể và đóng góp vào hiệu suất của model theo những cách khác nhau. Hướng dẫn này khám phá các cài đặt tăng cường dưới đây, giúp bạn hiểu khi nào và cách sử dụng chúng hiệu quả trong các dự án của mình.
Ví dụ Cấu hình#
Bạn có thể tùy chỉnh từng tham số bằng Python API, giao diện dòng lệnh (CLI) hoặc file cấu hình. Dưới đây là các ví dụ về cách thiết lập tăng cường dữ liệu theo từng phương pháp.
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)Các phép biến đổi được liệt kê trên trang này là những thứ bạn kiểm soát thông qua các tham số huấn luyện. Ultralytics cũng áp dụng một tập Albumentations nhỏ — độ mờ, độ mờ trung vị, thang độ xám và CLAHE, mỗi loại ở mức p=0.01 — bất cứ khi nào gói albumentations được cài đặt và không có tham số nào trong default.yaml tắt nó đi. Gỡ cài đặt gói để loại bỏ nó, hoặc truyền danh sách của riêng bạn vào augmentations để thay thế nó.
Sử dụng một file cấu hình#
Bạn có thể định nghĩa tất cả các tham số huấn luyện, bao gồm cả các phép tăng cường, trong một tệp cấu hình YAML (ví dụ: train_custom.yaml). Tham số mode chỉ bắt buộc khi sử dụng CLI. Tệp YAML mới này sau đó sẽ ghi đè lên tệp mặc định nằm trong gói ultralytics.
# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5Sau đó, khởi chạy huấn luyện với Python API:
from ultralytics import YOLO
# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Train the model with custom configuration
model.train(cfg="train_custom.yaml")Tăng cường không gian màu#
Điều chỉnh sắc độ (Hue) (hsv_h)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.015 - Cách sử dụng: Thay đổi màu sắc của ảnh trong khi vẫn bảo toàn mối quan hệ giữa chúng. Siêu tham số
hsv_hxác định độ lớn của sự dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-hsv_hđếnhsv_h. Ví dụ, vớihsv_h=0.3, độ dịch chuyển được chọn ngẫu nhiên trong phạm vi từ-0.3đến0.3. Đối với các giá trị lớn hơn0.5, độ dịch chuyển sắc độ sẽ quay vòng quanh bánh xe màu, đó là lý do tại sao các phép tăng cường trông giống nhau giữa0.5và-0.5. - Mục đích: Đặc biệt hữu ích cho các tình huống ngoài trời nơi điều kiện ánh sáng có thể ảnh hưởng đáng kể đến diện mạo đối tượng. Ví dụ, một quả chuối có thể trông vàng hơn dưới ánh nắng chói chang nhưng lại hơi xanh hơn khi ở trong nhà.
- Triển khai của Ultralytics: RandomHSV
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Điều chỉnh độ bão hòa (Saturation) (hsv_s)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.7 - Cách sử dụng: Sửa đổi cường độ màu sắc trong ảnh. Siêu tham số
hsv_sxác định độ lớn dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-hsv_sđếnhsv_s. Ví dụ, vớihsv_s=0.7, cường độ được chọn ngẫu nhiên trong phạm vi từ-0.7đến0.7. - Mục đích: Giúp các mô hình xử lý các điều kiện thời tiết và cài đặt camera khác nhau. Ví dụ, biển báo giao thông màu đỏ có thể trông rất sống động vào một ngày nắng nhưng lại trông xỉn màu và nhạt nhòa trong điều kiện sương mù.
- Triển khai của Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Điều chỉnh độ sáng (Brightness) (hsv_v)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.4 - Cách sử dụng: Thay đổi độ sáng của ảnh. Siêu tham số
hsv_vxác định độ lớn dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên trong khoảng từ-hsv_vđếnhsv_v. Ví dụ, vớihsv_v=0.4, cường độ được chọn ngẫu nhiên trong phạm vi từ-0.4đến0.4. - Mục đích: Cần thiết để huấn luyện các mô hình cần hoạt động trong các điều kiện ánh sáng khác nhau. Ví dụ, một quả táo đỏ có thể trông sáng dưới ánh mặt trời nhưng tối hơn nhiều trong bóng râm.
- Triển khai của Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Biến đổi hình học#
Xoay ảnh (Rotation) (degrees)#
- Phạm vi:
0.0đến180 - Mặc định:
0 - Cách sử dụng: Xoay ảnh ngẫu nhiên trong phạm vi đã chỉ định. Siêu tham số
degreesxá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đếndegrees. Ví dụ, vớidegrees=10.0, góc xoay được chọn ngẫu nhiên trong phạm vi từ-10.0đến10.0. - Mục đích: Rất quan trọng cho các ứng dụng nơi các đối tượng có thể xuất hiện ở các hướng khác nhau. Ví dụ, trong ảnh chụp từ flycam, các phương tiện có thể được định hướng theo bất kỳ hướng nào, đòi hỏi mô hình phải nhận diện được đối tượng bất kể góc xoay của chúng.
- Triển khai của Ultralytics: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Dịch chuyển (Translation) (translate)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.1 - Cách sử dụng: Dịch chuyển ảnh theo chiều ngang và chiều dọc một khoảng ngẫu nhiên bằng một phần kích thước của ảnh. Siêu tham số
translatexác định độ lớn dịch chuyển, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên hai lần (mỗi lần cho một trục) trong phạm vi-translatevàtranslate. Ví dụ, vớitranslate=0.5, phép dịch chuyển được chọn ngẫu nhiên trong khoảng từ-0.5đến0.5trên trục x, và một giá trị ngẫu nhiên độc lập khác được chọn trong cùng phạm vi trên trục y. - Mục đích: Giúp các mô hình học cách phát hiện các đối tượng hiển thị một phần và cải thiện độ ổn định đối với vị trí đối tượng. Ví dụ, trong các ứng dụng đánh giá thiệt hại phương tiện, các bộ phận của xe có thể xuất hiện đầy đủ hoặc một phần trong khung hình tùy thuộc vào vị trí và khoảng cách của nhiếp ảnh gia, tăng cường dịch chuyển sẽ dạy mô hình nhận diện các đặc điểm này bất kể mức độ đầy đủ hay vị trí của chúng.
- Triển khai của Ultralytics: RandomPerspective
- Lưu ý: Để đơn giản, các phép dịch chuyển được áp dụng bên dưới là giống nhau mỗi lần cho cả hai trục
xvày. Các giá trị-1.0và1.0không được hiển thị vì chúng sẽ dịch chuyển ảnh ra khỏi khung hình hoàn toàn.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Phóng to/Thu nhỏ (Scale) (scale)#
- Phạm vi:
0.0-1.0dưới dạng số thực (float), hoặc một tuple(min, max)tường minh - Mặc định:
0.5 - Cách sử dụng: Thay đổi kích thước ảnh theo một hệ số ngẫu nhiên trong phạm vi được chỉ định. Dưới dạng số thực, siêu tham số
scalexác định hệ số phóng đại, với hệ số cuối cùng được chọn ngẫu nhiên giữa1-scalevà1+scale. Ví dụ, vớiscale=0.5, hệ số phóng đại được chọn ngẫu nhiên trong khoảng từ0.5đến1.5. Dưới dạng một tuple,scalethiết lập trực tiếp phạm vi đó, vì vậyscale=(0.5, 2.0)lấy mẫu hệ số giữa0.5và2.0. - Mục đích: Cho phép các mô hình xử lý đối tượng ở các khoảng cách và kích thước khác nhau. Ví dụ, trong các ứng dụng lái xe tự động, các phương tiện có thể xuất hiện ở các khoảng cách khác nhau so với camera, đòi hỏi mô hình phải nhận diện chúng bất kể kích thước nào.
- Triển khai của Ultralytics: RandomPerspective
- Lưu ý:
- Giá trị
-1.0không được hiển thị vì nó sẽ làm cho ảnh biến mất, trong khi1.0đơn giản là dẫn đến việc phóng to gấp 2 lần. - Các giá trị hiển thị trong bảng dưới đây là các độ lệch tỷ lệ thực tế, không phải các giá trị bạn truyền cho siêu tham số
scale. - Dạng số thực được kiểm tra hợp lệ theo phạm vi
0.0-1.0, và một giá trị nằm ngoài phạm vi đó sẽ tạo ra một ngoại lệValueError. Để lấy mẫu một hệ số vượt quá mức thu phóng 2x, hãy truyền dạng tuple(min, max)thay thế. - Dạng tuple chỉ áp dụng cho các tác vụ hình học. Quá trình huấn luyện phân loại tự động suy ra phạm vi cắt của riêng nó từ dạng số thực (
1.0 - scaleđến1.0), do đó việc truyền tuple vào đó sẽ tạo ra một ngoại lệTypeError.
- Giá trị
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Biến dạng xiên (Shear) (shear)#
- Phạm vi:
-180đến+180 - Mặc định:
0 - Cách sử dụng: Giới thiệu một phép biến đổi hình học làm nghiêng ảnh dọc theo cả trục x và trục y, dịch chuyển hiệu quả các phần của ảnh theo một hướng trong khi vẫn duy trì các đường song song. Siêu tham số
shearxác định góc xiên, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên giữa-shearvàshear. Ví dụ, vớishear=10.0, độ xiên được chọn ngẫu nhiên trong khoảng từ-10đến10trên trục x, và một giá trị ngẫu nhiên độc lập khác được chọn trong cùng phạm vi trên trục y. - Mục đích: Giúp các mô hình tổng quát hóa tốt hơn với các biến thể về góc nhìn do các góc nghiêng nhẹ hoặc góc nhìn xiên. Ví dụ, trong giám sát giao thông, các đối tượng như xe hơi và biển báo đường bộ có thể trông bị nghiêng do cách lắp đặt camera không vuông góc. Áp dụng tăng cường shear đảm bảo mô hình học được cách nhận diện đối tượng bất chấp những biến dạng lệch này.
- Triển khai của Ultralytics: RandomPerspective
- Lưu ý:
- Các giá trị
shearcó thể làm biến dạng ảnh một cách nhanh chóng, vì vậy bạn nên bắt đầu với các giá trị nhỏ và tăng dần chúng. - Không giống như các phép biến đổi phối cảnh, shear không tạo ra chiều sâu hoặc điểm tụ mà thay vào đó làm biến dạng hình dạng của đối tượng bằng cách thay đổi các góc trong khi vẫn giữ các cạnh đối diện song song.
- Các giá trị
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Phối cảnh (Perspective) (perspective)#
- Phạm vi:
0.0-0.001 - Mặc định:
0 - Cách sử dụng: Áp dụng phép biến đổi phối cảnh toàn diện dọc theo cả trục x và trục y, mô phỏng cách các vật thể xuất hiện khi nhìn từ các độ sâu hoặc góc độ khác nhau. Siêu tham số
perspectivexác định độ lớn phối cảnh, với mức điều chỉnh cuối cùng được chọn ngẫu nhiên giữa-perspectivevàperspective. Ví dụ, vớiperspective=0.001, phối cảnh được chọn ngẫu nhiên trong khoảng từ-0.001đến0.001trên trục x, và một giá trị ngẫu nhiên độc lập khác được chọn trong cùng phạm vi trên trục y. - Mục đích: Phép tăng cường dữ liệu phối cảnh là rất quan trọng để xử lý các thay đổi góc nhìn cực đoan, đặc biệt trong các tình huống mà đối tượng xuất hiện bị rút ngắn hoặc biến dạng do thay đổi phối cảnh. Ví dụ, trong hệ thống phát hiện đối tượng bằng máy bay không người lái (drone), các tòa nhà, đường sá và phương tiện có thể trông bị kéo dài hoặc nén lại tùy thuộc vào độ nghiêng và độ cao của drone. Bằng cách áp dụng các phép biến đổi phối cảnh, các model học được cách nhận diện đối tượng bất chấp những biến dạng do phối cảnh gây ra, từ đó cải thiện tính mạnh mẽ của chúng trong các triển khai thực tế.
- Triển khai của Ultralytics: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Lật dọc (Flip Up-Down) (flipud)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách sử dụng: Thực hiện lật dọc bằng cách đảo ngược ảnh dọc theo trục y. Phép biến đổi này phản chiếu toàn bộ bức ảnh lộn ngược nhưng vẫn bảo toàn tất cả các mối quan hệ không gian giữa các vật thể. Siêu tham số flipud xác định xác suất áp dụng phép biến đổi, với giá trị
flipud=1.0đảm bảo rằng tất cả các ảnh đều bị lật và giá trịflipud=0.0vô hiệu hóa hoàn toàn phép biến đổi. Ví dụ, vớiflipud=0.5, mỗi ảnh có 50% cơ hội bị lộn ngược. - Mục đích: Hữu ích cho các tình huống mà đối tượng có thể xuất hiện ngược đầu. Ví dụ, trong các hệ thống thị giác robot, các đối tượng trên băng chuyền hoặc cánh tay robot có thể được gắp và đặt ở nhiều hướng khác nhau. Lật dọc giúp model nhận diện đối tượng bất kể vị trí trên dưới của chúng.
- Triển khai của Ultralytics: RandomFlip
flipud tắt | flipud bật |
|---|---|
![]() | ![]() |
Lật ngang (Flip Left-Right) (fliplr)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.5 - Cách sử dụng: Thực hiện lật ngang bằng cách phản chiếu ảnh dọc theo trục x. Phép biến đổi này hoán đổi hai bên trái và phải trong khi vẫn duy trì tính nhất quán về mặt không gian, giúp mô hình tổng quát hóa tốt hơn đối với các vật thể xuất hiện ở các hướng bị phản chiếu. Siêu tham số
fliplrxác định xác suất áp dụng phép biến đổi, với giá trịfliplr=1.0đảm bảo tất cả ảnh đều bị lật và giá trịfliplr=0.0tắt hoàn toàn phép biến đổi. Ví dụ, vớifliplr=0.5, mỗi ảnh có 50% cơ hội bị lật từ trái sang phải. - Mục đích: Lật ngang được sử dụng rộng rãi trong phát hiện đối tượng, ước tính tư thế và nhận diện khuôn mặt để cải thiện khả năng chống chịu đối với các biến thể trái-phải. Ví dụ, trong lái xe tự động, phương tiện và người đi bộ có thể xuất hiện ở bất kỳ bên nào của đường, và lật ngang giúp model nhận diện chúng tốt như nhau ở cả hai hướng.
- Triển khai của Ultralytics: RandomFlip
fliplr tắt | fliplr bật |
|---|---|
![]() | ![]() |
Hoán đổi kênh BGR (bgr)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách sử dụng: Hoán đổi các kênh màu của ảnh từ RGB sang BGR, thay đổi thứ tự biểu diễn các màu. Siêu tham số
bgrxác định xác suất áp dụng phép biến đổi, vớibgr=1.0đảm bảo tất cả các ảnh đều trải qua quá trình hoán đổi kênh vàbgr=0.0tắt tính năng này. Ví dụ, vớibgr=0.5, mỗi ảnh có 50% cơ hội được chuyển đổi từ RGB sang BGR. - Mục đích: Tăng cường khả năng chống chịu đối với các thứ tự kênh màu khác nhau. Ví dụ, khi huấn luyện các model phải hoạt động trên nhiều hệ thống camera và thư viện hình ảnh nơi định dạng RGB và BGR có thể được sử dụng không nhất quán, hoặc khi triển khai các model vào môi trường mà định dạng màu đầu vào có thể khác với dữ liệu huấn luyện.
- Triển khai của Ultralytics: Format
bgr tắt | bgr bật |
|---|---|
![]() | ![]() |
Mosaic (mosaic)#
- Phạm vi:
0.0-1.0 - Mặc định:
1 - Cách sử dụng: Kết hợp bốn ảnh huấn luyện thành một. Siêu tham số
mosaicxác định xác suất áp dụng phép biến đổi, vớimosaic=1.0đảm bảo rằng tất cả các ảnh được kết hợp vàmosaic=0.0vô hiệu hóa phép biến đổi. Ví dụ, vớimosaic=0.5, mỗi ảnh có 50% cơ hội được kết hợp với ba ảnh khác. - Mục đích: Rất hiệu quả để cải thiện khả năng phát hiện đối tượng nhỏ và hiểu ngữ cảnh. Ví dụ, trong các dự án bảo tồn động vật hoang dã nơi động vật có thể xuất hiện ở các khoảng cách và tỷ lệ khác nhau, tăng cường Mosaic giúp model học cách nhận diện cùng một loài qua các kích thước khác nhau, các phần bị che khuất và các ngữ cảnh môi trường khác nhau bằng cách tạo ra các mẫu huấn luyện đa dạng một cách nhân tạo từ dữ liệu hạn chế.
- Triển khai của Ultralytics: Mosaic
- Lưu ý:
- Ngay cả khi phép tăng cường
mosaicgiúp mô hình mạnh mẽ hơn, nó cũng có thể làm cho quá trình huấn luyện trở nên thách thức hơn. - Phép tăng cường
mosaiccó thể được tắt gần cuối quá trình huấn luyện bằng cách đặtclose_mosaicthành số lượng epochs trước khi hoàn thành mà tại đó nó nên được tắt. Ví dụ, nếuepochsđược đặt thành200vàclose_mosaicđược đặt thành20, phép tăng cườngmosaicsẽ bị vô hiệu hóa sau180epochs. Nếuclose_mosaicđược đặt thành0, phép tăng cườngmosaicsẽ được bật trong toàn bộ quá trình huấn luyện. - Việc đóng mosaic cũng đồng thời vô hiệu hóa
copy_paste,mixup, vàcutmixtại cùng một epoch. Bốn tính năng này được tắt cùng nhau, do đó các epoch cuối cùng được huấn luyện mà không có chúng trong khi mọi kỹ thuật tăng cường khác — các phép biến đổi hình học, HSV, lật và Albumentations — vẫn tiếp tục chạy. Lưu ý rằngcopy_pasteở chế độ mặc địnhfliphoạt động trong phạm vi một ảnh đơn thay vì kết hợp nhiều ảnh. - Tâm của mosaic được tạo ra được xác định bằng các giá trị ngẫu nhiên, và có thể nằm bên trong ảnh hoặc bên ngoài ảnh.
- Phiên bản hiện tại của phép tăng cường
mosaickết hợp ảnh hiện tại với 3 ảnh khác, được lấy từ bộ đệm các ảnh được tải gần đây, hoặc từ bất kỳ đâu trong dataset khicache='ram'. Dù theo cách nào thì chúng cũng được lấy mẫu có hoàn lại, vì vậy cùng một ảnh có thể xuất hiện nhiều hơn một lần trong một mosaic duy nhất.
- Ngay cả khi phép tăng cường
mosaic tắt | mosaic bật |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách sử dụng: Trộn lẫn hai ảnh và nhãn của chúng với xác suất cho trước. Siêu tham số
mixupxác định xác suất áp dụng phép biến đổi, vớimixup=1.0đảm bảo rằng tất cả các ảnh đều được trộn vàmixup=0.0vô hiệu hóa phép biến đổi. Ví dụ, vớimixup=0.5, mỗi ảnh có 50% cơ hội được trộn với một ảnh khác. - Mục đích: Cải thiện độ mạnh mẽ của model và giảm tình trạng quá khớp (overfitting). Ví dụ, trong các hệ thống nhận diện sản phẩm bán lẻ, Mixup giúp model học được các đặc trưng mạnh mẽ hơn bằng cách pha trộn các hình ảnh của các sản phẩm khác nhau, dạy cho nó cách xác định các mặt hàng ngay cả khi chúng bị che khuất một phần hoặc bởi các sản phẩm khác trên kệ hàng đông đúc.
- Triển khai của Ultralytics: Mixup
- Lưu ý:
- Tỉ lệ
mixuplà một giá trị ngẫu nhiên được chọn từ phân phối betanp.random.beta(32.0, 32.0), có nghĩa là mỗi ảnh đóng góp khoảng 50%, với một số biến động nhỏ.
- Tỉ lệ
Ảnh đầu tiên, mixup tắt | Ảnh thứ hai, mixup tắt | mixup bật |
|---|---|---|
![]() | ![]() | ![]() |
CutMix (cutmix)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách sử dụng: Cắt một vùng hình chữ nhật từ một ảnh và dán nó lên ảnh khác với xác suất cho trước. Siêu tham số
cutmixxác định xác suất áp dụng phép biến đổi, vớicutmix=1.0đảm bảo rằng tất cả các ảnh đều trải qua phép biến đổi này vàcutmix=0.0vô hiệu hóa hoàn toàn nó. Ví dụ, vớicutmix=0.5, mỗi ảnh có 50% cơ hội bị thay thế một vùng bằng một bản vá từ ảnh khác. - Mục đích: Nâng cao hiệu suất model bằng cách tạo ra các tình huống che khuất thực tế trong khi vẫn duy trì tính toàn vẹn của các đặc trưng cục bộ. Ví dụ, trong các hệ thống lái xe tự động, CutMix giúp model học cách nhận diện phương tiện hoặc người đi bộ ngay cả khi chúng bị che khuất một phần bởi các đối tượng khác, cải thiện độ chính xác phát hiện trong các môi trường thực tế phức tạp với các đối tượng chồng lấp.
- Triển khai của Ultralytics: CutMix
- Lưu ý:
- Kích thước và vị trí của vùng cắt được xác định ngẫu nhiên cho mỗi lần áp dụng.
- Không giống như mixup pha trộn giá trị pixel trên toàn cục,
cutmixduy trì cường độ pixel ban đầu trong các vùng bị cắt, giữ nguyên các đặc trưng cục bộ. - Một vùng chỉ được dán vào ảnh mục tiêu nếu nó không chồng chéo với bất kỳ bounding box nào hiện có. Ngoài ra, chỉ những bounding box giữ lại đủ diện tích ban đầu của chúng trong vùng được dán mới được giữ lại.
- Ngưỡng diện tích bounding box tối thiểu này không thể thay đổi với phiên bản hiện tại. Nó là
0.1(10%) đối với nhãn phát hiện và0.01(1%) khi các nhãn mang theo các phân đoạn (segments).
Ảnh đầu tiên, cutmix tắt | Ảnh thứ hai, cutmix tắt | cutmix bật |
|---|---|---|
![]() | ![]() | ![]() |
Tăng cường đặc thù cho Segmentation#
Copy-Paste (copy_paste)#
- Phạm vi:
0.0-1.0 - Mặc định:
0 - Cách sử dụng: Chỉ hoạt động cho các tác vụ segmentation, phép tăng cường này sao chép các đối tượng trong hoặc giữa các hình ảnh, được điều khiển bởi
copy_paste_mode. Ở chế độflip,copy_pastelà tỷ lệ các đối tượng đủ điều kiện được sao chép: một hình ảnh có sáu đối tượng đủ điều kiện sẽ có thêm ba bản sao ở mứccopy_paste=0.5. Ở chế độmixup, giá trị tương tự cũng điều khiển xác suất chạy copy-paste.copy_paste=0.0vô hiệu hóa phép biến đổi này. - Mục đích: Đặc biệt hữu ích cho các tác vụ phân đoạn cá thể (instance segmentation) và các lớp đối tượng hiếm. Ví dụ, trong phát hiện lỗi công nghiệp nơi một số loại lỗi xuất hiện không thường xuyên, tăng cường Copy-Paste có thể làm tăng tần suất xuất hiện của các lỗi hiếm này một cách nhân tạo bằng cách sao chép chúng từ ảnh này sang ảnh khác, giúp model học tốt hơn các trường hợp ít được đại diện này mà không yêu cầu thêm các mẫu lỗi.
- Triển khai của Ultralytics: CopyPaste
- Lưu ý:
- Như được minh họa trong video dưới đây, phương pháp tăng cường
copy_pastecó thể được sử dụng để sao chép các đối tượng từ ảnh này sang ảnh khác. - Khi một vật thể đã được chọn để sao chép, chỉ số IoA của nó được tính toán với tất cả các vật thể đã có sẵn trong ảnh mục tiêu, bất kể
copy_paste_mode. Vật thể chỉ được dán nếu tất cả các giá trị IoA đều nhỏ hơn0.3(30%); nó sẽ không được dán nếu có bất kỳ giá trị IoA nào từ0.3trở lên. - Ngưỡng IoA không thể thay đổi trong bản triển khai hiện tại và được đặt thành
0.3theo mặc định.
- Như được minh họa trong video dưới đây, phương pháp tăng cường
copy_paste tắt | copy_paste bật với copy_paste_mode=flip | Trực quan hóa quá trình copy_paste |
|---|---|---|
![]() | ![]() |
Chế độ Copy-Paste (copy_paste_mode)#
- Tùy chọn:
'flip','mixup' - Mặc định:
'flip' - Cách sử dụng: Xác định phương pháp được sử dụng cho phép tăng cường copy-paste. Nếu được đặt thành
'flip', các vật thể đến từ cùng một ảnh, trong khi'mixup'cho phép các vật thể được sao chép từ các ảnh khác nhau. - Mục đích: Cho phép sự linh hoạt trong cách tích hợp các đối tượng đã sao chép vào ảnh mục tiêu.
- Triển khai của Ultralytics: CopyPaste
- Lưu ý:
- Nguyên tắc IoA là giống nhau đối với cả hai tùy chọn
copy_paste_mode, nhưng cách các vật thể được sao chép thì khác nhau. - Tùy thuộc vào kích thước ảnh, các đối tượng đôi khi có thể được sao chép một phần hoặc hoàn toàn ra ngoài khung hình.
- Tùy thuộc vào chất lượng của chú thích đa giác (polygon), các đối tượng được sao chép có thể có những biến đổi nhỏ về hình dạng so với các đối tượng gốc.
- Nguyên tắc IoA là giống nhau đối với cả hai tùy chọn
| Ảnh tham chiếu | Ảnh được chọn cho copy_paste | copy_paste bật với copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Tăng cường đặc thù cho Classification#
Auto Augment (auto_augment)#
- Tùy chọn:
'randaugment','autoaugment','augmix',None - Mặc định:
'randaugment' - Cách sử dụng: Áp dụng các chính sách tăng cường tự động cho việc phân loại. Tùy chọn
'randaugment'sử dụng RandAugment,'autoaugment'sử dụng AutoAugment và'augmix'sử dụng AugMix. Đặt thànhNonesẽ vô hiệu hóa việc tăng cường tự động. - Mục đích: Tối ưu hóa các chiến lược tăng cường dữ liệu tự động cho các tác vụ phân loại. Sự khác biệt cụ thể như sau:
- AutoAugment: Chế độ này áp dụng các chính sách tăng cường được định nghĩa trước học được từ các tập dữ liệu như ImageNet, CIFAR10 và SVHN. Người dùng có thể chọn các chính sách hiện có này nhưng không thể huấn luyện các chính sách mới trong Torchvision. Để khám phá các chiến lược tăng cường tối ưu cho các tập dữ liệu cụ thể, các thư viện bên ngoài hoặc các giải pháp tùy chỉnh sẽ là cần thiết. Tham khảo bài báo AutoAugment.
- RandAugment: Áp dụng một tập hợp các phép biến đổi ngẫu nhiên với độ lớn đồng đều. Cách tiếp cận này làm giảm nhu cầu tìm kiếm mở rộng, giúp tối ưu hóa hiệu quả tính toán hơn trong khi vẫn nâng cao tính mạnh mẽ của mô hình. Tham khảo bài báo RandAugment.
- AugMix: AugMix là một phương pháp tăng cường dữ liệu giúp cải thiện độ mạnh mẽ của mô hình bằng cách tạo ra các biến thể hình ảnh đa dạng thông qua sự kết hợp ngẫu nhiên các phép biến đổi đơn giản. Tham khảo bài báo AugMix.
- Triển khai của Ultralytics: classify_augmentations()
- Lưu ý:
- Về cơ bản, sự khác biệt chính giữa ba phương pháp là cách các chính sách tăng cường được định nghĩa và áp dụng.
- Bạn có thể tham khảo bài viết này so sánh chi tiết ba phương pháp trên.
Xóa ngẫu nhiên (Random Erasing) (erasing)#
- Phạm vi:
0.0-1.0 - Mặc định:
0.4 - Cách sử dụng: Xóa ngẫu nhiên các phần của ảnh trong quá trình huấn luyện phân loại. Siêu tham số
erasingxác định xác suất áp dụng phép biến đổi, vớierasing=1.0xóa một vùng trong mọi ảnh vàerasing=0.0vô hiệu hóa phép biến đổi. Ví dụ, vớierasing=0.5, mỗi ảnh có 50% cơ hội bị xóa một phần. - Mục đích: Giúp mô hình học các đặc trưng bền vững và ngăn ngừa việc quá phụ thuộc vào các vùng hình ảnh cụ thể. Ví dụ, trong các hệ thống nhận diện khuôn mặt, xóa ngẫu nhiên giúp mô hình trở nên bền vững hơn với các vật cản một phần như kính mát, khẩu trang hoặc các vật thể khác có thể che khuất các đặc điểm trên khuôn mặt. Điều này cải thiện hiệu suất thực tế bằng cách buộc mô hình nhận diện cá nhân dựa trên nhiều đặc điểm khuôn mặt thay vì chỉ phụ thuộc vào các đặc điểm nổi bật dễ bị che khuất.
- Triển khai của Ultralytics: classify_augmentations()
- Lưu ý:
- Phép tăng cường
erasingđi kèm với các siêu tham sốscale,ratiovàvaluekhông thể thay đổi bằng bản triển khai hiện tại. Giá trị mặc định của chúng lần lượt là(0.02, 0.33),(0.3, 3.3)và0, như đã nêu trong tài liệu của PyTorch.
- Phép tăng cường
erasing tắt | erasing bật (ví dụ 1) | erasing bật (ví dụ 2) | erasing bật (ví dụ 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Các tính năng tăng cường nâng cao#
Các phép biến đổi Albumentations tùy chỉnh (augmentations)#
- Loại:
listcủa các phép biến đổi Albumentations - Mặc định:
None - Cách sử dụng: Cho phép bạn cung cấp các phép biến đổi Albumentations tùy chỉnh để tăng cường dữ liệu bằng cách sử dụng Python API. Tham số này nhận một danh sách các đối tượng biến đổi Albumentations sẽ được áp dụng trong quá trình huấn luyện thay cho các phép biến đổi Albumentations mặc định.
- Mục đích: Cung cấp quyền kiểm soát chi tiết đối với các chiến lược tăng cường dữ liệu bằng cách tận dụng thư viện phong phú các phép biến đổi của Albumentations. Điều này cực kỳ hữu ích khi bạn cần các phép tăng cường chuyên specialized vượt ra ngoài các tùy chọn YOLO tích hợp sẵn, chẳng hạn như biến dạng đàn hồi và biến dạng lưới cho hình ảnh y tế, các phép biến đổi được tinh chỉnh cho góc nhìn trên không và vệ tinh, dịch chuyển nhiễu và độ sáng mô phỏng điều kiện ánh sáng yếu, hoặc các biến thể kết cấu giống như lỗi để kiểm tra công nghiệp.
- Triển khai của Ultralytics: Albumentations
- Lưu ý:
- Việc xây dựng các đối tượng biến đổi yêu cầu API Python. Ultralytics tuần tự hóa chúng bằng
A.to_dict()khi lưu checkpoint, do đó một danh sách đã được tuần tự hóa có thể khứ hồi qua tệp cấu hình YAML hoặc CLI, đây là tính năng cho phépresumekhôi phục chúng. - Các phép biến đổi tùy chỉnh thay thế hoàn toàn tập Albumentations mặc định. Mọi phép tăng cường được cấu hình ở nơi khác trên trang này —
mosaic,hsv_h,degrees, và các phần còn lại — vẫn hoạt động và được áp dụng một cách độc lập. - Hãy thận trọng với các phép biến đổi không gian làm thay đổi hình học ảnh. Ultralytics tự động điều chỉnh bounding box, nhưng một số phép biến đổi phức tạp có thể yêu cầu cấu hình bổ sung.
- Albumentations cung cấp hơn 70 phép biến đổi; tài liệu Albumentations liệt kê tất cả chúng. Việc thêm nhiều phép biến đổi, hoặc những phép tốn kém về mặt tính toán, sẽ làm chậm quá trình huấn luyện, vì vậy hãy bắt đầu với một tập nhỏ và theo dõi thời gian của mỗi epoch.
- Áp dụng cho các tác vụ
detect,segment,semantic,depth,pose, vàobb. Phân loại được loại trừ, vì nó sử dụng một pipeline tăng cường riêng biệt.
- Việc xây dựng các đối tượng biến đổi yêu cầu API Python. Ultralytics tuần tự hóa chúng bằng
Các ví dụ dưới đây yêu cầu Albumentations 1.4.22 trở lên, và do đó cần Python 3.9 trở lên.
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Define custom Albumentations transforms
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.GaussNoise(std_range=(0.0124, 0.0277), p=0.3),
A.CLAHE(clip_limit=4.0, p=0.5),
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]
# Train with custom Albumentations transforms
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Pass custom transforms
imgsz=640,
)Câu hỏi thường gặp#
Việc lựa chọn các phép tăng cường phù hợp phụ thuộc vào trường hợp sử dụng cụ thể và tập dữ liệu của bạn. Dưới đây là một vài hướng dẫn chung để giúp bạn quyết định:
- Trong hầu hết các trường hợp, sự biến động nhẹ về màu sắc và độ sáng là có lợi. Các giá trị mặc định cho
hsv_h,hsv_svàhsv_vlà một điểm khởi đầu vững chắc. - Nếu góc nhìn của camera là cố định và sẽ không thay đổi sau khi mô hình được triển khai, bạn có thể bỏ qua các phép biến đổi hình học như
rotation,translation,scale,shearhoặcperspective. Tuy nhiên, nếu góc máy có thể thay đổi và bạn cần mô hình mạnh mẽ hơn, tốt hơn hết là giữ lại các phép tăng cường này. - Chỉ sử dụng phép tăng cường
mosaicnếu việc có các vật thể bị che khuất một phần hoặc nhiều vật thể trong một ảnh là chấp nhận được và không làm thay đổi giá trị nhãn. Ngoài ra, bạn có thể giữmosaichoạt động nhưng tăng giá trịclose_mosaicđể vô hiệu hóa nó sớm hơn trong quá trình huấn luyện.
Tóm lại: hãy giữ mọi thứ đơn giản. Bắt đầu với một tập hợp các phép tăng cường nhỏ và dần dần thêm nhiều hơn khi cần. Mục tiêu là cải thiện khả năng tổng quát và độ bền vững của mô hình, không phải làm phức tạp hóa quá trình huấn luyện. Ngoài ra, hãy đảm bảo các phép tăng cường bạn áp dụng phản ánh phân phối dữ liệu mà mô hình của bạn sẽ gặp phải trong môi trường thực tế.
- Trong hầu hết các trường hợp, sự biến động nhẹ về màu sắc và độ sáng là có lợi. Các giá trị mặc định cho
Nếu gói
albumentationsđược cài đặt, Ultralytics sẽ tự động áp dụng một tập hợp các phép tăng cường hình ảnh bổ sung bằng cách sử dụng nó. Các phép tăng cường này được xử lý nội bộ và không yêu cầu cấu hình bổ sung nào.Bạn có thể tìm thấy toàn bộ danh sách các phép biến đổi được áp dụng trong tài liệu kỹ thuật của chúng tôi, cũng như trong hướng dẫn tích hợp Albumentations. Lưu ý rằng chỉ những phép tăng cường có xác suất
plớn hơn0mới hoạt động. Chúng được cố ý áp dụng ở tần suất thấp để mô phỏng các hiện tượng giả tạo trực quan trong thế giới thực, chẳng hạn như hiệu ứng mờ hoặc ảnh xám.Bạn cũng có thể cung cấp các phép biến đổi Albumentations tùy chỉnh của riêng mình bằng cách sử dụng Python API. Xem phần Tính năng tăng cường nâng cao để biết thêm chi tiết.
Kiểm tra xem gói
albumentationsđã được cài đặt chưa. Nếu chưa, hãy cài đặt nó:pip install albumentationsSau khi cài đặt, gói này sẽ được tự động phát hiện và sử dụng bởi Ultralytics.
Bạn có thể tùy chỉnh các phép tăng cường bằng cách tạo một lớp tập dữ liệu và trình huấn luyện tùy chỉnh. Ví dụ, bạn có thể thay thế các phép tăng cường phân loại mặc định của Ultralytics bằng torchvision.transforms.Resize của PyTorch hoặc các phép biến đổi khác. Xem ví dụ huấn luyện tùy chỉnh trong tài liệu phân loại để biết chi tiết về cách thực hiện.













































