手把手教你用 150 万条 GPT 生成的数据,让开源模型也能做出 GPT-4o 级别的修图效果
——一份写给技术同学的 GPT-IMAGE-EDIT-1.5M 实战指南
“
如果你苦于找不到高质量、大规模、可用于商业场景的开源图像编辑数据集,这份笔记能帮你在 15 分钟内搞清楚:
这 150 万条样本到底长什么样? 它们是怎么被 GPT-4o「二次加工」出来的? 我该如何把这份数据真正用到自己的模型或产品里?
目录
-
为什么又需要一份新数据集? -
GPT-IMAGE-EDIT-1.5M 全景速览 -
数据诞生记:3 步把旧数据「翻新」 -
动手实验:把 FluxKontext 微调出 7.24 分 -
如何下载、校验、加载这份数据? -
常见问题答疑(FAQ) -
一份可直接复制的 PyTorch Dataset 代码片段 -
小结与下一步
1. 为什么又需要一份新数据集?
做过图像编辑的同学都遇到过这些坑:
GPT-4o 出现后,大家发现:
“
只要数据质量过硬,哪怕是开源架构也能逼近闭源模型的效果。
于是 UCSC、爱丁堡、Adobe 三家机构联手,把 OmniEdit、HQ-Edit、UltraEdit 三个老牌数据集重新「回炉」——让 GPT-4o 重新写指令、重新出图,最终得到 154 万条三元组(指令、原图、编辑后图),起名叫 GPT-IMAGE-EDIT-1.5M。
2. GPT-IMAGE-EDIT-1.5M 全景速览
2.1 规模与分布
-
总量:1 540 203 条有效样本 -
来源占比 -
OmniEdit:约 60 % -
HQ-Edit:约 25 % -
UltraEdit:约 15 %
-
-
分辨率:全部统一成 1024×1024、1536×1024、1024×1536 三种比例 -
语言:英文指令为主,10 % 指令经过 GPT-4o 重写以消除歧义
2.2 一条样本到底长什么样?
3. 数据诞生记:3 步把旧数据「翻新」
官方把流程画成了一张图,我们拆成三步讲给你听:
3.1 输出图再生(Output Regeneration)
-
拿原始指令 + 原图喂给 GPT-4o 的图像编辑 API -
要求 1024 px 高分辨率 + 与原图内容对齐 -
自动过滤掉带水印、畸变、留边的图
→ 这一步就带来 0.3 ~ 0.4 分的指标提升(OmniEdit 上 imgedit 从 2.94 → 3.24)。
3.2 指令重写(Instruction Re-write)
-
原因:GPT-4o 有时会“过度创作”,导致新图跟原指令有细微差异。 -
做法:把「原图 + 新生成图」再喂给 GPT-4o,让它重新写一条精准描述变化的指令。 -
结果:指令更长、更准确,指标再涨 0.1 ~ 0.2 分。
3.3 全对再生(Pair Regeneration,仅 HQ-Edit)
-
背景:HQ-Edit 原图也是 DALL·E 3 生成,略显过时。 -
做法: -
让 GPT-4o 重新生成输入图(保证构图合理、像素清晰) -
再按同一指令生成编辑后图
-
-
结果:GEdit-EN 从 5.67 → 5.73。
4. 动手实验:把 FluxKontext 微调出 7.24 分
4.1 基座模型
-
FluxKontext dev:基于 Rectified Flow Transformer,支持 1024 px 原生分辨率 -
官方把 CLIP 换成 Qwen-VL-7B 作为图文编码器,语义对齐更好
4.2 训练配置一览
4.3 结果对比表
“
注:表中分数由官方多维度 MLLM 评委自动打分,越高越好。
5. 如何下载、校验、加载这份数据?
5.1 下载
-
项目主页:https://ucsc-vlaa.github.io/GPT-Image-Edit -
Hugging Face 镜像:搜索 GPT-IMAGE-EDIT-1.5M
-
体积:约 1.8 TB(JPEG 质量 95)
5.2 文件结构
GPT-IMAGE-EDIT-1.5M/
├── metadata/
│ ├── omniedit.jsonl
│ ├── hqedit.jsonl
│ └── ultraedit.jsonl
├── images/
│ ├── 00000000.jpg
│ ├── ...
└── checksum.sha256
5.3 校验
sha256sum -c checksum.sha256
通过后再开始训练,避免中途解压损坏。
6. 常见问题答疑(FAQ)
7. 一份可直接复制的 PyTorch Dataset 代码片段
import json, os
from PIL import Image
from torch.utils.data import Dataset
class GPTImageEditDataset(Dataset):
def __init__(self, meta_file, img_dir, transform=None):
with open(meta_file) as f:
self.samples = [json.loads(line) for line in f]
self.img_dir = img_dir
self.transform = transform
def __len__(self):
return len(self.samples)
def __getitem__(self, idx):
item = self.samples[idx]
src = Image.open(os.path.join(self.img_dir, item['source'])).convert('RGB')
tgt = Image.open(os.path.join(self.img_dir, item['target'])).convert('RGB')
txt = item['instruction']
if self.transform:
src = self.transform(src)
tgt = self.transform(tgt)
return {'source': src, 'target': tgt, 'prompt': txt}
8. 小结与下一步
-
这份 150 万条样本把「数据质量」而不是「模型大小」推到了台前; -
只用 30 k 步微调,就能让开源 FluxKontext 逼近 GPT-4o 的编辑水平; -
数据集、代码、模型全部公开,可立即复现。
下一步可以尝试:
-
把同样流程迁移到 视频帧编辑(Stable Video Diffusion 已在实验); -
用 LoRA/QLoRA 做更小规模的快速定制; -
在 本地部署(RTX 4090 + 8-bit 量化)做商业级修图插件。
祝你玩得开心,遇到问题欢迎在 GitHub 提 issue,社区维护者很活跃。