Dataset-Diffusion
扩散模型驱动语义分割数据自动合成,NeurIPS 2023 录用方法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
扩散模型驱动语义分割数据自动合成,NeurIPS 2023 录用方法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你是一名计算机视觉研究员,好不容易设计出了一套语义分割模型,却在为训练数据头疼——需要成千上万张像素级标注的图片,每张标注都要花上几分钟甚至更久。如果有一台「机器」能够根据你的文字描述,自动生成配对的图像和分割掩码,那该多好?Dataset Diffusion 就是这样一台「造数据机器」。
像素级语义分割(Semantic Segmentation)是计算机视觉的核心任务之一,目标是让模型理解图像中每个像素属于哪个类别——从自动驾驶的道路分割到医学影像的器官识别,都离不开它。但这类任务的数据标注成本极高:一张图像的像素级标注往往需要耗费标注员数分钟时间,而一个像 COCO 这样的大型数据集包含数万张图像。
Dataset Diffusion 由越南 VinAI Research 机构于 2023 年发布,被顶级 AI 学术会议 NeurIPS 2023 录用。论文第一作者 Quang Nguyen 等人观察到:生成式 AI 的核心工具——扩散模型(Diffusion Model)——不仅可以生成图像,其内部蕴含的注意力图(Attention Map)恰好与分割掩码有很强的关联性。于是他们开发了一套方法,将预训练的 Stable Diffusion 模型「Hack」了一下,让它在生成图像的同时输出对应的像素级分割标签。
图1:Dataset Diffusion 核心方法示意图,展示了如何从 Stable Diffusion 的注意力机制中提取分割掩码
Dataset Diffusion 的核心创新在于对 Stable Diffusion 内部机制的深度利用。SD 生成图像时,文本提示词通过 Cross-Attention(交叉注意力)机制影响图像内容,同时图像内部通过 Self-Attention(自注意力)机制组织空间结构。研究团队针对这两种注意力机制,各开发了一个改造技巧:
第一招:Class-Prompt Cross-Attention(类提示交叉注意力)
团队为每个语义类别(如「汽车」「人」「狗」)创建了独立的提示词,并在 SD 的 Cross-Attention 层中注入类别引导信号。在生成图像时,不同类别会引导注意力分布到各自的空间区域,从而在注意力图中形成分离的激活区域——这恰好对应了不同类别的像素位置。
第二招:Class-Prompt Appending(类提示追加)
直接在文本提示词末尾追加类别名称(如「a cat on the grass ---> cat」),利用 SD 本身对类别词汇的条件生成能力,让模型在生成图像时也同步生成对应类别的语义信号。
第三招:Self-Attention Exponentiation(自注意力指数增强)
将 SD 在特定去噪步骤中的 Self-Attention 矩阵做幂指数放大(Exponentiation),使不同语义区域的边界更加锐利分明,便于后续阈值化提取清晰的分割掩码轮廓。
任何自动生成的伪标签(pseudo-label)都不是 100% 完美的。Dataset Diffusion 还引入了不确定性区域(Uncertainty Region)机制:在生成分割掩码时,识别出那些模型置信度较低的区域(如物体边缘、粘连区域),在后续训练阶段忽略这些区域的损失函数(Loss),防止噪声标签误导模型更新。实验表明,这一机制显著提升了最终语义分割器的精度。
研究团队在两个权威数据集上验证了方法的有效性:PASCAL VOC 2012(21类)和 MSCOCO 2014(80类)。结果表明,仅使用 Dataset Diffusion 生成的合成数据(无需任何真实标注)训练的语义分割器,就能媲美甚至超过当时同期其他合成数据生成方法。在少量真实数据辅助下(半监督/自训练设置),模型性能进一步大幅提升,论文在 NeurIPS 2023 上获得了广泛关注。
项目以 PyTorch 为核心深度学习框架,主要依赖包括:
diffusers==0.16.1 —— 扩散模型推理框架transformers —— 预训练模型加载accelerate==0.19.0 —— 多 GPU 分布式训练加速deepspeed==0.10.1 —— 大规模训练优化(ZeRO 优化器)omegaconf==2.3.0 —— 配置文件管理opencv-python==4.7.0.72 —— 图像处理mmsegmentation —— 语义分割训练框架(集成在 mmseg/ 子目录中)fastapi==0.101.1 —— 可选 REST API 服务代码结构清晰:gen_data.py 是数据生成的主脚本,src/ 目录包含核心的注意力处理逻辑,configs/ 目录预置了 VOC 和 COCO 两个数据集的训练配置,scripts/ 目录提供了生成和训练的命令行脚本,data/prompts/ 包含了预定义的文本提示词集合。
这不是一个「开箱即用」的工具。研究级代码库的特性决定了它对硬件有较高要求:需要一块显存 16GB 以上的 NVIDIA GPU(论文推荐 RTX 3090/4090 级别),安装 PyTorch、diffusers、transformers 等多个依赖库,还需要下载 Stable Diffusion 的预训练权重。没有 Docker 支持,所有配置需要手动完成。
上手路径:先准备好 CUDA 环境和预训练 SD 权重,修改 gen_data.py 中的路径参数,运行 scripts/gen_data_voc.sh 或 gen_data_coco.sh 脚本即可开始生成合成数据。合成数据生成完毕后,再用 mmsegmentation 框架下的配置脚本训练语义分割模型。
Dataset Diffusion 的最大局限在于它高度依赖 Stable Diffusion 的生成质量——如果 SD 在某些类别或场景上表现不佳(如罕见物体、复杂纹理),生成的分割掩码也会受影响。此外,目前的方法主要针对 2D 图像分割,对于 3D 点云、视频等数据类型的扩展还在探索中。
另一个值得关注的点是:不确定性区域机制虽然有效,但需要额外的去噪步骤来评估置信度,增加了计算开销。对于需要实时生成大量数据的应用场景,可能需要在生成质量和速度之间做权衡。
Dataset Diffusion 入选 NeurIPS 2023 本身就是对其学术价值的认可。它展示了一条不同于传统数据增强(Data Augmentation)的思路——不是对现有数据做变换,而是从零开始「想象」新数据。这条路线的潜力在于:当真实数据因隐私、成本或稀有性而难以获取时,合成数据可能是唯一的出路。
从更宏观的视角看,这项工作代表了 AI 领域「合成数据革命」的一个切面:GPT 系列模型用合成文本训练,SD 系列用合成图像训练,而 Dataset Diffusion 则为视觉感知模型提供合成分割数据。数据和生成模型之间的这种「自举循环」,正在成为 AI 进步的重要驱动力。