2024-06-12 01:20:55 +08:00
|
|
|
"""
|
|
|
|
This script demonstrates how to use torchvision's image transformation with LeRobotDataset for data
|
|
|
|
augmentation purposes. The transformations are passed to the dataset as an argument upon creation, and
|
2024-11-30 02:04:00 +08:00
|
|
|
transforms are applied to the observation images before they are returned in the dataset's __getitem__.
|
2024-06-12 01:20:55 +08:00
|
|
|
"""
|
|
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
from torchvision.transforms import ToPILImage, v2
|
|
|
|
|
|
|
|
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
|
|
|
|
|
2024-12-11 17:32:18 +08:00
|
|
|
dataset_repo_id = "lerobot/aloha_static_screw_driver"
|
2024-06-12 01:20:55 +08:00
|
|
|
|
|
|
|
# Create a LeRobotDataset with no transformations
|
2024-12-11 17:32:18 +08:00
|
|
|
dataset = LeRobotDataset(dataset_repo_id, episodes=[0])
|
2024-06-12 01:20:55 +08:00
|
|
|
# This is equivalent to `dataset = LeRobotDataset(dataset_repo_id, image_transforms=None)`
|
|
|
|
|
|
|
|
# Get the index of the first observation in the first episode
|
|
|
|
first_idx = dataset.episode_data_index["from"][0].item()
|
|
|
|
|
|
|
|
# Get the frame corresponding to the first camera
|
2024-11-30 02:04:00 +08:00
|
|
|
frame = dataset[first_idx][dataset.meta.camera_keys[0]]
|
2024-06-12 01:20:55 +08:00
|
|
|
|
|
|
|
|
|
|
|
# Define the transformations
|
|
|
|
transforms = v2.Compose(
|
|
|
|
[
|
|
|
|
v2.ColorJitter(brightness=(0.5, 1.5)),
|
|
|
|
v2.ColorJitter(contrast=(0.5, 1.5)),
|
2024-12-11 17:32:18 +08:00
|
|
|
v2.ColorJitter(hue=(-0.1, 0.1)),
|
2024-06-12 01:20:55 +08:00
|
|
|
v2.RandomAdjustSharpness(sharpness_factor=2, p=1),
|
|
|
|
]
|
|
|
|
)
|
|
|
|
|
|
|
|
# Create another LeRobotDataset with the defined transformations
|
2024-12-11 17:32:18 +08:00
|
|
|
transformed_dataset = LeRobotDataset(dataset_repo_id, episodes=[0], image_transforms=transforms)
|
2024-06-12 01:20:55 +08:00
|
|
|
|
|
|
|
# Get a frame from the transformed dataset
|
2024-11-30 02:04:00 +08:00
|
|
|
transformed_frame = transformed_dataset[first_idx][transformed_dataset.meta.camera_keys[0]]
|
2024-06-12 01:20:55 +08:00
|
|
|
|
|
|
|
# Create a directory to store output images
|
|
|
|
output_dir = Path("outputs/image_transforms")
|
|
|
|
output_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
|
|
# Save the original frame
|
|
|
|
to_pil = ToPILImage()
|
|
|
|
to_pil(frame).save(output_dir / "original_frame.png", quality=100)
|
|
|
|
print(f"Original frame saved to {output_dir / 'original_frame.png'}.")
|
|
|
|
|
|
|
|
# Save the transformed frame
|
|
|
|
to_pil(transformed_frame).save(output_dir / "transformed_frame.png", quality=100)
|
|
|
|
print(f"Transformed frame saved to {output_dir / 'transformed_frame.png'}.")
|