multimodalart's picture
multimodalart HF Staff
Initial Rosetta multimodal demo
a460c95 verified
Raw
History Blame Contribute Delete
2.46 kB
from pathlib import Path
import json
from PIL import Image
import torch
from torch.utils.data import Dataset
# COCO2014 validation set
class COCOValDataset(Dataset):
def __init__(self, path, transform):
super().__init__()
self.path = Path(path)
self.image_files = list(self.path.iterdir())
self.transform = transform
def __len__(self):
return len(self.image_files)
def __getitem__(self, index):
with open(self.image_files[index], "rb") as f:
image = Image.open(f)
image = image.convert("RGB")
return {"image": self.transform(image), "image_id": self.image_files[index].name[:-4]}
@staticmethod
def collate_fn(batch):
batch_size = len(batch)
images = []
image_ids = []
for i in range(batch_size):
images.append(batch[i]["image"])
image_ids.append(batch[i]["image_id"])
return {
"images": torch.stack(images, dim=0),
"image_ids": image_ids,
}
# samples randomly sampled from COCO2014 validation set
# COCO30K or COCO6K
class COCODataset(Dataset):
def __init__(self, path, debug=False):
super().__init__()
self.path = Path(path)
self.captions = json.load(open(self.path, "r"))["annotations"]
if debug:
self.captions = self.captions[:1024]
def __len__(self):
# return 120 # for test
return len(self.captions)
def __getitem__(self, index):
return {
"id": self.captions[index]["id"],
# different captions may correspond to the same image_id
"image_id": self.captions[index]["image_id"],
"type": "prompt",
"input": self.captions[index]["caption"],
"seed": self.captions[index]["seed"],
}
@staticmethod
def collate_fn(batch):
batch_size = len(batch)
ids = []
image_ids = []
types = []
inputs = []
seeds = []
for i in range(batch_size):
ids.append(batch[i]["id"])
image_ids.append(batch[i]["image_id"])
types.append(batch[i]["type"])
inputs.append(batch[i]["input"])
seeds.append(batch[i]["seed"])
return {
"ids": ids,
"image_ids": image_ids,
"type": types,
"input": inputs,
"seeds": seeds,
}