Tạo mặt nạ từ hộp giới hạn Python

Các hộp giới hạn là các hình chữ nhật đánh dấu các đối tượng trên một hình ảnh. Có nhiều định dạng của chú thích hộp giới hạn. Mỗi định dạng sử dụng biểu diễn cụ thể của tọa độ hộp giới hạn. Albumentations hỗ trợ bốn định dạng.

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
3,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
4,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
5 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
6

Chúng ta hãy xem từng định dạng đó và cách chúng thể hiện tọa độ của các hộp giới hạn

Ví dụ, chúng tôi sẽ sử dụng một hình ảnh từ bộ dữ liệu có tên Common Objects in Context. Nó chứa một hộp giới hạn đánh dấu một con mèo. Chiều rộng hình ảnh là 640 pixel và chiều cao của nó là 480 pixel. Chiều rộng của hộp giới hạn là 322 pixel và chiều cao của nó là 117 pixel

Hộp giới hạn có tọa độ

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
7 sau đây của các góc của nó. trên cùng bên trái là
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
8 hoặc
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
9, trên cùng bên phải là
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
0 hoặc
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
1, dưới cùng bên trái là
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
2 hoặc
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
3, dưới cùng bên phải là
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
4 hoặc
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
5. Như bạn thấy, tọa độ của các góc của hộp giới hạn được tính tương ứng với góc trên cùng bên trái của hình ảnh có tọa độ
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
7
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
7

Một hình ảnh ví dụ với hộp giới hạn từ bộ dữ liệu COCO

pascal_voc¶

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
3 là một định dạng được sử dụng bởi bộ dữ liệu Pascal VOC. Tọa độ của hộp giới hạn được mã hóa với bốn giá trị tính bằng pixel.
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
9.
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
70 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
71 là tọa độ của góc trên cùng bên trái của hộp giới hạn.
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
72 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
73 là tọa độ của góc dưới bên phải của hộp giới hạn

Tọa độ của hộp giới hạn ví dụ ở định dạng này là

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
74

albumentations¶

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
4 tương tự như
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
3, bởi vì nó cũng sử dụng bốn giá trị
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
9 để đại diện cho một hộp giới hạn. Nhưng không giống như
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
3,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
4 sử dụng các giá trị chuẩn hóa. Để chuẩn hóa các giá trị, chúng tôi chia tọa độ theo pixel cho trục x và y theo chiều rộng và chiều cao của hình ảnh

Tọa độ của hộp giới hạn ví dụ ở định dạng này là

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
70 là
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
71

Albumentations sử dụng định dạng này trong nội bộ để làm việc với các hộp giới hạn và tăng cường chúng

dừa¶

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
5 là định dạng được sử dụng bởi tập dữ liệu Đối tượng chung trong ngữ cảnh COCO .

Trong

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
5, một hộp giới hạn được xác định bởi bốn giá trị tính bằng pixel
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
74. Chúng là tọa độ của góc trên cùng bên trái cùng với chiều rộng và chiều cao của hộp giới hạn

Tọa độ của hộp giới hạn ví dụ ở định dạng này là

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
75

yolo¶

Trong

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
6, một hộp giới hạn được biểu thị bằng bốn giá trị
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77.
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
79 là tọa độ chuẩn hóa của tâm hộp giới hạn. Để làm cho tọa độ được chuẩn hóa, chúng tôi lấy các giá trị pixel của x và y, đánh dấu tâm của hộp giới hạn trên trục x và y. Sau đó, chúng tôi chia giá trị của x cho chiều rộng của hình ảnh và giá trị của y cho chiều cao của hình ảnh.
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
70 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
71 đại diện cho chiều rộng và chiều cao của hộp giới hạn. Chúng cũng được chuẩn hóa

Tọa độ của hộp giới hạn ví dụ ở định dạng này là

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
72 là
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
73

Cách các định dạng khác nhau biểu thị tọa độ của hộp giới hạn

Mở rộng hộp giới hạn¶

Cũng giống như tăng cường hình ảnh và mặt nạ, quá trình tăng cường các hộp giới hạn bao gồm 4 bước

  1. Bạn nhập các thư viện cần thiết
  2. Bạn xác định một đường ống tăng cường
  3. Bạn đọc hình ảnh và hộp giới hạn từ đĩa
  4. Bạn chuyển một hình ảnh và các hộp giới hạn tới đường dẫn tăng cường và nhận các hộp và hình ảnh tăng cường

Ghi chú

Một số biến đổi trong Albumentation không hỗ trợ hộp giới hạn. Nếu bạn cố gắng sử dụng chúng, bạn sẽ nhận được một ngoại lệ. Vui lòng tham khảo bài viết này để kiểm tra xem một phép biến đổi có thể tăng thêm các hộp giới hạn hay không

Bước 1. Nhập các thư viện cần thiết. ¶

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
1

Bước 2. Xác định một đường ống tăng cường. ¶

Dưới đây là một ví dụ về khai báo tối thiểu của đường ống tăng cường hoạt động với các hộp giới hạn

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]

Lưu ý rằng không giống như tăng cường hình ảnh và mặt nạ,

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
74 hiện có tham số bổ sung
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
75. Bạn cần truyền một thể hiện của
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
76 cho đối số đó.
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
76 chỉ định cài đặt để làm việc với các hộp giới hạn.
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78 đặt định dạng cho tọa độ hộp giới hạn

Nó có thể là

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
3,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
4,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
5 hoặc
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
6. Giá trị này là bắt buộc vì Albumentation cần biết định dạng nguồn của tọa độ cho các hộp giới hạn để áp dụng các phần mở rộng một cách chính xác

Ngoài

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
76 hỗ trợ thêm một số cài đặt

Đây là một ví dụ về

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
74 hiển thị tất cả các cài đặt có sẵn với
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
76

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78¶

Các tham số

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78 kiểm soát những gì Albumentations nên thực hiện đối với các hộp giới hạn được tăng cường nếu kích thước của chúng đã thay đổi sau khi được tăng cường. Kích thước của hộp giới hạn có thể thay đổi nếu bạn áp dụng các phần mở rộng không gian, chẳng hạn như khi bạn cắt xén một phần của hình ảnh hoặc khi bạn thay đổi kích thước hình ảnh

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77 là một giá trị tính bằng pixel. Nếu diện tích của hộp giới hạn sau khi mở rộng trở nên nhỏ hơn
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77, Albumentations sẽ loại bỏ hộp đó. Vì vậy, danh sách các hộp giới hạn tăng cường được trả về sẽ không chứa hộp giới hạn đó

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78 là một giá trị từ 0 đến 1. Nếu tỷ lệ diện tích hộp giới hạn sau khi tăng lên thành
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
44 trở nên nhỏ hơn
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78, Albumentations sẽ loại bỏ hộp đó. Vì vậy, nếu quá trình gia tăng cắt hầu hết hộp giới hạn, thì hộp đó sẽ không có trong danh sách trả về của các hộp giới hạn tăng cường

Đây là một hình ảnh ví dụ có chứa hai hộp giới hạn. Các tọa độ hộp giới hạn được khai báo bằng định dạng

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
5

Một hình ảnh ví dụ với hai hộp giới hạn

Đầu tiên, chúng tôi áp dụng phần mở rộng

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
47 mà không khai báo các tham số
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78. Hình ảnh tăng cường chứa hai hộp giới hạn

Một hình ảnh ví dụ với hai hộp giới hạn sau khi áp dụng phần mở rộng

Tiếp theo, chúng tôi áp dụng tăng thêm

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
47 tương tự, nhưng bây giờ chúng tôi cũng sử dụng tham số
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77. Bây giờ, hình ảnh được tăng cường chỉ chứa một hộp giới hạn, vì diện tích của hộp giới hạn kia sau khi tăng cường trở nên nhỏ hơn
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77, vì vậy Albumentations đã bỏ hộp giới hạn đó

Một hình ảnh ví dụ với một hộp giới hạn sau khi áp dụng phần mở rộng với 'min_area'

Cuối cùng, chúng tôi áp dụng phần mở rộng

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
47 với
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78. Sau lần tăng cường đó, hình ảnh thu được không chứa bất kỳ hộp giới hạn nào, vì khả năng hiển thị của tất cả các hộp giới hạn sau khi tăng cường đều nằm dưới ngưỡng do
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78 đặt

Hình ảnh ví dụ không có hộp giới hạn sau khi áp dụng phần mở rộng với 'min_visibility'

Nhãn lớp cho hộp giới hạn¶

Bên cạnh tọa độ, mỗi hộp giới hạn phải có nhãn lớp liên quan cho biết đối tượng nào nằm bên trong hộp giới hạn. Có hai cách để chuyển nhãn cho hộp giới hạn

Giả sử bạn có một hình ảnh ví dụ với ba đối tượng.

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
76,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
77 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
78. Các tọa độ hộp giới hạn ở định dạng
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
5 cho các đối tượng đó là
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
00,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
01 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
02

Một hình ảnh ví dụ với 3 hộp giới hạn từ bộ dữ liệu COCO

1. Bạn có thể chuyển nhãn cùng với tọa độ hộp giới hạn bằng cách thêm chúng dưới dạng giá trị bổ sung vào danh sách tọa độ. ¶

Đối với hình trên, các hộp giới hạn có nhãn lớp sẽ trở thành

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
03,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
04 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
05

Nhãn lớp có thể thuộc bất kỳ loại nào. số nguyên, chuỗi hoặc bất kỳ loại dữ liệu Python nào khác. Ví dụ: các giá trị số nguyên dưới dạng nhãn lớp sẽ trông như sau.

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
06,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
07 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
08

Ngoài ra, bạn có thể sử dụng nhiều giá trị lớp cho mỗi hộp giới hạn, ví dụ:

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
09,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
00 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
01

2. Bạn có thể chuyển nhãn cho các hộp giới hạn dưới dạng danh sách riêng [cách ưu tiên]. ¶

Ví dụ: nếu bạn có ba hộp giới hạn như

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
00,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
01 và
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
02, bạn có thể tạo một danh sách riêng với các giá trị như
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
05 hoặc
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
06 có chứa nhãn lớp cho các hộp giới hạn đó. Tiếp theo, bạn chuyển danh sách đó với nhãn lớp dưới dạng đối số riêng cho hàm
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
07. Albumentations cần biết tên của tất cả các danh sách có nhãn lớp để nối chúng với các hộp giới hạn tăng cường một cách chính xác. Sau đó, nếu một hộp giới hạn bị loại bỏ sau khi tăng cường vì nó không còn hiển thị nữa, Albumentations cũng sẽ loại bỏ nhãn lớp cho hộp đó. Sử dụng tham số
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
08 để đặt tên cho tất cả các đối số trong
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
07 sẽ chứa các mô tả nhãn cho các hộp giới hạn [thêm về điều đó trong Bước 4]

Bước 3. Đọc hình ảnh và hộp giới hạn từ đĩa. ¶

Đọc một hình ảnh từ đĩa

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
7

Các hộp giới hạn có thể được lưu trữ trên đĩa ở các định dạng tuần tự hóa khác nhau. JSON, XML, YAML, CSV, v.v. Vì vậy, mã để đọc các hộp giới hạn phụ thuộc vào định dạng thực tế của dữ liệu trên đĩa

Sau khi bạn đọc dữ liệu từ đĩa, bạn cần chuẩn bị các hộp giới hạn cho Albumentations

Albumentations hy vọng rằng các hộp giới hạn sẽ được biểu diễn dưới dạng danh sách các danh sách. Mỗi danh sách chứa thông tin về một hộp giới hạn duy nhất. Định nghĩa hộp giới hạn phải có trong danh sách bốn phần tử biểu thị tọa độ của hộp giới hạn đó. Ý nghĩa thực sự của bốn giá trị đó phụ thuộc vào định dạng của các hộp giới hạn [hoặc là

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
3,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
4,
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
5 hoặc
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
6]. Ngoài bốn tọa độ, mỗi định nghĩa của hộp giới hạn có thể chứa một hoặc nhiều giá trị bổ sung. Bạn có thể sử dụng các giá trị bổ sung đó để lưu trữ thông tin bổ sung về hộp giới hạn, chẳng hạn như nhãn lớp của đối tượng bên trong hộp. Trong quá trình tăng cường, Albumentations sẽ không xử lý các giá trị bổ sung đó. Thư viện sẽ trả lại chúng cùng với tọa độ được cập nhật của hộp giới hạn tăng cường

Bước 4. Chuyển một hình ảnh và các hộp giới hạn tới đường dẫn tăng cường và nhận các hộp và hình ảnh tăng cường. ¶

Như đã thảo luận trong Bước 2, có hai cách chuyển nhãn lớp cùng với tọa độ hộp giới hạn

1. Truyền nhãn lớp cùng với tọa độ. ¶

Vì vậy, nếu bạn có tọa độ của ba hộp giới hạn giống như thế này

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
7

bạn có thể thêm nhãn lớp cho mỗi hộp giới hạn làm thành phần bổ sung của danh sách cùng với bốn tọa độ. Vì vậy, bây giờ một danh sách với các hộp giới hạn và tọa độ của chúng sẽ trông như sau

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
7

hoặc với nhiều nhãn trên mỗi hộp giới hạn

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
7

Bạn có thể sử dụng bất kỳ kiểu dữ liệu nào để khai báo nhãn lớp. Nó có thể là chuỗi, số nguyên hoặc bất kỳ kiểu dữ liệu Python nào khác

Tiếp theo, bạn chuyển một hình ảnh và các hộp giới hạn cho nó tới hàm

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
07 và nhận được hình ảnh tăng cường và các hộp giới hạn

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
4

Dữ liệu đầu vào và đầu ra ví dụ để tăng hộp giới hạn

2. Truyền nhãn lớp trong một đối số riêng cho
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
07 [cách ưa thích]. ¶

Giả sử bạn có tọa độ của ba hộp giới hạn

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
7

Bạn có thể tạo một danh sách riêng chứa nhãn lớp cho các hộp giới hạn đó

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco', min_area=1024, min_visibility=0.1, label_fields=['class_labels']]]
0

Sau đó, bạn chuyển cả hai hộp giới hạn và nhãn lớp cho

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
07. Lưu ý rằng để chuyển các nhãn lớp, bạn cần sử dụng tên của đối số mà bạn đã khai báo trong
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
08 khi tạo một phiên bản Compose ở bước 2. Trong trường hợp của chúng tôi, chúng tôi đặt tên của đối số thành
transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
18

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
0

Ví dụ về dữ liệu đầu vào và đầu ra để mở rộng hộp giới hạn với đối số riêng cho nhãn lớp

Lưu ý rằng

transform = A.Compose[[
    A.RandomCrop[width=450, height=450],
    A.HorizontalFlip[p=0.5],
    A.RandomBrightnessContrast[p=0.2],
], bbox_params=A.BboxParams[format='coco']]
08 cần một danh sách, vì vậy bạn có thể đặt nhiều trường có chứa nhãn cho các hộp giới hạn của mình. Vì vậy, nếu bạn tuyên bố Soạn như

Chủ Đề