如何为微调 ViLT 准备多模型数据

问题描述 投票:0回答:1

我们需要微调 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, '标签':标签, }

任何这方面的资源都将受到重视。非常感谢

python model huggingface-transformers data-preprocessing fine-tuning
1个回答
0
投票

进口手电筒 从 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,标签,处理器)

© www.soinside.com 2019 - 2024. All rights reserved.