我们需要微调 UMPC-Food-101 数据集的 ViLT 模型。 ImageandTextClassification 的预训练处理器具有以下语法: 编码=处理器([图像1,图像2],文本,return_tensors =“pt”)
最初,我仅使用图像数据来微调 ViT,并使用了以下方法: val_data = {'image': image_file_paths, 'label': multi_hot_labels}
ds_val = Dataset.from_dict(val_data)
def 变换(示例): 输入 = 处理器([pil.open(img).convert("RGB") for img in Examples["image"]], return_tensors="pt") 输入[“标签”] = 示例[“标签”] 返回输入
val_dataset = ds_val.with_transform(transform)
但现在我无法使用 Dataset.from_dict 函数,因为它不支持三个列表。目前我的字典包含以下列表:
val_data = { '图像':图像文件路径, “文本”:texts_csv_lst, '标签':标签, }
任何这方面的资源都将受到重视。非常感谢
进口手电筒 从 torch.utils.data 导入数据集
类自定义图像文本数据集(数据集): def init(自身、image_file_paths、texts_csv_lst、标签、处理器): self.image_file_paths = image_file_paths self.texts_csv_lst = texts_csv_lst self.labels = 标签 self.处理器 = 处理器
def __len__(self):
return len(self.image_file_paths)
def __getitem__(self, idx):
image_path = self.image_file_paths[idx]
image = Image.open(image_path).convert("RGB") # You may need to import PIL.Image as Image
image_inputs = self.processor(images=image, text=self.texts_csv_lst[idx], return_tensors="pt")
label = torch.tensor(self.labels[idx])
return {
"input_ids": image_inputs["input_ids"],
"attention_mask": image_inputs["attention_mask"],
"text": self.texts_csv_lst[idx],
"labels": label
}
custom_dataset = CustomImageTextDataset(image_file_paths,texts_csv_lst,标签,处理器)