paint-by-inpaint/PIPE
收藏数据集卡片 for PIPE 数据集
数据集概述
PIPE(Paint by InPaint Edit)数据集旨在通过提供大规模的图像对和多样化的对象添加指令,增强无掩码、遵循指令的图像编辑模型的效果。该数据集包含约100万对图像,包括源图像和目标图像,以及相应的自然语言对象添加指令。数据集利用广泛的图像分割数据集(COCO、Open Images、LVIS),并采用基于Stable Diffusion的修复模型创建带有和不带对象的图像对。此外,它还包含了多种指令生成技术,包括基于类名的、基于VLM-LLM的和基于手动参考的指令,共生成近190万条不同指令。我们还提供了一个用于图像添加评估的测试集。
列信息
source_img: 用于编辑的源图像,即修复后的图像。target_img: 用于编辑的地面真实(GT)图像,即原始图像。Instruction_VLM-LLM: 使用视觉语言模型(VLM)和大型语言模型(LLM)的两阶段过程生成的详细和多样化的对象添加指令。Instruction_Class: 基于对象类名生成的指令,格式为“添加一个<类>”。Instruction_Ref_Dataset: 使用RefCOCO、RefCOCO+和RefCOCOg等数据集中的对象参考生成的指令。object_location: 图像中添加对象的位置。target_img_dataset: 目标图像所属的数据集。img_id: GT图像(目标图像)的唯一标识符。ann_id: 被移除对象的分割注释的标识符。
加载 PIPE 数据集
以下是如何使用datasets库加载和使用此数据集的示例:
python from datasets import load_dataset
data_files = {"train": "data/train-", "test": "data/test-"} dataset = load_dataset(paint-by-inpaint/PIPE, data_files=data_files)
显示一个示例
example_train = dataset[train][0] print(example_train)
example_test = dataset[test][0] print(example_test)
使用 DataLoader 进行训练
python class ImagePairDataset(Dataset): def init(self, dataset, split=train, location_probability=0.25): self.dataset = dataset[split] self.keys = [source_img, target_img, Instruction_VLM-LLM, Instruction_Class, Instruction_Ref_Dataset, object_location] self.location_probability = location_probability def len(self): return len(self.dataset) def getitem(self, idx): # 选择一个随机指令 instructions = [self.dataset[Instruction_VLM-LLM][idx], self.dataset[Instruction_Class][idx], self.dataset[Instruction_Ref_Dataset][idx]] instruction = random.choice([instr for instr in instructions if instr])
# 根据预定义概率选择性地添加位置
if random.random() < self.location_probability: instruction += f" at {self.dataset[object_location][idx]}"
# 加载图像(已在数据集中加载)
source_img = self.dataset[source_img][idx]; target_img = self.dataset[target_img][idx]
# 将图像转换为numpy数组
source_img = np.array(source_img); target_img = np.array(target_img)
return source_img, target_img, instruction
初始化数据集和数据加载器
train_dataset = ImagePairDataset(dataset, split=train) train_dataloader = DataLoader(train_dataset, batch_size=32, shuffle=True)




