Diffusion x 语义分割

Zero Shot、Open Vocabulary

DiffuMask

DiffuMask10

DatasetDM

DatasetDM11

Grounded Diffusion

无监督

DiffusionSeg

DiffusionSeg两阶段示意图

DiffusionSeg1提出了一种无监督语义分割/目标检测的两阶段算法。

Synthesis阶段: 1. 生成image:选择训练好的t2i Stable Diffusion2,从ImageNet中采样类别名称并且使用ChatGPT生成上下文丰富的prompt,与随机噪声送入模型进行inverse diffusion,得到合成的输入图片; 2. 抽取、聚合mask:用prompt中cls token抽取cross attention中的特征图 \(A_c\)(原始粗糙mask),并抽取self attention的特征图 \(A_s\),并且在不同层和不同时间步上聚合; 3. Refine mask:根据“用\(A_s\) refine \(A_c\) 的边界,用 \(A_s\) 和 输入图片像素间RGB距离和欧氏距离来提升coherence区域的响应”,设计了能量函数并且使用图割算法最小化;(比直接使用KMeans,NCut, DenseCRF效果好)

Exploitation阶段:

用AttentionCut生成的pseudo mask作为监督,训练简单的三层 FCN Decoder(Diffusion Model 是冻结的

DiffSeg

DiffSeg的流程图

不同于DiffusionSeg和DiffuMask,使用cross attn map获得文本指定的前景物体mask,DiffSeg9只使用了self attn map,获得物体分组信息。

本文观察总结了self attn的两大特点, 1. Intra-Attention Similarity,即在一个像素 \((I,J)\) 对应的2D注意力图 \(A(I,J,:,:)\) 中,激活值高的区域往往是与 \((I,J)\) 属于同一个 object group的; 2. Inter-Attention Similarity,属于同一个object group的两个像素对应的两个2D注意力图,应该是相似的;

低分辨率的注意力图在原始图像上有更大的感受野,因此激活区域比例往往更大一些。这样本文解释了为什么4个分辨率的attn map都要使用。

整个后处理算法的步骤如下:

  • 首先,设置一组与分辨率成正比的超参,按照像素位置的对应关系,将多个分辨率的self attn maps上采用、加权求和、归一化到 \(64\times 64\)\(64\times 64\) self attn maps。
  • 在已知任意两张注意力图的距离的情况下,设计了一种迭代算法,从 \(M^2\) 个采样点对应的初始attn组集合 \(\mathcal{L}_\alpha\) 开始( \(M\le 64\) ),在阈值 \(\tau\) 的过滤下,每次将候选attn组集合\(\mathcal{L}_p\) 中与其他attn距离小于 \(\tau\) 的聚合为新的attn;最终得到每个attn关注不同object/stuff的attn集合 \(\mathcal{L}_p \in\mathbb{R}^{N_p\times 64 \times 64}\)。距离度量使用forward KL和reverse KL的均值。
  • 上采样到原图尺寸,并且逐像素位置上使用概率值最高的attn对应的label。

由于单张注意力图有和为1的性质,因此可以使用KL散度来衡量两张注意力图的相似性!

全监督

尝试用逆扩散过程实现密集预测,输入图像的特征作为逆扩散过程中的“条件”。

SegDiff

SegDiff框架图

SegDiff5修改了UNet的encoder,分别处理 \(x_t\) 和图像 \(I\) 并将其融合。整个UNet可以表达为:

\[ \epsilon_\theta(x_t, I, t) = D(E(F(x_t) + G(I), t), t) \]

其他与DDPM一致。

需要注意的是,SegDiff最终解决的问题是二值分割。对于Cityscapes这样的多目标数据集,采用交互式分割的设置(预先给定目标物体的bbox)。

Diffusion Models for Implicit Image Segmentation Ensembles

本文使用Diffusion Model解决二值脑瘤分割问题。

DMIISE流程图

Pix2Seq-D

Pix2Seq-D6 用Diffusion Model解决全景分割问题。抛弃了UNet结构,单独设计了图像特征的encoder和mask decoder。

在label的编码上使用了analog bits7

Pix2Seq-D模型框架
Pix2Seq-D训练和采样伪代码

DDP

DDP的框架图

这篇文章(DDP3)在技术上的贡献包括:

  • 将噪声与图像特征拼接作为输入的、由几层attention堆叠的,map decoder的简单设计;
  • 通过探索多种方式,确定在加噪之前,使用可学习的参数将离散gt label映射到连续空间;
  • 确定了 cos schedule for \(\alpha_t\) 比 linear schedule for \(\alpha_t\) 要好;
  • 为seg任务使用CE loss,为depth任务使用sigloss,而不是用扩散模型原来用的L2损失,更好些;
  • 观察到推理时过多的步数,性能下降,认为是训练和推理时噪声分布不一致造成的,通过在模型训练后期使用自训练解决了这个问题;

在这样的pipeline下,模型还有两个故事性的贡献,均得益于不同时间步的推理得到不同的结果:

  • 动态推理能力
  • 通过几个推理map的比较知道模型uncertainty的区域;

与SegDiff的一个主要区别是,DDP没有使用参数量巨大的UNet;考虑到目标函数也换了,整个方法与Diffusion相关的就只有加噪、去噪的模式。

DDP在pipeline上,损失函数的选择上,都与Pix2Seq-D很相似,在label的编码上也尝试过analog bits,不过最终被可学西的编码替代。

其他

GeoDiffusion

GeoDiffusion4 希望使用真实目标检测数据集训练一个能从layout生成图片(L2I)的生成模型,并用生成数据作为增强数据训练目标检测模型。

这篇文章在技术上的贡献包括:

  1. 探索了将stable diffusion模型finetune为GeoDiffusion的方法,细节包括:
    • 将离散的bounding box信息和相机角度信息通过索引可学习编码的方式转换为text embedding;
    • 将前景区域按照其面积大小进行加权,面积越小,权重越高,损失权重越大;
    • 训练时的超参设置;
  2. 探索了3种评价生成数据的方式:
    • 测试FID,并且使用在训练集上训练的Mask R-CNN模型作为Oracle,在验证集上,用oracle对于生成数据进行预测并计算与gt box的AP (类似YOLO score),与oracle在验证集上的AP越一致,说明数据越真实。
    • 将生成数据与不同比例的真实数据混合,训练Faster R-CNN模型,观察生成数据的增强效果;
    • 对于训练集中出现的layout,使用随机flip和shift,发现生成结果也不错,这也被用在了detector的训练中;
  3. 在COCO上训练的GeoDiffusion模型还具有不错的Inpainting能力。

这篇文章提出的这种对于T2I DMs的微调方式使得DMs在给定layout的情况下能够生成前景数量丰富的图片,但是这限制了微调后GeoDiffusion只能作为训练集的增强模型,其对于OOD的layout有一定泛化能力,但是对于训练集没有出现的类别以及不能再像原sd一样生成。

DenseDiffusion

DenseDiffusion8不微调stable diffusion,通过一种调制注意力的方法,使得生成的图片与dense的文本匹配更好!

在阅读Introduction和Related work的时候,笔者发现自己关于Diffusion的论文看得太少了;

对于sd的cross attn和self attn的定性观察(并不新鲜)

作者先后用定性和定量分析说明attention map反映生成图像的layout。

无论cross attn,还是self attn,其注意力图调制的方式都可以表示为

其中 关系矩阵 \(R\) 描述了key value的“相似关系”( \(R\) 是binary map ),在cross attn和self attn中不同,\(M_\text{pos}\)\(M_\text{neg}\) 用于调整attn value range在调制前后相当。\(S\) 表示每个query对应的段面积,旨在为不同大小的目标使用不同程度的调制,\(\lambda_t\) 是随着 \(t\) 从1到0逐渐变小的参数,因为在生成后期的调制会使得图退化。

其中每个矩阵的设计见原论文,或者极市平台解读

改动训练好的神经网络的参数往往导致性能锐减,但是在激活值上进行调制却可能有更好的效果。

参考文献