Datasets documentation
Xử lý dữ liệu hình ảnh
Xử lý dữ liệu hình ảnh
Hướng dẫn này trình bày các phương pháp cụ thể để xử lý các bộ dữ liệu ảnh. Học cách:
- Sử dụng map() với bộ dữ liệu hình ảnh.
- Áp dụng các phép tăng cường dữ liệu cho một tập dữ liệu bằng set_transform().
Để tìm hiểu cách xử lý bất kỳ loại bộ dữ liệu nào, hãy xem hướng dẫn quy trình chung.
Bản đồ
Hàm map() có thể áp dụng các phép biến đổi lên toàn bộ bộ dữ liệu.
Ví dụ, tạo một hàm Resize cơ bản:
>>> def transforms(examples):
... examples["pixel_values"] = [image.convert("RGB").resize((100,100)) for image in examples["image"]]
... return examplesBây giờ hãy sử dụng hàm map() để thay đổi kích thước toàn bộ tập dữ liệu, và đặt batched=True để tăng tốc quá trình bằng cách nhận các lô ví dụ. Biến đổi trả về pixel_values dưới dạng đối tượng PIL.Image có thể lưu vào bộ nhớ đệm:
>>> dataset = dataset.map(transforms, remove_columns=["image"], batched=True)
>>> dataset[0]
{'label': 6,
'pixel_values': <PIL.PngImagePlugin.PngImageFile image mode=RGB size=100x100 at 0x7F058237BB10>}Tệp cache giúp tiết kiệm thời gian vì bạn không cần thực thi cùng một phép biến đổi hai lần. Hàm map() phù hợp nhất cho các thao tác chỉ chạy một lần mỗi lần huấn luyện - như thay đổi kích thước ảnh - thay vì dùng cho các thao tác được thực thi ở mỗi epoch, như tăng cường dữ liệu.
map() chiếm một lượng bộ nhớ nhất định, nhưng bạn có thể giảm yêu cầu về bộ nhớ của nó bằng các tham số sau:
batch_sizexác định số lượng ví dụ được xử lý trong một lần gọi hàm transform.writer_batch_sizexác định số lượng ví dụ đã được xử lý được giữ trong bộ nhớ trước khi chúng được lưu trữ.
Cả hai giá trị tham số mặc định đều là 1000, điều này có thể tốn kém nếu bạn đang lưu trữ hình ảnh. Hãy giảm các giá trị này để sử dụng ít bộ nhớ hơn khi bạn dùng map().
Áp dụng các phép biến đổi
🤗 Datasets áp dụng các phép tăng cường dữ liệu từ bất kỳ thư viện hoặc gói nào lên tập dữ liệu của bạn. Các phép biến đổi có thể được áp dụng trực tiếp trên các lô dữ liệu bằng set_transform(), giúp tiết kiệm dung lượng ổ đĩa hơn.
Ví dụ sau sử dụng torchvision, nhưng bạn có thể tự do sử dụng các thư viện tăng cường dữ liệu khác như Albumentations, Kornia và imgaug.
Ví dụ, nếu bạn muốn thay đổi các thuộc tính màu của một hình ảnh một cách ngẫu nhiên:
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [
... ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.7),
... ToTensor(),
... ]
... )Tạo một hàm để áp dụng biến đổi ColorJitter:
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examplesÁp dụng phép biến đổi bằng hàm set_transform():
>>> dataset.set_transform(transforms)