扩散模型在图生文领域的应用

发布于 10 天前 47 次阅读 预计阅读时间: 20 分钟


上篇文章提到,扩散模型根据处理文本方式的不同,可以分为三类:离散扩散模型(DDPM,DiffusionBERT),Bit扩散模型(Bit Diffusion),连续扩散模型(Diffusion-LM)。这三类扩散模型后续都有相应的用在image caption上的研究,分别是基于连续扩散模型的DiffusionCap,基于Bit扩散模型的SCD-Net,基于离散扩散模型的DDCap。

DiffusionCap

DiffusionCap是基于连续扩散模型Diffusion-LM提出的一种应用于图生文的模型。它的总体结构如下图所示:

模型结构详解

1. 视觉编码器(Visual Encoder)

  • 架构选择
    使用预训练的 CLIP(ViT-B/32) 或 ViT-Base/32 作为视觉编码器,模型参数在训练过程中 保持冻结,不参与反向传播。
  • 特征提取
    • 输入图像通过视觉编码器提取全局特征,取 [CLS] 位置的输出向量(CLIP为512维,ViT为768维)。
    • 通过一个 线性投影层 将视觉特征映射到与文本嵌入相同的维度(例如BERT的隐藏维度,通常为768维)。

2. 扩散语言生成组件(Diffusion Language Generator)

  • 文本预处理
    • 使用 BPE分词器 对文本进行分词,低频词(出现次数<10)替换为 [UNK]
    • 句子被填充或截断为固定长度(如32 tokens),末尾添加 [END] 标记(若未截断)。
    • 分词后的token通过 嵌入层 转换为连续向量(维度与视觉特征对齐)。
  • 扩散过程
    • 前向过程(加噪):对文本嵌入逐步添加高斯噪声,噪声强度由 余弦调度器 控制。
    • 反向过程(去噪)
      • 输入拼接:扩散后的文本嵌入与投影后的视觉特征 拼接(而非相加),形成联合输入序列。
      • 时间步嵌入:扩散时间步  通过 正弦位置编码 嵌入为向量,拼接至输入序列头部(或逐元素相加)。
      • BERT去噪:拼接后的序列输入至 BERT模型,预测当前步的干净文本嵌入。
      • LM头:BERT输出通过线性层(LM头)生成每个token的logits,经softmax得到概率分布。
  • 离散化(Rounding)
    • 去噪后的连续嵌入通过 KNN搜索 或 最近邻匹配 映射回离散token(避免直接使用argmax以减少 [UNK] 生成)。

训练过程详解

1. 损失函数

2. 训练策略

  • 优化器
    使用 AdamW 优化器,初始学习率 ,线性学习率衰减策略。
  • 批次与资源
    • 单卡训练(NVIDIA 3090,24GB显存),COCO数据集批次大小=64,Flickr30k批次大小=32。
    • 训练50个epoch,耗时约12小时(COCO)。
  • 噪声调度器
    采用 余弦调度器(优于线性和平方根),噪声强度  随扩散步  非线性增加。

3. 关键超参数

  • 文本序列长度:固定为32 tokens(通过填充或截断)。
  • 扩散步数 :通常设置为1000步(推理时可通过加速算法减少至50-100步)。
  • 嵌入维度:COCO为256维,Flickr30k为128维。

生成(Decoder)过程示例

  1. 初始噪声:从高斯分布采样初始噪声
  2. 迭代去噪
    • 对每个扩散步 ,将当前噪声  与视觉特征拼接,输入BERT预测 
  3. 离散化
    • 最终  通过KNN映射为token序列,生成完整描述。

补充说明(这一节是讲我自己不清楚的部分,后面复习的时候不用看)

1. LM头(Language Model Head)的作用与过程

在DiffCap中,LM头是一个关键的组件,负责将BERT输出的连续表示转换为具体的词汇概率分布。以下是详细步骤:

步骤说明

  1. BERT输出
    经过扩散去噪后,BERT模型输出的每个token位置对应一个 连续向量(例如768维)。

  2. 线性层(LM头)
    这些连续向量通过一个 线性变换层(即全连接层)映射到 词汇表大小维度(如COCO数据集的8016个token)。

    • 例如,若词汇表大小为8016,线性层将768维向量转换为8016维的logits(每个维度对应一个token的未归一化分数)。

  3. Softmax归一化
    Logits经过Softmax函数转换为 概率分布,表示每个token在当前位置出现的可能性。

    • 例如,Softmax后,第5000个维度可能对应概率0.8,表示该位置生成第5000个token的概率较高。

直观理解

  • 类比MLM任务
    类似于BERT的掩码语言模型(MLM)任务,LM头的作用是预测被遮蔽的token。在DiffCap中,LM头预测的是去噪后的token分布。

  • 与自回归模型区别
    自回归模型(如GPT)逐token生成,而DiffCap的LM头在扩散过程中并行预测所有token的概率分布,从而实现非自回归生成。


2. KNN搜索/最近邻匹配:避免[UNK]的生成策略

问题背景

  • 低频词与[UNK]
    在分词阶段,低频词(如出现次数<10)会被替换为 [UNK] token。若直接对LM头的概率分布使用 argmax,模型可能倾向于高频词或 [UNK],导致生成结果中出现大量 [UNK]

解决方案:KNN/最近邻匹配

  1. 连续嵌入空间

    • 去噪后的每个token对应一个 连续嵌入向量(如256维)。

    • 所有已知token的嵌入向量在训练时已被学习并存储在嵌入层中。

  2. 最近邻搜索

    • 对每个去噪后的嵌入向量,计算它与 嵌入层中所有token嵌入的余弦相似度(或欧氏距离)。

    • 选择 最接近的Top-K个token(如K=5),再从这K个候选中选择概率最高的token。

  3. 避免[UNK]的机制

    • 在搜索时,可以 排除嵌入层中的[UNK] token,强制模型选择有效词汇。

    • 例如,即使 [UNK] 的嵌入距离最近,也会跳过它,选择次优的有效token。

具体示例

假设去噪后的嵌入向量为 ,嵌入层包含以下token嵌入:

  • 房屋[UNK]

计算  与每个嵌入的相似度:

  • ,

  • ,

  • ,

  • .

若直接选最相似,结果为 [UNK]
但通过 排除[UNK],实际选择 (次优但有效)。

DDCap

DDCap是基于离散扩散模型D3PM模型提出的一种图生文模型。其总体结构如下:

图像编码器、文本预处理、扩散过程与文本生成详解

1. 图像编码器(Image Encoder)

模块功能:提取图像语义特征,作为生成文本的条件输入。

  • 架构:采用 CLIP-ViT-B/16 模型,基于 Vision Transformer(ViT)。
    • 图像分块:输入图像(224×224)被分割为 16×16 的块(共 14×14=196 块)。
    • 线性投影:每个图像块通过线性层映射为 768 维向量
    • 位置编码:为每个块添加可学习的位置嵌入,保留空间信息。
    • Transformer 层:12 层 Transformer,每层含 12 个注意力头,输出全局 [CLS] 标记的嵌入作为图像特征。
  • 输出:图像特征为 768 维向量,用于后续文本生成的跨模态注意力。

2. 文本预处理(Text Preprocessing)

模块功能:将原始文本转换为模型可处理的离散标记序列,并添加噪声。

  • 分词:使用 GPT-2 的 BPE 分词器(词汇表大小 50,257),将文本转换为标记 ID 序列。
  • 填充与截断:序列填充至 最大长度 20,短文本补 [PAD],长文本截断。
  • 噪声添加(前向扩散)
    • 初始状态:真实文本标记
    • 噪声策略
      • 每个标记以概率 替换为 [MASK],以  替换为随机标记,保留概率 
      • 噪声调度:线性增加 ,扩散步数
    • 最终状态:经过  步后,所有标记变为 [MASK]。

3. 前向扩散过程(Forward Diffusion Process)

模块功能:通过马尔可夫链逐步添加噪声,模拟文本退化过程。

  • 时间步嵌入
    • 扩散步数  通过正弦-余弦位置编码映射为向量
    • 嵌入向量用于 自适应层归一化(AdaLN),调整 Transformer 层的归一化参数。

4. 反向去噪过程(Reverse Denoising Process)

模块功能:通过训练好的 Transformer 解码器,从含噪声文本逐步恢复原始文本。
实现细节

  1. 输入
    • 含噪声文本 (初始为全 [MASK])。
    • 图像特征 (来自 CLIP-ViT)。
    • 时间步嵌入 
  2. Transformer 解码器
    • 结构:12 层 Transformer,每层包含:
      • 自注意力:文本标记间的双向注意力。
      • 跨模态注意力:文本标记与图像特征的交叉注意力(Query 来自文本,Key/Value 来自图像)。
      • AdaLN:根据时间步嵌入调整层归一化的参数。
    • 输出:预测原始文本  的概率分布(每个位置的词汇表 logits)。
  3. 去噪步骤
    • ,逐步生成
      • 预测
      • 根据 和噪声调度表,采样生成
    • 最佳优先推理:每步固定置信度最高的前 个标记(如)。

5. 从预测的  到文本的转换

模块功能:将模型输出的概率分布解码为最终文本。
实现细节

  1. 标记解码
    • 对每个位置的 logits 取 argmax,选择概率最高的标记 ID。
    • 若预测到 [EOS] 标记,提前终止生成。
  2. 后处理
    • 去除重复:检测连续重复标记并删除(如 “a a dog” → “a dog”)。
    • 长度调整:根据预测的长度  截断或填充生成序列。
  3. 文本生成示例
    • 输入图像特征 → 模型生成标记序列 [“a”, “dog”, “running”, “in”, “park”]。
    • 转换为自然语言:“A dog running in a park.”

6. 关键模块总结

模块功能技术细节
图像编码器提取图像语义特征CLIP-ViT-B/16,16×16 分块,12 层 Transformer,输出 768 维 [CLS] 嵌入。
文本预处理文本分词与噪声添加GPT-2 BPE 分词,最大长度 20,线性噪声调度()。
前向扩散模拟文本退化过程马尔可夫链转移概率(保留、[MASK]、随机替换),时间步正弦嵌入。
反向去噪网络逐步恢复原始文本12 层 Transformer,跨模态注意力,AdaLN,直接预测
文本解码将概率分布转换为文本Argmax 选择标记,处理重复与长度,生成最终描述。

7. 创新点与优势

  • 跨模态融合:通过交叉注意力实现图像与文本的高效交互。
  • 动态长度控制:分离长度预测与生成,适应变长文本。
  • 噪声鲁棒性:集中注意力掩码(CAM)屏蔽无效 [MASK],提升生成质量。
  • 双向生成能力:扩散模型支持全局上下文推理,优于自回归模型的单向生成。

该设计在 COCO 数据集上实现了与主流自回归模型竞争的 CIDEr 分数(125.1),并在描述填充任务中展现了显著优势(CIDEr 230.3)。

SCD-Net

SCD-Net是基于Bit Diffusion模型提出的一种图生文模型,其总体结构如下:

图像编码器(Visual Encoder)

1. 输入与特征提取

  • 输入:原始图像通过预训练的Faster R-CNN模型(基于ImageNet和Visual Genome预训练)提取图像区域特征。

  • 区域检测:Faster R-CNN检测图像中的显著区域(如对象、场景元素),每个区域输出一个2048维的特征向量。

  • 降维:通过全连接层(FC)将2048维特征压缩为512维,减少计算复杂度。

2. Transformer编码器

  • 结构:包含3层Transformer编码块,每层包含:

    1. 多头自注意力(Multi-Head Self-Attention):建模区域间的关系。

    2. 前馈网络(FFN):两层全连接,中间通过激活函数(如GELU)连接。

文本预处理(Text Preprocessing)

1. 词汇映射

  • 词汇表:COCO数据集的训练句子经过过滤(词频≥4),得到10,199个唯一词。

  • 二进制编码:每个词映射为14位二进制码,计算方式为:

    • 示例:若词ID为123,则转换为14位二进制字符串(如00000001111011)。

2. 句子表示

  • 输入句子:每个句子转换为  的二进制矩阵(为句子长度)。

  • 填充与截断:统一句子长度为固定值(如20词),超出部分截断,不足部分填充零。


前向扩散过程(Forward Diffusion Process)

1. 噪声调度

  • 时间步:总时间步 ,均匀划分为离散步 

  • 噪声强度:通过单调递增函数 )控制噪声比例

2. 噪声添加

  • 公式:在时间步 ,带噪数据  计算为:

    • 解释:逐步增加高斯噪声 ,噪声占比随 t 增大而升高。

3. 目标

  • 训练信号:模型需从 xt 预测原始数据 x0,损失函数为均方误差(Lbit)。


反向去噪过程(Reverse Denoising Process)

1. 扩散Transformer(Diffusion Transformer)

  • 输入

    • 带噪数据 (维度:)。

    • 视觉特征 (维度:,K为区域数)。

    • 语义条件 (检索句子的二进制编码,维度:)。

  • 关键模块

    1. 语义Transformer

      • 将  与前一时刻预测  拼接,通过全连接层映射。

      • 与检索的语义句子  拼接,输入3层Transformer块,增强语义条件。

    2. 句子解码器

      • 双向自注意力(无掩码),支持并行生成。

      • 输出每个位置的词概率分布 

2. 反向步骤计算

3. 级联优化

  • 级联结构:堆叠2个扩散Transformer,前一级输出  作为后一级的条件输入。

  • 信息融合:在后级扩散Transformer中,将  与当前隐状态拼接(式11),增强语义连续性。


从预测的 x0 转换回文本

1. 二进制位量化

  • 概率映射:解码器输出每个词的概率分布 ,通过加权平均计算二进制位

    •  是词汇表中第  个词的14位二进制码。

2. 词解码

  • 二进制转词ID:将14位二进制码四舍五入为整数,再映射到词汇表中的词。

  • 示例:若二进制码为 00000001111011,则对应词ID 123。

3. 后处理

  • 去填充:移除填充的零,保留有效词。

  • 重复词抑制:通过引导训练策略(GSCST)减少重复词生成

三个模型的对比

1. 图像编码器

  • DDCap:使用预训练的 CLIP ViT-B/16 模型提取图像特征,通过交叉注意力与文本交互。

  • DiffCap:采用 CLIP ViT-B/32 或预训练的 ViT 模型,将图像全局特征投影到BERT的隐藏维度。

  • SCD-Net:基于 Faster R-CNN 提取图像区域特征,并通过多层 Transformer编码器 增强上下文表示。

2. 文本预处理

  • DDCap:使用 BPE分词器(GPT-2风格),将文本转换为离散token,最大长度固定为20。

  • DiffCap:使用 BPE分词器,低频词替换为[UNK],并将每个词映射为二进制位(如14位),支持连续扩散。

  • SCD-Net:将每个词转换为 14位二进制,通过固定长度序列(截断或填充)适应扩散过程。

3. 前向扩散

  • DDCap:离散扩散,逐步将文本token替换为[MASK],噪声强度由时间步控制,最终全为[MASK]。

  • DiffCap:连续扩散,向二进制位添加高斯噪声,噪声强度按线性或余弦调度(如 �� 参数控制)。

  • SCD-Net:连续扩散,将文本二进制位逐步添加高斯噪声,噪声强度由时间步 �(�′) 函数控制。

4. 反向去噪

  • DDCap:基于 Transformer网络,结合图像特征和预测的文本长度,通过“最佳优先推理”固定高置信度token。

  • DiffCap:使用 BERT模型 作为解码器,融合图像特征和噪声文本嵌入,通过自注意力和交叉注意力去噪。

  • SCD-Net:采用 级联Diffusion Transformer,结合语义条件(检索到的相关句子)逐步去噪,并通过自关键序列训练优化生成质量。

5. 从x0到文本转换

  • DDCap:直接取概率最高的token,结合预测的文本长度截断生成结果。

  • DiffCap:通过KNN或softmax将去噪后的连续嵌入映射到词表,选择概率最高的词。

  • SCD-Net:对每个词的二进制位进行加权平均,转换为具体词,并通过量化操作恢复离散文本。


对比表格

模块DDCapDiffCapSCD-Net
图像编码器CLIP ViT-B/16CLIP ViT-B/32 或 ViTFaster R-CNN + Transformer编码器
文本预处理BPE分词,离散tokenBPE分词,然后嵌入连续向量空间词→14位二进制
前向扩散离散替换为[MASK]连续高斯噪声(线性/余弦调度)连续高斯噪声(函数控制)
反向去噪Transformer + 图像特征 + 长度预测BERT + 图像特征 + 自注意力级联Diffusion Transformer + 语义条件 + 自关键训练
x0到文本转换取概率最高tokenKNN/softmax解码二进制加权平均 + 量化
关键技术长度预测、集中注意力掩码、最佳优先推理图像条件融合、时间步正弦嵌入语义条件、级联结构、自关键序列训练
此作者没有提供个人介绍
最后更新于 2025-03-23