#R-Adapter

零样本模型微调新突破,提升鲁棒性与泛化能力

论文提出新颖的Robust Adapter(R-Adapter),可以在微调零样本模型用于下游任务的同时解决这两个问题。该方法将轻量级模块集成到预训练模型中,并采用新颖的自我集成技术以提高超出分布范围的稳健性,并大幅减少存储开销。

大规模图像-文本预训练模型实现了零样本分类,并在不同数据分布下提供了一致的准确性。然而,这些模型在下游任务中通常需要微调优化,这会降低对于超出分布范围的数据的泛化能力,并需要大量的计算资源。


论文提出新颖的Robust Adapter(R-Adapter),可以在微调零样本模型用于下游任务的同时解决这两个问题。该方法将轻量级模块集成到预训练模型中,并采用新颖的自我集成技术以提高超出分布范围的稳健性,并大幅减少存储开销。此外,论文提出了针对视觉-语言下游任务设计的MPM-NCE损失,确保多个图像-文本对的精确对齐和具有区分性的特征学习。

论文地址:https://www.arxiv.org/abs/2408.05749

论文代码:http://cvlab.postech.ac.kr/research/R-Adapter

Introduction

大规模联合图像和文本数据预训练模型的出现在计算机视觉领域引起了范式转变。通过对大量图像-文本对的嵌入进行对齐,这些模型实现了零样本推断,并展现出在不同数据分布下广泛泛化的显著能力。尽管它们在零样本情境下表现出色,但它们无法与监督学习模型相媲美,需要进行微调以发挥其全部能力。然而,传统的全面微调会产生两个主要挑战:1)全面微调损害了模型对于超出分布范围(OOD)数据的泛化能力,而这对于数据变异性不可预测的实际应用至关重要。2)它需要大量的计算资源、内存和存储,而随着大规模预训练模型的不断增大,这是不切实际的。

51c视觉~合集24_视觉

最近,针对这些挑战提出了几种微调方法。稳健微调的目标是在微调零样本模型的同时保持对OOD的鲁棒性,而参数高效微调(PEFT)仅更新一小部分参数,同时保持预训练参数的冻结状态。然而,每种方法只解决其中一个挑战,同时在另一个挑战上仍然存在不足。如图1所示,现有的稳健微调方法仍然需要微调整个模型,导致训练代价高昂。此外,它们仅针对分类任务,因此通常仅训练图像编码器,从模型中排除了零样本推断能力。另一方面,与稳健微调相比,PEFT在分布偏移下的性能显著滞后。它们的关键缺点凸显了需要新的微调方法,同时解决稳健微调和PEFT分别应对的两个挑战。

本文提出了一种名为稳健适配器(R-Adapter)的新型微调方法,旨在提高PEFT的稳健性,并增强稳健微调的效率。在适配器微调方法的基础上向预训练模型添加额外的轻量级模块,R-Adapter引入了新颖的自我集成策略,以增强OOD的稳健性。

受到在权重空间中平均多个模型时观察到的稳健性增益的启发,通过一种独特的方式在单个模型内实现这种策略。这种方法在任务特定性能和针对分布偏移的稳健性之间取得了良好的平衡,同时显著降低了存储成本。具体而言,R-Adapter通过三种自我集成技术实现这一目标。它随机丢弃适配器模块,从而动态生成并集成不同子网络,以各种配置组合适配器和预训练层。此外,累积适配器权重以形成一个时间集成,捕捉整个学习过程中产生的所有模型。此外,通过重新缩放适配器的权重,并通过重新参数化将其整合到预训练层中,论文实现了在没有两个单独模型的情况下,在预训练和微调模型的权重之间实现无缝的线性插值。

此外,论文提出了一种名为Multi-Positive Margin NCE(MPM-NCE)损失函数,专为在视觉-语言下游任务上进行有效微调而设计。这些任务通常涉及复杂的关系,其中多个图像可以对应于相同的文本,反之亦然。与传统的对比损失(例如InfoNCE)不同,后者接受单一正样本对,并因此经常导致这些关系中的语义不匹配,MPM-NCE考虑了多个正样本对,从而更精确地对齐跨各种图像和文本对。此外,MPM-NCE引入了一个角度边距以惩罚负样本对,使模型能够学习对下游任务至关重要的高度区分的特征。因此,所提出的损失函数显著改善了任务特定性能,在ID和OOD环境下都带来了益处。

论文的方法在微调后实现了零样本推理,在图像分类任务之外扩展了其适用性范围,适用于广泛的应用领域。为了展示其多功能性,论文提出了一个新的用于稳健微调的评估基准,包括五个任务:三种情景下的图像分类任务、跨模态检索和开放词汇分割。大量实验证明,与现有的稳健微调和PEFT方法相比,论文的方法在分布转移条件下表现出卓越性能,同时使用的参数更少。

本文的主要贡献有四点:

提出了一个高效且多功能的稳健微调框架,融合了PEFT和稳健微调的优势,这是第一个兼具两者优势的方法。

提出了R-Adapter,采用自集成技术,借助单个带有适配器的模型实现权重空间集成。能够在减少存储成本的同时增强鲁棒性,因为不需要多个模型。

开发了适用于微调的MPM-NCE损失,利用多个正样本对和引入角度间隔,确保了多个图像-文本对的精确对齐和具有区分性的特征学习。

首次将稳健微调的基准拓展到图像分类之外的任务,包括跨模态检索和开放词汇分割,从而允许评估其广泛适用性。论文的方法在各种任务中取得了最先进的性能,仅微调了13%的CLIP编码器参数。

Proposed MethodPreliminary

  • CLIP Encoders

CLIP由两个编码器组成,分别用于从图像和文本中提取特征。每个编码器由一系列Transformer层组成,每个层包括多头注意力(MHA)、层归一化(LN)和前馈神经网络(FFN)。具体而言,第层Transformer层的公式如下:

51c视觉~合集24_视觉_02

MHA包括对查询、键和值进行  头自注意力操作,通过对输入进行独立的线性投影来实现,其公式为:

51c视觉~合集24_视觉_03

其中  表示拼接,  设为  和  是线性投影矩阵。FFN 由两个线性层和一个非线性层组成:

51c视觉~合集24_视觉_04

其中  ,和  分别是线性投影的权重和偏置;  表示 GELU 函数。

  • Contrastive Learning

CLIP 编码器被训练用于预测哪些文本描述与给定的一组图像匹配, 反之亦然。这通过使用 InfoNCE 损失来进行对比学习来实现, 该损失迫使图像嵌入和其对应的文本嵌入彼此靠近, 并远离批次中的其他文本嵌入。设  和  分别是图像和文本的 CLIP 编码器。给定一个批次包含  个图像-文本对 , 损失函数定义为:

51c视觉~合集24_视觉_05

其中  表示一个可学习的温度参数。

Problem Setup

论文的目标是在保留其固有的离群分布泛化能力的同时,高效地对视觉-语言预训练模型进行各种下游任务的微调。虽然大多数现有的鲁棒微调方法局限于分类任务,但论文将范围扩大到为各种下游任务,如图像分类、跨模态检索和开放词汇分割等,提供鲁棒微调模型。

给定一个图像-文本预训练模型, 目标是使用一个面向目标下游任务的内分布 (ID) 训练数据集  对其进行适应, 其中  表示一个图像,  是对应于该图像的文本描述。同时, 旨在提高模型在一个离群分布 (OOD) 测试数据集  上的性能。内分布和离群分布数据集  和  分别从不同概率分布  和  中采样,当  时即为表现出分布转移。在分类任务中,  表示目标类的文本描述,通过从一组预定义模板中进行采样构建(例如, "一张{ class }的照片")。对于其他视觉-语言任务,  可能是与图像  相关联的标题之一。

Robust Adapter (R-Adapter)

为了实现高效且鲁棒的微调,论文引入了基于PEFT框架的R-Adapter。PEFT框架在微调少量附加的可学习参数的同时冻结预训练模型,但在训练中对该框架的朴素应用可能会导致对内分布数据的显著偏向(参见表2)。受到集成增强在各种分布下的泛化能力的启发,R-Adapter设计了三种新颖的自集成策略,以实现鲁棒微调而不在训练和推理期间增加计算负载。

  • Design of R-Adapter

R-Adapter建立在适配器微调框架之上,在该框架中向预训练模型添加了轻量级模块。具体而言,R-Adapter中的适配器模块采用了Houlsby适配器的简化版本,去除了非线性层和偏置。该模块被构建为一个残差块,由以下权重矩阵组成:

51c视觉~合集24_视觉_06

其中,  表示预训练块的输出,  是论文适配器的权重矩阵。对于全样本学习, 保持  的满秩结构以保留足够的容量。在少样本学习中, 可以通过将  分解为低秩矩阵  的乘积来采用瓶颈结构, 其中 , 且秩  。这种分解避免了过参数化, 并显著减少了参数数目和计算量。

51c视觉~合集24_视觉_07

在图像和文本编码器的每个Transformer层中部署适配器,放置在MHA(Multi-Head Attention)和FFN(Feed-Forward Network)层之后,如图2所示。

由于适配器之前没有非线性结构, 可以通过将其与最接近的预训练层集成进行重参数化,从而在推理过程中消除适配器的额外计算开销。用  表示适配器之前的预训练层的权重,可以是来自 MHA 的  或者 FFN 中的 , 相应的偏置  是 FFN 中的  。给定预训练层的输入 , 那么重新参数化的过程如下进行:

51c视觉~合集24_视觉_08

其中,  是单位矩阵,  。

  • Dynamic Ensemble by Adapter Dropping

为了增强R-Adapter的OOD鲁棒性,加入适配器丢弃的动态集成技术。在训练过程中,适配器模块以以下方式被随机停用:

51c视觉~合集24_视觉_09

其中,  是从  中抽取的独立变量,  是适配器丢弃的概率。

与用于特征稀疏性的dropout或用于模型深度减少的drop-path不同,该技术独特地专注于在保持预训练特征的同时随机禁用适配器层。适配器丢弃不适用于推理阶段,这样可以创建一个由预训练层和适配器层组合而成的子网络集合。这种策略能够同时保留预训练知识和微调知识的动态集成多模型,从而在ID和OOD数据上提升性能。

  • Temporal Ensemble by Accumulation

通过利用适配器权重的历史累积,引入一个时间集成策略来提高模型的鲁棒性。在训练过程中,通过对多次迭代中的权重进行平均,集成技术捕捉到对特征空间的更广泛了解。累积适配器的权重则通过指数移动平均进行更新:

51c视觉~合集24_视觉_10

其中,  是控制动量更新速率的系数。这种方法在内存使用方面非常高效, 因为只有适配器的参数进行了动量更新, 而不是整个模型的参数。在推理阶段, 利用累积的权重  来计算重参数化权重  和偏置  。

  • Weight-space Ensemble by Re-scaling

最后,引入一种通过重新调整参数实现预训练层和微调层之间的权重空间集成的策略。传统的权重空间集成(WiSE-FT)在原始预训练参数和微调参数之间进行线性插值,因此需要存储两个独立的模型。相比之下,论文采用重参数化的权重作为微调层的权重,从而进化了这个概念。我们在推理时重新调整适配器的权重并对其重参数化,将权重空间集成简化为单一模型内的实现。该过程可以表达如下:

51c视觉~合集24_视觉_11

这里,  表示集成的权重,  是一个重调整系数。系数  充当插值因子, 调整原始预训练权重  与微调层调整权重之间的平衡。这种技术不仅可以提高在分布转移下的准确性, 也能在 ID 数据上保持高性能。关键是, 与 WiSE-FT 不同, 该方法不需要在存储中维护两个单独的完整模型,因此更有效地促进了更节省存储空间的权重空间集成。

MPM-NCE Loss for Downstream Task

为了增强下游任务的学习能力,使用与任务特征密切对齐的损失函数至关重要。视觉-语言任务通常涉及多个模态之间的对应关系。例如,在分类任务中,对同一类别使用不同的文本模板可能导致多个文本描述与单个图像匹配,反之亦然。这种情况在涉及图像和标题的跨模态检索任务中也会发生。当将零样本模型调整到新任务时,一种常见方法是使用预训练中使用的InfoNCE损失。然而,对于存在多个正样本的任务,该损失并不理想,因为它只考虑了单个正样本对。此外,InfoNCE学习了正负样本之间的顺序,这可能不会为下游任务产生足够有区分力的特征。

为了解决这些限制,论文提出了MPM-NCE损失,旨在适应这些任务的多正样本性质,同时增强所学嵌入的区分能力。这个损失函数有两个关键改进。首先,使用软标签为多个正样本对分配相等的概率,公式如下:

51c视觉~合集24_视觉_12

其中  表示样本  和  之间的正关系,  是包括自身在内的样本  的正样本集合,  是一种平滑标签噪声。这种软标签确保在下游任务中正确对齐多个图像-文本对。此外, 软标签还可以包含 , 通过对标签引入小的扰动来降低过拟合风险。

第二个改进是对负样本对应用边界。这个边界通过确保负样本对不仅是不同的,而且还要被一定的阈值分开,增强了所学特征的区分度。融合了这些改进,MPM-NCE公式如下:

51c视觉~合集24_视觉_13

其中温度  被设为常数值0.01,  对于正关系为0,对于其他情况为  。因此,MPM-NCE损失鼓励模型正确对齐多个图像-文本对,并学习具有区分度的特征,从而在ID和OOD下显著提高性能。

Experiments

51c视觉~合集24_视觉_14

51c视觉~合集24_视觉_15

51c视觉~合集24_视觉_16

51c视觉~合集24_视觉_17

51c视觉~合集24_视觉_18




#仅用合成数据训练模型到底行不行

在许多鲁棒性指标(校准、背景偏差、形状偏差等)方面,使用合成数据训练的自监督和多模态模型的表现与其在真实图像上训练的模型相当。

首个针对使用合成数据训练的模型在不同稳健性指标上进行详细分析的研究,展示了如SynCLIP和SynCLR等合成克隆模型,其性能在可接受的范围内接近于在真实图像上训练的对应模型。这一结论适用于所有稳健性指标,除了常见的图像损坏和OOD(域外分布)检测。另一方面,监督模型SynViT-B在除形状偏差外的所有指标上均被真实图像对应模型超越,这清楚地表明了对更好监督合成克隆的需求。通过详细的消融实验,作者发现使用描述或CLIP模板可以产生更稳健的合成克隆。重要的是,将真实数据与合成数据混合可以改善大多数指标上的稳健性衡量。

论文地址:https://arxiv.org/abs/2405.20469

论文代码:https://synbenchmark.github.io/SynCloneBenchmark

Introduction

现代机器学习方法的性能瓶颈主要受到标签数据的质量和数量的限制。多个研究表明,神经网络的泛化误差遵循与数据集大小相关的神经缩放法则,即测试误差随着数据集大小的对数线性减少。此外,数据集的多样性和公平性也是影响现代神经网络泛化性能的重要因素。不幸的是,整理多样、公平且规模庞大的数据集既耗时又昂贵。

大规模图像生成模型的出现,如Stable Diffusion,重新激发了利用生成图像训练模型以执行各种下游任务的兴趣,期望减轻对高质量注释的需求。有研究仅使用来自Stable Diffusion生成的图像对下游分类器进行监督训练,还有的研究仅使用合成图像和提示训练自监督模型(如SimCLR)和多模态模型(如CLIP)。这些模型在下游任务(如分类和分割)中能够与基于真实数据训练的模型相媲美或超越,作者将只使用生成数据进行训练的这类模型称为合成克隆(synthetic clones)。

现代机器学习模型越来越多地被应用于解决诸如自动驾驶和自动医疗辅助等现实问题。随着合成数据在训练模型中的快速进展,必须了解这些模型在现实世界中部署前的鲁棒性。关于合成克隆的最新研究尚未集中于评估这些模型的鲁棒性。然而,已知在合成或生成数据集上训练的模型会遭遇一些缺陷,例如模型崩溃,即模型遗忘长尾类别或学习到与训练数据集不同的分布。

51c视觉~合集24_视觉_19

作者旨在提供一个综合基准,以评估合成克隆模型与在真实图像数据集上训练的最先进(SOTA)基线模型的鲁棒性。将三类合成克隆模型——监督型、自监督型和多模态模型——与九个使用真实图像训练的强基线模型进行基准测试。作者评估了与形状、背景和上下文偏差相关的鲁棒性指标,还将这些模型与对抗性攻击和常见图像破坏进行基准测试。最后,作者测试了这些模型与使用真实数据训练的模型相比,在校准方面的表现,如图1所示。

为克服仅使用合成数据带来的某些缺陷,作者进行广泛的消融实验,研究合成克隆的鲁棒性如何随着以下因素而变化:(i)与合成数据和真实数据的联合训练;(ii)合成样本数量的增加;以及(iii)在使用Stable Diffusion生成图像时提示的影响。

作者的发现可总结为:在许多鲁棒性指标(校准、背景偏差、形状偏差等)方面,使用合成数据训练的自监督和多模态模型的表现与其在真实图像上训练的模型相当。

Background: Synthetic Clones

在下面分析各种合成克隆模型之前,简要回顾一下如何使用Diffusion模型生成合成图像,以及各种类别的模型是如何在这些合成图像上进行训练的。

Synthetic data generation

合成克隆模型中的合成图像通常是使用大规模预训练的图像生成模型生成的,例如Stable Diffusion或Imagen。生成模型的输入是高斯噪声和条件文本提示。合成克隆可以分为三类,即监督合成模型、自监督合成模型和多模态合成模型。

51c视觉~合集24_视觉_20

Supervised models using generated data

为了训练一个有监督的分类器, 首先使用 Stable Diffusion 生成一幅图像, 条件是提示 "  inside b"。这里,  是从数据集(例如 ImageNet-1K)的所有类标签中随机采样得到的真实类别名称,  是与  相关联的上义词( hypernym ), b 表示 Places 365 数据集中的 3 65 个类别之一。在 WordNet 层次结构中, c 的上义词是 c 在层次结构中的父节点。然后用生成图像的预测标签和用于生成图像的采样真实类别标签之间交叉嫡损失(  )对分类器进行端到端训练, 如图 1 (底部) 。有研究创建了 120 万这样的提示, 并生成相应图片来训练一个 Re sNet50 模型。同样地, 还有研究只使用类名 c 来生成 1600 万张图片, 然后用生成图片和真实类别标签来训练 ViT-B 模型。

  • Self-supervised models using generated data

合成自监督模型即SynCLR和StableRep,首先从一个概念库中随机抽样一个概念标签。这个概念库通常是使用WordNet提取的同义词集或来自Wikipedia的常见单词、双字词组和标题构建的。然后将这个抽样的概念标签输入到一个大型语言模型(LLM)中,用于生成额外的上下文信息。最终提示由概念标签和上下文信息连接而成。然后使用这个提示来生成张图像。之后,还会应用一些在SimCLR模型中也使用的增强(Aug.)。SynCLR模型使用多正对比损失( )进行训练,如图1(左上角)。

  • Multi-modal model using generated data

多模态合成CLIP模型也使用从概念库中随机抽样的概念标签。这个概念标签连同从Places365数据集的类别中随机抽样的一个随机地点标签一起输入到一个LLM中,用于生成一个标题,随后用于条件图像生成。这些图像用于使用生成的图像和用于生成图像的提示之间的对比损失来训练CLIP模型,如图1(右上角)所示。

Robustness AnalysisSetup

将要分析的模型分为监督模型、自监督模型和多模态模型。

对于合成的监督模型,使用了来自于现有合成监督研究的ResNet50和ViT-B模型,这些模型在大约1M使用提示生成的图像上进行训练。用于创建提示的类标签是从ImageNet-1K数据集的类中抽样得到的。为清晰起见,将它们在所有实验中称为SynResNet50和SynViT-B。将这些模型与在真实ImageNet-1K数据集上训练的强监督模型进行比较,如ResNet50、ViT-B、DeiT-III、Swin变换器和Conv-NeXt,所有基线模型均来自PyTorch图像模型库。

在自监督的情况下,使用了SynCLR模型,该模型在600M合成图像上进行了训练。使用诸如DINOv2、MAE和MOCOv3(在ImageNet-1K上训练)的最先进自监督模型作为自监督基线,所有基线模型的检查点均来自timm库。为了公平比较,对所有模型使用具有16的块大小的ViT-B骨干网络。对所有自监督模型进行线性探测,在这些模型的顶部训练一个单层线性分类头,使用ImageNet-1k数据集进行90个周期的训练。我们搜索了十个学习率,以找到每个模型的最佳线性分类器。

最后,对于多模态的情况,分析了来自于的合成CLIP模型,称之为SynCLIP,该模型在371M合成图像上进行了训练。将此模型与来自OpenCLIP的CLIP实现进行比较,该实现是在400M真实图像上训练的。使用ViT-B骨干网络来允许公平比较。对于CLIP和SynCLIP,我们报告了零样本结果。

Calibration

随着神经网络开始应用于像自动驾驶和医疗保健这样的安全关键任务,不仅要预测准确,还要准确报告其预测的置信度。校准可以帮助理解模型预测的可靠性以及最终用户是否可以信任模型的输出。神经网络的校准通常使用期望校准误差(ECE)来衡量。ECE衡量了模型置信度与模型准确性之间的期望绝对差异。在作者的研究中,研究了与使用真实数据训练相比,在合成图像上训练对模型校准的影响。

51c视觉~合集24_视觉_21

ECE指标的结果如图3所示,分别为在ImageNet-1k数据集上进行分布内(ID)校准(训练和测试分集来自同一数据集)的结果,以及在ImageNet-R和ImageNet-A 数据集上进行分布外(OOD)校准(训练和测试分集来自不同数据集)的结果。可以得出以下结论:

Observation 1:合成克隆在分布内情况下大多数是校准良好的,甚至在某种程度上也适用于在ImageNet-R上的分布外。但是在ImageNet-A上,合成克隆的外部分布校准效果较差。

这可能是因为从预训练Diffusion模型(在从网络上抓取的数据上进行训练)生成的合成数据已经捕捉到了ImageNet(从网络上抓取的图像)和ImageNet-R(由丰富的卡通和素描组成,这些内容在互联网上广泛存在)数据集的分布。另一方面,ImageNet-A数据集包含了在互联网上很难找到的自然对抗示例。因此,合成克隆和基线模型在这个数据集上都表现出较差的校准结果。然而,使用真实数据集训练的模型通常对ImageNet-A的校准效果更好,可能是由于数据集中固有的噪音造成的。

  • Out of distribution (OOD) detection

OOD检测对增强最终用户对模型的安全性和可靠性的信任至关重要,因此需要评估在合成数据上训练对模型OOD检测能力的影响,确定一个模型在多大程度上能够区分来自训练数据分布(ID)的样本和来自另一种分布的样本。

OOD 检测任务可以被表述为模型预测概率上的二分类任务。对于权重为  的模型 , 如果该样本的最大预测概率高于预定义的阈值 , 即 , 则将输入样本  分类为 I D ; 如果 , 则分类为 OOD 。OOD 检测可以使用二分类的标准指标进行评估,例如 AUROC 。另外, 作者还报告了在分布内样本的真正例率为  时 00D 样本的假阳性率(  PR@95 ) 。

51c视觉~合集24_视觉_22

表1显示了所有模型在三个OOD数据集上的结果,即SUN397、Places365和iNaturalist,其中ImageNet-1K是ID数据集。可以得出以下结论:

Observation 2:在OOD检测方面,SynCLR和SynCLIP与其类别中的基准模型相媲美。即使比基准模型多16倍的数据,SynViT-B在OOD检测方面仍明显落后于用真实数据训练的监督模型。

Robustness

  • Adversarial robustness

对抗学习旨在了解模型对于由对手操纵的例子的鲁棒性, 这些例子在人眼看来似乎相似, 但会改变模型的预测。作者想要探究在合成数据上训练的模型是否更容易受到对抗性攻击, 使用了两种流行的白盒攻击方法, 即快速梯度符号法(FGSM)和投影梯度下降(PGD)攻击。这些白盒攻击需要对手了解模型的梯度。FGSM 攻击通过模型的预测梯度相对于其输入的缩小步长  来扰乱输入图像, 可以写成 , 其中  表示输入图像,  表示损失函数相对于  的梯度,  表示输入图像  的标签。PGD 攻击是 FGSM 攻击的迭代版本, 随后将对抗性输入的投影限制在围绕输入  的  球内。 值表示允许的最大扰动。作者在 PGD 和 FGSM 攻击中使用  值为  , PGD 攻击的步数设置为 20 。

51c视觉~合集24_视觉_23

作者报告了测试集中干净和对抗性样本的准确率, 将对抗鲁棒性指标  定义为对抗性和清洁样本之间相对准确率, 公式为 , 其中  是对抗性样本的准确率,  是清洁样本的准确率。可以得出以下结论:

Observation 3:合成克隆模型在面对对抗性示例时明显更易受攻击,尤其是监督式合成克隆模型,相比于用真实数据训练的模型。通过大量合成数据训练的自监督合成克隆模型,即SynCLR,在其相应类别中与真实图像基准模型略有可比。

作者发现MAE在所有模型(包括合成模型和真实模型)中表现最差,这表明训练目标以及训练数据集的大小是决定模型对抗鲁棒性的重要因素。

  • Robustness against common corruptions

接下来,评估所有模型在现实世界中常见的噪声损坏下的表现,在ImageNet-C和ImageNet-3DCC数据集上进行评估。ImageNet-C包含19种自然发生的图像损坏,如高斯噪声、爆发噪声、运动模糊、弹性变换等。比如ImageNet-3DCC包含12种常见的考虑了深度因素的损坏,例如  轴模糊、远近聚焦误差等。

51c视觉~合集24_视觉_24

由于时间和资源的限制, 作者仅报告十个常见损坏任务的结果(每个数据集各五个), 分别清晰样本和损坏样本的准确率以及所有损坏的平均准确率。作者还报告平均  指标, 该指标 见表 3 , 可以得出以下结论:

Observation 4:与用真实图像训练的基准模型相比,合成克隆在图像常见损坏方面明显不够稳健。

所有类别的模型中,合成克隆的平均明显较低。真实数据集中的图像本身就存在这些常见的损坏,因此在真实数据上训练已经能够使得结果模型对噪声更加稳健。目前合成图像缺乏这些损坏,使得合成克隆对常见图像损坏非常敏感。

Biases

  • Context bias

定义上下文偏差为模型倾向于使用上下文线索,例如位置来对物体进行分类,而不是实际使用物体外观。这种上下文偏差存在是因为大多数大规模数据集由从互联网上获取的未加筛选的数据组成。例如,与飞机在跑道上相比,飞机在森林中的图像几乎不可能存在。使用FOCUS(Familiar Objects in Common and Uncommon Settings)数据集来评估上下文偏差,该数据集包含大约21,000张图像。数据集中的每个图像都带有对象类别、时间、位置和天气标签的注释。

FOCUS 将数据集分成常见样本和不常见样本的子集。不常见样本在现实世界中很少见, 例如 "飞机在森林中",或者在 ImageNet 数据集中由于用于构建的标签而罕见(例如, ImageNet 中没有海上飞机的标签)。数据集被划分为互斥的分区 , 其中  是不常见属性的数量。总数据集被划分为四个分区,从  (仅包含常见对象)到  (包含三个不常见属性)。

51c视觉~合集24_视觉_25

作者报告了  指标(具有  个不常见属性的上下文偏差),它定义为在没有不常见属性的分区  上的准确率与具有  个不常见属性的分区  上的准确率之间的相对准确率, 即  。例如,  衡量了  和  之间的相对准确率。结果见表 4, 可以得出以下结论:

Observation 5:与用真实数据训练的基准监督模型和自监督模型相比,自监督合成克隆对上下文变化具有更强的稳健性。监督合成克隆SynViT-B的性能与在真实数据上训练的ViT-B模型相当。同时,SynCLIP对上下文变化更为敏感,但其性能仍可与DINOv2和ConvNeXt等模型相媲美。

  • Shape-texture bias

儿童学会根据形状辨认和组织物体,并更偏向于物体形状而非颜色和纹理。已经证明,将网络偏向形状可以增强其对常见失真的鲁棒性。这表明,神经网络的鲁棒性通常受益于将物体以形状而非纹理进行分类的偏好。生成自生成对抗网络(GANs)的图像通常具有高频率伪影(表明高纹理偏差)。Diffusion模型也表现出类似的模式,尽管这些模式更加淡化。这些伪影与真实图像形成鲜明对比,真实图像中不包含这些高频率伪影。为了解是否在Stable Diffusion的合成图像上训练会使网络偏向纹理,作者使用了cue conflict数据集。该数据集包含大约1200张图像,属于16个类别,其中图像的纹理和形状相互冲突。

51c视觉~合集24_视觉_26

图4展示了所有模型的分类平均形状偏差,作者还展示了合成克隆和一些基准模型的类别形状偏差结果。可以得出以下结论:

Observation 6:合成克隆在形状偏差上往往比在纹理偏差上更为明显。特别是,SynCLIP在形状偏差指标上优于所有模型,而SynViT-B在所有分类和自监督模型中表现最佳。SynCLR模型的性能与MOCOv3模型comparable,并在形状偏差指标上优于MAE模型。

在StyleGANv2的合成数据中也观察到了类似的结果。作者的结果表明,合成数据在形状上具有多样性,导致合成克隆模型更倾向于形状偏差,但这可能表明生成的图像缺乏纹理的多样性,使网络更依赖形状进行分类。

  • Background bias

模型的背景偏好可以用来确定模型是否利用图像的背景而不是利用对象本身来做出分类决策。了解模型是否偏向于背景是一种有效的方式,可以帮助我们了解模型是否学习了捷径而非为给定类别学习良好的特征。为了评估模型的背景偏好,利用来自IN-9L数据集的Mixed-Rand和Mixed-Same分区。Mixed-Rand数据集将图像中的前景对象进行分割,并将原始背景与不同类别标签的随机背景进行替换,而Mixed-Same分区则将分割的前景对象放置在相同类别标签的随机背景上。

51c视觉~合集24_视觉_27

表6显示了所有模型在IN-9L数据集的原始、Mixed-Rand和Mixed-Same分区上的准确率,以及BG-Gap。BG-Gap衡量了在Mixed-Rand和Mixed-Same数据集上准确率之间性能差异,并评估了通过将背景更改为与前景不同类别来操纵决策的可能性。可以得出以下结论:

Observation 7:合成克隆模型在背景偏差方面与使用真实数据训练的SOTA基线模型表现相当。

总的来说,作者发现所有模型(合成和真实)对于背景变化都非常稳健。

Ablations

通过消融实验(包括所有CLIP模型)分析影响合成克隆模型稳健性的三个重要因素。

51c视觉~合集24_视觉_28

  • Effect of prompts

在这里,分析了提示对合成克隆模型稳健性的影响。表7显示了使用不同提示(例如:(i)类别名称,(ii)80个CLIP模板,例如“{类别名称}的高质量照片”,用于评估CLIP模型的零样本分类性能,以及(iii)类别名称与来自BLIP2生成的标题组合,例如“Tench[类别标签],一个拿着鱼的人”训练的SynViT-B合成图像模型的结果。从表6可以看出,与仅使用类别名称相比,标题和CLIP模板更适合创建稳健的合成克隆模型。这可以归因于生成了更多描述性文本的多样化图像。

  • Effect of adding real data

接下来,研究在CLIP模型的稳健性上使用真实图像和合成图像数据混合的影响。我们对CLIP模型进行了训练,使用固定的数据集大小(例如371M张图像),其中真实和合成图像被随机选择以创建一个包含真实和合成图像的子集,然后用于训练CLIP模型。表7显示,根据建议添加真实数据可以改善许多关键指标(如ECE、对抗性准确度、形状偏差),同时在其他指标上保持可比性。此外,作者发现仅使用合成图像或合成与真实图像结合进行训练可创建比仅针对真实数据进行训练更稳健的模型。

  • Size of generated data

作者评估了数据集大小对合成克隆训练的影响。通常情况下,增加数据有助于提高SynViT-B和SynCLIP模型的稳健性。在某些情况下,增加更多数据可能会稍微降低性能,这可能是由于增加数据集大小导致数据集多样性减少,以及模型过度拟合于较少多样化的数据造成的。




#预训练无条件扩散生成模型的 training-free

文章介绍了无需额外训练的条件生成方法,这些方法利用预训练的无条件扩散模型通过调整采样策略来生成与给定条件相符的图像。文章重点讨论了几种无需训练的引导技术,并解释了如何通过调整采样过程中的条件分数来实现条件生成。这些方法旨在简化生成过程,提高效率,同时保持图像质量。 

既然是关于扩散模型的 training-free 条件生成方法,guidance 在圈内当然是占据了一席之地的,这主要得益于其简单的使用方式以及直观的理解形式。接下来,就请各位食客们一起来看看这期的食谱吧~!

Guidance 三巨头

说起扩散模型的 guidance 技术,最广为人知的莫过于三巨头了,它们分别是:CG(Diffusion Models Beat GANs on Image Synthesis), SDG(More Control for Free! Image Synthesis with Semantic Diffusion Guidance) 和 CFG(Classifier-Free Diffusion Guidance)。只要一搜比如“扩散模型的引导技术”、"guidance" 等关键字,出来的文章几乎都是讲它们的,甚至仅仅就讲它们,这不免让 CW 感到无聊,毕竟我就是喜欢花里胡哨多姿多彩。

吹咩~

但无奈这三巨头知名度太高,CW 总得给面子提一提它们,尽管与本文主题(i.e. training-free)并不契合,因为众所周知它们三是需要额外进行训练的。另外,这提一嘴也可作为后文介绍其它方法的铺垫,毕竟大部分 training-free guidance 或多或少都受到它们启发,特别是 CG.

CG

CG 全程是 "Classifier Guidance",CW 认为从 score 的角度去理解并结合贝叶斯定理去推导它会比较“有人性”(直观、能够建立起直觉),从而将采样时的条件 score 转化为无条件 score 与 classifier 梯度项之和,即:

51c视觉~合集24_视觉_29

以上为  采样过程所用的 score, 其中  为条件项, 在 CG 中则局限于 class label. 于是, 在无条件情况下训练好的扩散模型可直接用于条件生成, 因为  这一项对于有无条件来说是一样的。但是, 等号右边第二项则表明需要额外添加一个分类器(classifier), 并且是对带噪声的图像  做分类, 这么一来, 常规预训练的分类器就不能直接白嫖过来用了, 因为它们几乎都是基于正常不带噪声的图像来训练和学习的, 所以需要自行训练分类器, 让它学会对噪声图像( 每个时间步的噪声强度不同) 进行分类, 这就是 CG 的最大局限性。

作者在论文中给出了采样流程,其中 Algorithm 1 是针对随机采样(e.g. DDPM)的方法,而 Algorithm 2 则是针对确定性采样(e.g. DDIM)方法。

如 Algorithm 1 所示,CG 其实就是在采样均值  上加了个偏移项,该项等于 classifier 梯度乘上采样方差与 scale 系数,其中 scale 系数是人为设置的,至于为何 classifier 梯度要乘上采样方差,可以这么理解:

在原本无条件的  采样过程中, 根据朗之万采样(Langevin Dynamics), 均值 , 其中第二项便是方差乘 score。而根据 (i) 式, 如今有条件下的 score 已变成 , 于是方差乘以这一项就会多出一项等于 classifier 的梯度乘方差, 从而在原均值  上造成偏移。

OK,继续追击——为何还要针对确定性采样过程而提出 Algorithm 2?

因为既然是确定性采样过程,就代表采样方差 ,如果按照 Algorithm 1 来玩,用作 guidance 的偏移项就会为0,所以造成 guidance 失效,“沦落”为无条件采样生成。

Algorithm 2 巧妙地利用了扩散加噪的噪声与 score 之间的转换关系(https://arxiv.org/abs/1907.05600):

51c视觉~合集24_视觉_30

其中  在时间步  下的噪声标准差, 对于 DDIM 来说则等于  。将以上 替换为  并结合 (i) 式就可得到在有条件下估计的噪声相当于在原来无条件下所估计的噪声加上一个  的偏移项。

至于 Algorithm 1 中的 scale 系数嘛,就是因为作者发现如果没有它模型生成的结果与条件的一致性就不是那么相符,于是设置 scale > 1 来加强 guidance 的程度。直观来看,就是使得采样均值更往条件向量场偏移。当然,这同时也会导致生成多样性的减弱,于是,调控这项系数就相当于在多样性和条件一致性(可控性)之间做 trade-off.

SDG

前面说了,CG 的条件项仅局限于 class label,于是 SDG(Semantic Diffusion Guidance) 就在 CG 的基础上将条件项其拓展至各种语义条件,从而支持更广泛的场景,如文生图、图生图等。

SDG 的方法本质上如 CG 一致,只是将 CG 的 classifier 梯度项根据不同类型的条件改为不同的函数梯度,从而提出了 "guidance function" 的概念,即:

51c视觉~合集24_视觉_31

比如条件是文本的话就可以使用 CLIP 对文本 ll 和每步采样的图像 x_tx_t 分别编码获得 embeddings 然后计算它们之间的余弦相似度来进行引导,此时:

51c视觉~合集24_视觉_32

其中  代表 CLIP 的文本编码器, 而  则代表一个噪声图编码器, 它是基于 CLIP 的图像编码器  微调而来, 微调方式就是尽量拉近  和  的余弦距离, 无需额外的数据标注。

对于图像内容引导的场景, 也可同样使用余弦相似度, 尽量拉近每步采样图像  与参考图像  (在对应时间步加噪)的余弦距离, 即:

51c视觉~合集24_视觉_33

其余的,比如图像风格引导的场景,可选择对齐(align)每步采样图像  与参考图像  (在对应时间步加噪) 之间 feature maps 的 Gram matrix ,至于 feature maps 则使用额外训练好的网络来输出。

SDG 还支持多条件引导,只要将多个 guidance function 按对应 scale 系数加权求和即可,比如:

51c视觉~合集24_视觉_34

SDG 的“麻烦之处”在于通常会额外引入其它模型来计算 guidance function,并且还需要对这些模型进行微调。

CFG

CFG(Classifier-Free Guidance) 给我的感觉是在“玩”,它对(i)式进行移项,将 CG 中用作 guidance 的 classifier 梯度项替换为条件 score 与 非条件 score 的差,从而消除了对 classifier 的依赖,即:

51c视觉~合集24_视觉_35

其中  代表 scale 系数。由于在 CG 中 , 因此将  代入上式就可以方便使用大于 0 的 guidance 系数(更符合使用习惯), 即:

51c视觉~合集24_视觉_36

最后一步利用了前面提到的 score 与噪声之间的转换关系, 就代表每步采样时经过 guidance 调整后估计的噪声值。

CFG “玩出来的代价”是需要重新训练扩散模型,因为它需要学会估计含条件的噪声(需要将条件项也一并输入到模型中)。 为了能够在训练过程中同时学会估计含条件与无条件噪声,在每个时间步以一定概率将条件项 drop 掉(在实现时可以额外设置一个专门的 class embedding 以对应空的条件)以模拟无条件场景。

需要注意的是, 代表没有 guidance(i.e. non-guided),此时无条件噪声项不存在,相当于纯纯的条件采样生成,也就没有所谓的 guidance 了。Guidance 的意义是对原本无条件情况下估计的噪声(score)做校正,将其引导至符合条件语义的方向。

Summary

可见,CG, SDG 和 CFG 都需要额外进行训练,不同的是,前两者训的是额外的模型(扩散模型保持不动),而 CFG 则需要重训扩散模型。

流形思想

相信各位帅哥美女们都听说过大名鼎鼎的流形假设(manifold hypothesis),它是说高维数据通常集中在比它们维数低得多的低维子空间中。神马,你居然没听过..?

接下来 CW 要介绍的这批方法都是围绕着流形思想来展开表演的,虽然它们的招式各异,但究其本质做的都是同一件事——在采样过程中将数据维持在其流形之中而不发生偏离,从而使最终生成的图片看起来真实。

MCG

MCG(Improving Diffusion Models for Inverse Problems using Manifold Constraints) 全称是 "Mainfold Constraint Guidance",它是为改进以往方法在解决逆问题(inverse problem) 时的不足而提出的。不足在于,为满足与观测量的一致性(measurements consistency),以往方法通常都是在每步使用扩散模型的无条件采样后施加一个 projection-based 校正操作:

51c视觉~合集24_视觉_37

其中  代表与观测量和退化矩阵相关的函数。比如在 RePaint 中,  为  为  是加噪后的参考图像,  为 mask 矩阵。

在仔细钻研流形(manifold)思想并受到启发后,MCG 的作者发现,这种 projection-based 的校正操作会使得数据偏离流形,于是提出了带有流形约束的校正项,下面就把舞台交给 MCG ~

主要方法

先来铺垫下关于扩散模型采样的知识。

在连续(continuous)时间的形式下,扩散过程可表达为 SDE,于是去噪采样过程就对应于相应的 reverse SDE,其离散形式可表达为:

51c视觉~合集24_视觉_38

构造不同的  对应不同形式的 SDE,若使用 VP-SDE(DDPM) 或 VE-SDE(NCSN) 则对应为:

其中  代表模型估计的 score. 以往的方法使用扩散模型(论文中更多是指 score model)以观测量  为条件去解决逆问题的方式, 可以表述为如下:

以上第 (8) 式就是前面提到的 projection-based 校正操作。OK,以上是铺垫,接下来作者要放大招了~

众所周知, 在以观测量为条件进行采样生成时, 实际上需要的是条件 score , 虽然手头上只有无条件 score , 但其实抱一下贝叶斯爸爸的大腿(贝叶斯定理)并结合逆问题所定义的观测量分布 , 就可以为二者建立起联系, 从而在模型仅能估计无条件 score 的情形下就能够成功计算条件 score.

在观测噪声为高斯噪声的情况下, 观测量分布就是高斯分布, 于是其对于  的梯度项就能有解析形式并容易计算。这还没完, 由于观测量分布是以原图  为条件的, 而在迭代采样过程中只有每步的采样结果 , 因此还要以此去估计原图 , 再代入到观测量分布并计算梯度项 . 另外, 为了尽可能满足与观测量的一致性(consistency), 作者还是把前面第 (8) 式的 projection-based 的校正操作加进来了。

不过 CW 认为,加入 projection-based 校正操作是 MCG “最不光彩”的一笔,可惜了.. 这也是它被后来的方法 beat 掉的一大原因。

切回正题, 对于计算原图的估计值 , 作者考虑到既然每步采样的中间结果  都对应于(前向)扩散过程相同时间步的状态 , 而后者被建模为以原图  为均值的高斯分布, 那么理想的采样结果  也应该服从相同的分布, 从而也有相同的均值—原图  。缘分来了! 作者发现 Tweedie's formula 这东西能够利用 score 去估计均值, 于是在采样过程中对于  的计算就可以依据以下第 (10) 式。

并且,作者在论文中还证明了前面 (14) 式的梯度项能够使数据呆在流形中而不跑出去,所以它是带有流形约束的梯度项,于是就将此方法取名为 "manifold constrained gradient (MCG)".

  • 几何上的直观解释

这部分提供一些对于 MCG 在几何流形上的直观性解释。

首先, MCG 有个很强的假设就是数据流形在局部是线性的。在以该假设为前提的条件下, 将随着扩散过程加噪到无穷步后的数据分布  看作是超球面 , 那么扩散过程中产生的带噪声数据所处的流形  就可以看作是原数据流形  与最远端超球面  之间的插值结果, 如下图左边部分 (a) 所示。

51c视觉~合集24_视觉_39

51c视觉~合集24_视觉_40

并且,作者还证明了这些 noised 流形  近似于一个球面,球心是数据分布的均值。

接着, 作者又在论文中证明了前面利用 Tweedie's formula 估计后验均值的操作  是原数据流形  的正交投影(orthogonal projection), 其雅克比矩阵  将数据映射到  的正切空间 (tangent space)。

以上也同时表明 score function 只关心数据流形的法向量方向,那么其对于那些仅在数据流形正切空间方向存在差异的数据点,则无法做区分。于是利用观测量进行校正对于解决逆问题就显得尤为重要,因为我们需要重建真实的原始数据。而 MCG 带有流形约束的梯度项正是起到了这个作用,作者在论文中证明了它能够将数据投影至流形的正切空间。

可以将上面等式右边除了  以外的项看作是一个向量 , 那么就相当于将其投影至  所在的方向, 而前面说了它是正切空间  的映射, 于是这个梯度项时时刻刻都会使数据沿着流形的正切空间方向运动。结合 unconditional score 是流形的法向量方向, 二者共同作用下就会使数据在流形球面上运动而不会偏离出去, 类似于圆周运动的向心力与线速度。

由于模型是在扩散过程中的各个 noised 流形  学习估计 score 的,因此在梯度项保证不会偏离这些流形的情况下,模型估计的 score 也会更准确。

前面 (15) 式的 projection-based correction 会远离数据流形(如上图绿色箭头所示),结合 MCG 的带流形约束的梯度项后(见上图红色箭头),会减轻这种现象(如上图黑色箭头所示),但始终还是会有所偏离,这就是为何 CW 觉得加入 projection-based correction 是 MCG 不好看的一笔。

  • 局限性

MCG 的最大局限在于对数据流形有局部线性的假设,其所有推导都是在此前提下进行的,然而实际情况可能并不满足这个前提条件,于是就极大限制了其适用场景。

其次,projection-based correction 会导致数据偏离流形,这个负作用极大地抵消了其对以往方法的改进。

最后,为了能够计算梯度项,论文中仅就观测噪声为高斯噪声的情况给予了讨论。

  • 核心代码

这里就 image inpainting with mask 的场景给出关键步骤的代码实现,代码源于官方 repo(https://github.com/HJ-harry/MCG_diffusion/blob/main/guided_diffusion/gaussian_diffusion.py%23L550),为了更易理解,CW 浅浅地改了下并附上关键注解。

# 每步迭代采样
        for i in indices:
            t = th.tensor([i] * shape[0], device=device)
            if sample_method in ["MCG"]:
                # re-instantiate requires_grad for backpropagation
                img = img.requires_grad_()
                # $p(x_{t-1} | x_t)$
                out = self.p_sample(
                    model,
                    img,
                    t,
                    clip_denoised=clip_denoised,
                    denoised_fn=denoised_fn,
                    cond_fn=cond_fn,
                    model_kwargs=model_kwargs,
                )

                ...  # 省略

            # 观测量 y
            cond = model_kwargs["ref_img"]
            if sample_method == "MCG":
                # $|| y - x_{0|t} ||_2$
                # 仅对 mask 部分计算, 因为 unmasked 部分的观测量是无效的(起不了引导作用),需要模型去生成
                norm = th.norm((cond * mask) - (out["pred_xstart"] * mask))
                # manifold constrained gradient w.r.t $x_t$ 
                # 计算带流形约束的梯度项
                norm_grad = grad(outputs=norm, inputs=img)[0]
                # 用梯度项进行校正 Eq. (14)
                out["sample"] = out["sample"] - norm_grad
                # projection-based correction Eq. (15)
                out["sample"] = out["sample"] * (1. - mask) + \
                                 self.q_sample(cond, t, th.randn(*shape, device=device)) * mask

            ...  # 省略

            yield out

            img = out["sample"]
            # Clears out small amount of gpu memory. If not used, memory usage will accumulate and OOM will occur.
            img.detach_()

DPS

给你看一句话就能明白 DPS(DIFFUSION POSTERIOR SAMPLING FOR GENERAL NOISY INVERSE PROBLEMS)是怎么玩的:

the resulting posterior sampling scheme is a blended version of diffusion sampling with the manifold constrained gradient without a strict measurement consistency projection step

也就是在 MCG 的基础上去掉了 projection-based correction. 看嘛.. 这才是聪明的靓仔!

千万别小看这招,仅仅是这简单的一步(指去掉 projection-based correction)就使得 DPS 能够解决各种形式含观测噪声的逆问题,无论是否是线性的,通通都能 handle!

we extend diffusion solvers to efficiently handle general noisy (non)linear inverse problems via approximation of the posterior sampling.

由于 DPS 利用扩散模型并成功从后验分布  中采样,因此取了 "Diffusion Posterior Sampling" 这个名字。

  • Why DPS Works Better with Noisy Inverse Problems

DPS 可以说几乎照抄了 MCG, 也是利用 Tweedie's formula 去估计原图(每步采样结果的后验均值)  然后代入到 likelihood  中去计算带有流形约束的梯度项, 以此对无条件的采样结果进行引导。但 DPS 进一步在数学上给出了这种做法的解释, 毕竟将  以  代替怎么说也会产生误差吧

首先, DPS 从源头开始"解剖"

也就是说, 根据以上 (7) 式,  实质上是 . 而 MCG 使用 Tweedie's formula 将这个概率的期望以单点  来估计, 即:

51c视觉~合集24_视觉_41

这相当于把外面的期望移到里面去了,所产生的近似误差在业界有个响亮的名字叫 Jensen gap,表达为:

51c视觉~合集24_视觉_42

并且,作者在论文中证明了 Jensen gap 是有上界的,当观测噪声方差趋于无穷时 Jensen gap 会趋于0。重点来了,这就表明 DPS 在解决观测噪声大的逆问题时效果会更好!

the approximation error reduces with higher measurement noise. This may explain why our DPS works well for noisy inverse problems.

并且,DPS 也不像 MCG 那样仅局限于高斯分布的观测噪声,对于服从泊松分布的观测噪声也 OK.

以上  代表 step size,是一个超参,用于控制梯度项的引导程度,其值太小会导致生成结果与观测量的一致性较差,而太大则会产生伪影等不好的效果。作者通过消融实验对该超参的设置进行了探究,最终发现其值在 0.3~1.0 范围内效果比较好。

  • Geometry of DPS and connection to MCG

毕竟 DPS 剽窃了 MCG 的大部分招数,于是免不了和它 PK 一番~

作者谈到 MCG 的 projection step(projection-based correction) 虽然是为了 data-consistency(与观测量的一致性),但这个操作会使得数据偏离流形,这种偏离效应在迭代采样的过程中持续累积,最终就会产生不友好的结果。

对于 noiseless(不含观测噪声) 的逆问题, MCG 的效果还可以,但对于 noisy inverse problems,其效果就不太能看了。

另外,MCG 的梯度项含有矩阵参数 ,在实际应用时,需要根据不同场景构造不同的 WW ,而 DPS 则没有这个麻烦事。

  • 局限性

DPS 最“亮”的局限当然是 Jensen gap 啦!以单点来估计期望——  引入了误差,而且只有在观测噪声比较大的情况下这个误差才可能比较小,这也是为何 DPS 主要针对 noisy inverse problems 来讲故事了。

DPS 的这个毛病也被后来的一些方法抓到了,实际上 Jensen gap 的下界在高维空间下可能很大!

另外,作者发现 DPS 倾向于保留高频细节(例如纹理、人物头发和胡子等),这种性质在衡量感知(perception)方面的指标(如 FID, LPIPS 等)上会表现得比较好,但在衡量失真(distortion)方面的指标(如 PSNR) 上就相对差一些。原因可能是 perception 和 distortion 之间是一种 trade-off 关系,如这篇 paper(The Perception-Distortion Tradeoff)所述。

  • 核心代码

由于 DPS 大部分操作都和 MCG 一致,因此这里就仅列出前者最核心的操作——对每步无条件的采样结果用梯度项进行引导,对应前面于 Algorithm 1&2 中的 line 7,代码源于官方实现(https://github.com/DPS2022/diffusion-posterior-sampling/blob/main/guided_diffusion/condition_methods.py%23L84)。

def conditioning(self, x_prev, x_t, x_0_hat, measurement, **kwargs):
        # `norm_grad` 就是梯度项, `measurement` 即观测量 y
        norm_grad, norm = self.grad_and_value(
            x_prev=x_prev, x_0_hat=x_0_hat, 
            measurement=measurement, **kwargs
        )
        # `scale` 即 step size
        x_t -= norm_grad * self.scale

        return x_t, norm

为了弥补单点估计带来的误差(本质是 jensen gap),作者通过多次模拟采样 的方式来计算梯度项并求平均来作为最终用作引导的梯度项,实质上就是蒙特卡洛采样的原理。

def conditioning(self, x_prev, x_t, x_0_hat, measurement, **kwargs):
        norm = 0
        for _ in range(self.num_sampling):
            # 模拟从 p(x_0|x_t) 中采样
            x_0_hat_noise = x_0_hat + 0.05 * torch.rand_like(x_0_hat)
            difference = measurement - self.operator.forward(x_0_hat_noise)
            norm += torch.linalg.norm(difference) / self.num_sampling
        
        norm_grad = torch.autograd.grad(outputs=norm, inputs=x_prev)[0]
        x_t -= norm_grad * self.scale

        return x_t, norm

至于梯度项的计算,则如下:

def grad_and_value(self, x_prev, x_0_hat, measurement, **kwargs):
        # 观测噪声服从高斯分布
        if self.noiser.__name__ == 'gaussian':
            # $y - A(\hat{x}_0)$
            difference = measurement - self.operator.forward(x_0_hat, **kwargs)
            # L2-norm $||y - A(\hat{x}_0)||_2$
            norm = torch.linalg.norm(difference)
            # 梯度项 $\nabla_{x_i} ||y - A(\hat{x}_0)||_2$
            norm_grad = torch.autograd.grad(outputs=norm, inputs=x_prev)[0]
        
        # 观测噪声服从泊松分布
        elif self.noiser.__name__ == 'poisson':
            Ax = self.operator.forward(x_0_hat, **kwargs)
            difference = measurement - Ax
            norm = torch.linalg.norm(difference) / measurement.abs()
            norm = norm.mean()
            norm_grad = torch.autograd.grad(outputs=norm, inputs=x_prev)[0]

MPGD

MPGD(Manifold Preserving Guided Diffusion) 从流形假设(manifold hypothesis)中看到了“商机”,于是提出了其所谓的 key idea —— 将用于满足条件一致性(consistency)的引导项(guidance) project 到低维流形上,从而避免在采样过程中出现数据偏离流形的现象。

Our key idea is that instead of guiding the diffusion process without constraint (until the last time step, when it hopefully arrives at the manifold), we can project the guidance to the manifold, via its tangent spaces, throughout the diffusion process.

至于具体是怎么 work 的,不急,先来看看 MPGD 是如何喷以往方法的。

  • 以往方法存在的问题

若在给出条件  的情况下要从后验分布  中采样, 并且已知先验  以及可微 (differentiable) 的损失函数 , 就可以将后验分布等价转换为:

51c视觉~合集24_视觉_43

若使用扩散生成模型(e.g. score models)来玩,就要求在采样时能够计算条件 score:  。同样,照葫芦画瓢,可以将条件 score 拆解为:

51c视觉~合集24_视觉_44

在采样时, 可以将这种范式看作分两步走——先根据扩散模型的 unconditional 采样得到结果: , 然后再根据损失函数的梯度来进行更新: , 其中  代表 step size, 用于控制梯度项的更新程度。

定睛一看,后面这一步与日常训练模型在更新参数时的梯度下降过程  非常相似,于是后面这一步可以认为是在  的邻域寻找使得 loss 值最快变小的点,然后进行更新。

同时, 作者在论文中证明了在线性子流形 (流形的线性子空间 ) 的假设下, 采样过程中每步的 noisy data  所处的流形  是像贝壳形一样以一定半径围绕着原数据流形  的几何结构(证明过程请自行参考论文附录)。

然而梯度下降那一步所关注的邻域  并不能被保证处于流形中,因而可能导致更新后的数据偏离流形,从而影响了模型在下一步采样时对于 score 的估计,因为在训练时模型是在 noised 流形

51c视觉~合集24_视觉_45

 附近学习估计 score 的,这点在前面 MCG 中也有被强调过。

也正因如此,作者发现以往的方法如 DPS 等都需要小心调整 step size 或使用较多的步数进行采样以尽可能获取好的生成效果。

  • 将梯度项约束于流形的正切空间

前面提到的损失函数是基于 noisy data  进行计算的, 而通常情况下现成的损失函数是以 clean data  作为输入的。自从 MCG 出世以来, 同行都已经学会了利用 Tweedie's formula 来根据 估计 clean data 了, 通常表示为  。然后, 作者就用  来计算损失函数并对其求梯度 (注意, 不是对  求! ) 来作为 guidance gradient, 然后用它对  而非  进行引导(校正):

51c视觉~合集24_视觉_46

这种方式是将 predicted clean data  尽量与条件 align, 最后再将以上结果代入到扩散模型的采样分布中采样出下一步结果: . 最重要的 point 是, 作者在论文附录中证明了只要梯度项  位于原数据流形的正切空间  中, 且扩散模型能够完美预测训练时所加的噪声, 那么下一步的采样结果  的边缘分布就会概率性地集中在流形  中。

如今最关键的点在于如何保证 guidance gradient 位于原数据流形的正切空间中,最耍流氓的方式当然是不管它,我就默认它是这样。

尽管是讲故事, 但作者也实在不好意思在论文中仅提供这种 idea, 于是他突然想到了一个妙招——用 autoencoder(AE) 来对  进行 projection(encode, then decode), 同时要求 AE 是 perfect 的, 即能够完美重建数据:, 并且证明了这么做之后 guidance gradient 就会位于原数据流形的正切空间中。

在这种方式下, 还可以在 latent space 中进行 guidance, 也就是先将  编码为 latent ,然后 guided-loss 对其求梯度并进行引导 (注意不是对  求梯度和引导) , 之后再解码回  所在的空间。

既然都玩起 latent 了,那么肯定就能够无缝衔接 LDM(Latent Diffusion Model) 啦!若应用于 LDM,和以上 MPGD-Z 的区别就在于不需要在每步采样后都将 latent 解码回  所在的 pixel space,只需在计算损失函数时对 latent 进行解码。

另外,可能是由于假设条件太多(不信你去论文中数数有几个 "Assumption"),因此不太自信,于是也提到了可以结合所位的 "multi-step optimization",也就是使用多步梯度更新而非仅仅一步,或者使用更复杂的优化方法而非仅仅是 SGD。另外,也可以学 RePaint 和 DDRM 等使用的 "resampling" / "time-traveling" 技术,这样在每步梯度下降后重新加噪,就相当于是随机梯度的 Langevin dynamics 方法。

一种基于直觉性的应用就是,对于所给条件与目标偏差很大的任务,就可能需要更多的 optimization step,比如给一张长发美女的图片,prompt 却是生成一个光头佬(秒懂吧)。

  • The Manifold Preserving Abilities

time step 1.0 ~ 0.0 代表采样过程

作者通过以上实验来显示 MPGD 在保持流形方面的有效性,先将 unconditional score 和 guidance gradient 都归一化为单位尺度,然后计算两者的内积(inner product),值为0就代表最优,说明两者的方向是正交的,从而代表 guidance gradient 的方向是流形的正切空间方向,因为 score 的方向是流形的法向量方向(在前面 MCG 中已经被证明)。

由以上实验结果可知,若不使用 AE 进行 projection 或者使用时间太短,则到采样阶段后期就会出现明显的流形偏离现象,而如果从采样的中间阶段开始使用 AE 直至结束,就可以将偏离程度维持在接近于0的较小范围内。由于使用 AE 会额外带来计算等资源,因此作为 trade-off,作者建议在采样过程的  阶段使用即可。

CW 认为有趣的是,尽管 DPS 在采样初始阶段偏离流形的程度飙升,但在后期直至采样结束后却能降至0,这.. 人家还不需要 AE 呢,你搞这么麻烦结果却和人家不相上下,是不是有点尬~

至于为何 MPGD(w/o Proj) 在采样后期偏离流形的程度会突然飙升,应该是因为 guidance 方向得不到保证,从而采样到偏离流形的点,影响到模型估计 score,而后期采样方差又逐渐减小,模型的“调控能力”变弱,难以再重新将采样点拉回到流形之中。

另外,作者通过以下实验结果展示了 MPGD 能够维持无条件生成(like DDIM)的大致结构,而仅改变了由 guidance 引起的与条件相关的语义内容,这也隐含着 guidance gradient 方向与 unconditional score 正交——没有改变 score 方向(流形的法向量方向)的信息,即 guidance gradient 位于数据流形的正切空间。

  • 局限性

MPGD 的理论推导基于线性子流形的假设前提,这通常与实际情况不符。其次,为了达到 manifold preserving 的效果,需要额外引入 AE 把 guidance 项 project 到流形的正切空间,增加了计算等资源。

还有,作者通过实验发现在少步数生成的情况下,对于含观测噪声的线性逆问题通常会 fail 掉。当给予的参考图背景大部分是白色时,生成的图像会带有许多噪声。另外,作者发现 guided-loss 的选择紧密影响着生成质量。

  • 核心代码

接下来以 FaceID 场景为例,展示 MPGD 的主要操作,先是 MPGD w/o Proj(https://github.com/KellyYutongHe/mpgd_pytorch/blob/main/nonlinear/Face-GD/functions/faceid_denoising.py%23L12),即不使用 AE 进行 projection 的做法。

def wo_proj_faceid_ddim_diffusion(
    x, seq, model, b, 
    eta=0.5, rho_scale=1.0, idloss=None, stop=100,
    repeat=5, repeat_start=700, repeat_end=400
):
    ...  # 省略

    # step size
    og_rho_scale = rho_scale
    og_repeat = repeat

    # iterate over the timesteps
    for i, j in tqdm(zip(reversed(seq), reversed(seq_next))):
        t = (torch.ones(n) * i).to(x.device)
        next_t = (torch.ones(n) * j).to(x.device)

        at = compute_alpha(b, t.long())
        at_next = compute_alpha(b, next_t.long())

        xt = xs[-1].to('cuda')

        if repeat_start >= i >= repeat_end:
            repeat = og_repeat
            # you can choose to rescale the rho a bit here, although it seems like with or without rescaling both should work
            rho_scale = og_rho_scale
            # choose a larger og_rho_scale if you are rescaling
            # rho_scale = og_rho_scale/1.5
        else:
            repeat = 1
            rho_scale = og_rho_scale

        # time-travel
        for idx in range(repeat):
            # 扩散模型估计噪声
            et = model(xt, t)
            if et.size(1) == 6:
                et = et[:, :3]

            # prediction of clean image
            x0_t = (xt - et * (1 - at).sqrt()) / at.sqrt()
            x0_t = x0_t.detach()
            x0_t.requires_grad = True

            ''' Guidance '''

            # get guided gradient
            residual = idloss.get_residual(x0_t)
            norm = torch.linalg.norm(residual)
            norm_grad = torch.autograd.grad(outputs=norm, inputs=x0_t)[0]
            x0_t = x0_t.detach()
            
            rho = rho_scale / (norm_grad * norm_grad).mean().sqrt().item() / at_next.sqrt()
            # conditioning range 在此时间步范围内才使用 guidance
            if not i <= stop:
                x0_t -= rho * norm_grad

            ''' DDIM sampling '''

            # in our paper eta = 0.5
            c1 = (1 - at_next).sqrt() * eta
            c2 = (1 - at_next).sqrt() * ((1 - eta ** 2) ** 0.5)
            xt_next = at_next.sqrt() * x0_t + c1 * torch.randn_like(x0_t) + c2 * et
            xt_next = xt_next.detach()
            
            x0_preds.append(x0_t.to('cpu'))
            xs.append(xt_next.to('cpu'))

            # 重新加噪, 类似于 time-travel / resampling 的做法
            if idx + 1 < repeat:
                bt = at / at_next
                xt = bt.sqrt() * xt_next + (1 - bt).sqrt() * torch.randn_like(xt_next)

接下来看看 MPGD-AE(https://github.com/KellyYutongHe/mpgd_pytorch/blob/main/nonlinear/Face-GD/functions/faceid_denoising.py%23L78) 是怎么玩的,也就是使用 AE 对  进行编解码,使得 guidance 项位于流形正切空间。由于与前面 MPGD w/o Proj 有较多重复的部分,因此以下会省略掉部分内容,仅展示关键内容。

def ae_faceid_ddim_diffusion(
    x, seq, model, b, 
    eta=0.5, rho_scale=1.0, idloss=None, stop=100, 
    repeat=5, repeat_start=700, repeat_end=400, 
    ldm_start=500, ldm_end=300, ldm_model=None
):
    ...  # 省略

    # iterate over the timesteps
    for i, j in tqdm(zip(reversed(seq), reversed(seq_next))):
        ...  # 省略

        for idx in range(repeat):
            ...  # 省略

            ''' Guidance '''

            # projection by AE
            if ldm_start > i > ldm_end:
                E_x0_t = ldm_model.encode_first_stage(x0_t)
                D_x0_t = ldm_model.decode_first_stage(E_x0_t)
                residual = idloss.get_residual(D_x0_t)
            else:
                residual = idloss.get_residual(x0_t)

            norm = torch.linalg.norm(residual)
            norm_grad = torch.autograd.grad(outputs=norm, inputs=x0_t)[0]
            x0_t = x0_t.detach()
            
            # use guided gradient
            if ldm_start > i > ldm_end:
                rho = rho_scale * 2 / (norm_grad * norm_grad).mean().sqrt().item() / at_next.sqrt()
            else:
                rho = rho_scale / (norm_grad * norm_grad).mean().sqrt().item() / at_next.sqrt()
            
            # conditioning range
            if i > stop:
                x0_t -= rho * norm_grad

            ...  # 省略

最后再看看 MGPD-Z(https://github.com/KellyYutongHe/mpgd_pytorch/blob/main/nonlinear/Face-GD/functions/faceid_denoising.py%23L152) 的实现,也就是在 latent space 进行 guidance,每次引导完毕后再解码回 pixel space. 同样地,以下仅展示最核心的部分,与前面重复的内容均省略。

def z_faceid_ddim_diffusion(
    x, seq, model, b, 
    eta=0.5, rho_scale=1.0, idloss=None, stop=100, 
    repeat=5, repeat_start=700, repeat_end=400, 
    ldm_start=500, ldm_end=300, ldm_model=None
):
    ...  # 省略

    # iterate over the timesteps
    for i, j in tqdm(zip(reversed(seq), reversed(seq_next))):
        ...  # 省略

        for idx in range(repeat):
            ...  # 省略

            ''' Guidance '''

             # MPGD-Z
             if i > stop and (ldm_start > i > ldm_end):
                # $z_{0|t}$
                E_x0_t = ldm_model.encode_first_stage(x0_t)
                E_x0_t = E_x0_t.detach()
                E_x0_t.requires_grad = True

                D_x0_t = ldm_model.decode_first_stage(E_x0_t)
                # 提前记录解码结果与原来的差, 以便后续恢复
                diff = x0_t.detach() - D_x0_t.detach()

                residual = idloss.get_residual(D_x0_t)
                norm = torch.linalg.norm(residual)
                # 注意, 梯度是对 $z_{0|t}$ 求
                norm_grad = torch.autograd.grad(outputs=norm, inputs=E_x0_t)[0]

                rho = rho_scale / (norm_grad * norm_grad).mean().sqrt().item() / at_next.sqrt()
                E_x0_t = E_x0_t.detach()
                # guidance 也是对 $z_{0|t}$ 实施
                E_x0_t -= rho * norm_grad

                # 解码回 pixel space
                D_x0_t = ldm_model.decode_first_stage(E_x0_t)
                x0_t = D_x0_t.detach() + diff
            # w/o Projection
            elif i > stop:
                x0_t.requires_grad = True
                residual = idloss.get_residual(x0_t)
                norm = torch.linalg.norm(residual)
                norm_grad = torch.autograd.grad(outputs=norm, inputs=x0_t)[0]

                rho = rho_scale / (norm_grad * norm_grad).mean().sqrt().item() / at_next.sqrt()
                x0_t = x0_t.detach()
                x0_t -= rho * norm_grad

            ...  # 省略

至于 MPGD 应用于 LDM 的实现,CW 就不再展示了,因为大同小异,只不过整个采样过程都是在 latent space 进行而已,待采样结束后再解码回 pixel space.

DSG

DSG(Guidance with Spherical Gaussian Constraint for Conditional Diffusion) 将 guidance 的计算看作是在球面高斯(Spherical Gaussian)约束下使得 guided-loss 最小的优化问题,并且计算出对应的闭式解(closed-form solution)。

这种方法能够避免(减少)流形偏离的现象,从而能够在采样过程中使用 large guidance step size,从而在少步生成的情况下也就能够有效对齐所给条件。 最出彩的是,它没有像 MCG 和 MPGD 等那样对数据进行线性(子)流形的假设! 这极大地拓宽了在实际场景中的应用。

  • 天下苦 线性流形假设 与 Jensen gap 久矣

通过前面 MCG 和 MPGD 的演出,江湖人士都已经知道它俩对数据有很强的线性流形假设,有点乌托邦风格。但最为苦b的是,自 MCG 开启利用 Tweedie's formula 来计算 guidance 项的风潮以来,后面 DPS, MPGD 等一众玩家就都这么玩了,有点越陷越深的趋势,无奈这招确实方便好使。

可是大伙心里都清楚,利用 Tweedie's formula 来计算 guidance 项会引入误差 —— Jensen gap,并且 DSG 的作者证明了这个误差的下界会随着数据维数的增加而线性增涨,于是对于像我们玩的图像生成这种任务来说就十分不友好了,从而 Jensen gap 就变成一个大大的 gap,进而导致采样过程中每步的采样结果 都会偏离其数据流形 ,最终生成的图像就会丢失该有的图像结构信息而显得不真实。

  • 将采样过程玩成了纯纯的梯度下降

考虑到当前 Jensen gap 的魔咒无法打破,于是 DSG 就另辟蹊径,直接从目标出发——既然目标是将数据都维持在流形上,那么干脆就先将采样的可能性都限制在目标流形上,然后再进一步找出最满足条件一致性(consistency)的点!

假设现在要根据  采样出下一步结果 , 记最终找到满足条件的点为 , 它位于目标流形  上, 同时也是最满足条件一致性的点。根据前辈们的玩法, 能够代表条件的 guidance 项是 , 它是从  出发的向量, 在线性子流形的假设下,它位于流形的正切空间中。而如果  是最满足条件一致性的点, 那么从  出发去往  的方向  就应该要与 guidance 项的方向最靠近, 这可以用余弦相似度来衡量。于是, 找  的优化问题就可以表示为:

51c视觉~合集24_视觉_47

本来应该是求 guidance 项与  的 argmax,去掉前者的负号后就等价于上面的 argmin 了。

现在的关键在于如何知道  在哪里,也就是最优解的约束空间是啥。别方,作者替你们证明了对于各向同性(isotropic)的高维正态分布,大部分数据点都集中在一个超球面(hypersphere)上,对应有很高的概率密度。于是我们就可以将约束空间设为这个超球面,球心是高斯分布的均值。对于来说,使用 DDIM 进行采样的话就是

51c视觉~合集24_视觉_48

其中  对应 DDPM 的 .

幸运的是,在这个球面高斯的约束条件下,以上优化问题拥有闭式解!

这意味着“最讨喜”的下一步采样结果就是以上 (13) 式。并且,DSG 的这个做法可以无缝衔接以往的方法,比如改掉 DPS 的一行代码就可以变身为 DSG。

你说你不甘心就这样,想要知道 (13) 式是怎么解出来的。OK,没问题!

在前面 (27) 部分, 由于在每步求解  时,  都是已经确定了的, 因此视作常量而忽略。而因为  被限制在以  为中心、半径为  的球面上, 所以它可被替换为  是一个单位向量, 仅用于代表方向。于是整个式子就变为这个单位向量与 guidance gradient 的内积。很明显, 要使内积最小,  的方向就应该要与 guidance gradient 的方向相反, 于是 , 所以就有了 (13) 式的结果。

仔细看 (13) 式,不难发现这就是梯度下降的玩法,于是 DSG 的做法就相当于是对采样均值  做梯度下降,让它去学习条件一致性。 并且,随着采样过程的进行,方差  逐渐减小,这就等同于学习率递减以便收敛的效果。

  • 多样性问题BUT! 发现没, 原本扩散模型的采样过程是 , 现在被 DSG 搞成如 (13)式那样, 就丧失随机性了, 这么一来, 生成的多样性势必会受损。于是作者急中生智, 将 (13) 式等号右边除  以外的那项看作是指示条件的方向, 而将  看作是指示原本无条件采样的方向, 然后照搬 CFG 那套, 加权结合两者。

其中  代表 guidance 的强度,  代表球面高斯的半径, 之所以构建成 (15) 式那样是因为无论如何都要保证  满足球面高斯的约束, 即: . 而  归一化至单位尺度后仅用于指示方向, 不会改变半径大小, 即不影响  与均值(球心)  的距离。

最终,DSG 的整个采样流程如下:

由于在整个采样过程中,数据都被约束于流形的高置信度区域——球面高斯中,因此可以使用更大的 guidance rate,从而用更少的步数来完成采样,并且满足条件一致性。

另外,和以往的方法拥有 conditioning range 类似,可以不必在采样过程的每步都使用 guidance,比如可以间隔几步用,这么做也可以促进生成的多样性。

  • Projecting DPS into Spherical Gaussian

来看一件有意思的事情——用 DSG 对 DPS 进行“升级”,将后者每步采样后的结果 project 到 DSG 所定义的球面高斯 上。具体来说,DPS 每步采样的结果为:

51c视觉~合集24_视觉_49

然后,计算出由球心 指向它的向量:

51c视觉~合集24_视觉_50

那么在这个方向上与球面的交点就是:

51c视觉~合集24_视觉_51

它就是原来  距离球面最近的点, 于是将  project 到  就完成了对 DPS 的升级。通过以下实验结果可以看出,升级完后的效果十分明显,特别是在少步生成的情况下,也能够与所给条件对齐,这就是数据在流形上(没有偏离)的体现。

  • 局限性

通过前面的内容易知,DSG 最明显的局限在于一定程度上牺牲了生成多样性。毕竟采样点被约束在球面高斯上,多样性无疑就会被减少。同时,每次采样都被限制于 guided-loss 的梯度下降方向,也造成了多样性的损失。

  • 核心代码

以下代码源自官方 repo(https://github.com/LingxiaoYang2023/DSG2024/blob/main/Non_Linear_Problems/Face-GD/functions/denoising.py%23L138),仅截取关键部分,对应前面 Algorithm 1 所展示的采样流程:首先进行 DDIM unconditional sampling,然后判断当前时间步是否在 conditioning range 内以及是否到了使用 guidance 的时间间隔,若是则计算 guided-loss,  以及后两者的 weighted direction,最后根据论文公式对unconditional 的采样均值  进行引导。

# iterate over the timesteps
    for i, j in tqdm(zip(reversed(seq), reversed(seq_next))):
        ...  # 省略

        xt.requires_grad = True

        ''' DDIM sampling '''

        et = model(xt, t)
        x0_t = (xt - et * (1 - at).sqrt()) / at.sqrt()

        eta = 1
        # $\sigma_t$
        c1 = eta * ((1 - at / at_next) * (1 - at_next) / (1 - at)).sqrt()
        c2 = ((1 - at_next) - c1 ** 2).sqrt()

        xt_next_mean = at_next.sqrt() * x0_t + c2 * et
        xt_next = xt_next_mean + c1 * torch.randn_like(x)

        ''' DSG '''

        # conditioning range and guidance interval i=10
        if not i <= stop and i % 10 == 0:
            residual = idloss.get_residual(x0_t)
            norm = torch.linalg.norm(residual)
            norm_grad = torch.autograd.grad(outputs=norm, inputs=xt)[0]

            guidance_rate = 0.05
            eps = 1e-20
            grad_norm = torch.linalg.norm(norm_grad, dim=[1, 2, 3])
            grad2 = norm_grad / (grad_norm + eps)

            import math

            ch, h, w = xt_next.shape[1:]
            # 球面半径 $\sqrt{n}\sigma_t$
            r = math.sqrt(ch * h * w) * c1
            d_star = -r * grad2
            d_sample = xt_next - xt_next_mean

            # Eq. 14
            mix_direction = d_sample + guidance_rate * (d_star - d_sample)
            mix_direction_norm = torch.linalg.norm(mix_direction, dim=[1, 2, 3])

            # Eq. 15
            xt_next = xt_next_mean + mix_direction / (mix_direction_norm + eps) * r

        ...  # 省略

Summary

本章介绍的方法都是围绕**流形(manifold)**思想来展开论证的。

MCG 首先开启了利用 Tweedie's formula 来计算 guidance 的热潮,并且在线性流形的假设前提下证明了 guidance gradient 的方向位于流形的正切空间(tangent space),而 (unconditional)score function 的方向是数据流形的法向量方向。

DPS 承袭 MCG 的玩法,但去掉了后者的 measurement consistency projection step,因为它会导致数据偏离流形。DPS 在数学上证明了用 Tweedie's formula 来计算 guidance 会引入 Jensen gap 误差,其随观测噪声的增大而减小且拥有上界, 因而 DPS 对于 noisy inverse problem 的效果会比较好。

MPGD 则认为 guidance gradient 所引起的梯度下降方向并不能保证数据位于流形之中,因此额外借助 AE 来将这个梯度项 project 到流形的正切空间上,并在基于线性子流形的假设前提下给出了证明。由于使用了 AE,因此尽管所用模型不是 LDM,也可以在 latent space 中进行 guidance.

DSG 狠狠地抓住了 DPS 的毛病——在数学上证明了 Jensen gap 的下界在高维空间下会变得很大,从而导致数据偏离流形,而不在流形上会进一步导致 unconditional score 的估计变得不准。于是它另辟蹊径,直接将目标采样点约束至数据分布(流形)的高置信度区域——球面高斯,然后在这个球面中寻找与最能满足条件一致性的点,从而将目标采样点转化为优化问题的目标解,并给出了闭式解。最终,其采样方式变为先计算无条件采样的均值,然后仿照 CFG 的方式对 unconditional 和 conditional 的向量方向做 weighted sum,最后用这个 weighted direction 对采样均值进行引导。

结语

不知道这期的食谱有无让各位食客流下口水,期间有木有出现你们的“梦中情菜”。或者有哪道菜你们想吃的也可以在评论区留言推荐,CW 会考虑收录进下一期的食谱中。




#PGTFormer

端到端,无需预先对齐!首创视频人脸修复算法PGTFormer:革新视频人脸清晰度!

本文提出了一种全新且专门为视频人脸修复设计的端到端方法PGTFormer,PGTFormer突破性地摒弃了传统对齐步骤,实现了更高效、更连贯的恢复效果。

引言

51c视觉~合集24_视觉_52

视频人脸恢复效果展示。左侧为低质量视频人脸,右侧为恢复后的高质量结果。

视频人脸恢复一直是计算机视觉领域的研究热点。然而,现有的方法大多侧重于静态图像处理,难以有效捕捉视频中的时序信息。这些方法通常依赖复杂的对齐操作,且在处理长视频时,容易产生恢复结果不一致的现象。为了解决这些问题,研究者提出了PGTFormer(Parsing-Guided Temporal-Coherent Transformer),这是一种全新且专门为视频人脸修复设计的端到端方法。PGTFormer突破性地摒弃了传统对齐步骤,实现了更高效、更连贯的恢复效果。

此项研究已被IJCAI 2024录用

论文地址:https://arxiv.org/abs/2404.13640

论文主页: https://kepengxu.github.io/projects/pgtformer/

开源代码地址:https://github.com/kepengxu/PGTFormer

研究者主页:https://kepengxu.github.io

方法介绍设计动机

51c视觉~合集24_视觉_53

图示展示了以往方案与PGTFormer在视频人脸恢复中的处理流程差异。(a)为传统方法复杂的对齐步骤,(b)为PGTFormer的端到端视频恢复流程,无需对齐。

当前的视频人脸恢复方法在时序一致性和对齐操作上存在较大挑战。许多方法为了保持视频帧间的一致性,依赖精确的对齐,这不仅增加了计算复杂度,还可能引入误差,影响恢复效果。为了克服这些挑战,研究者设计了PGTFormer。该方法引入了解析引导和时序一致性建模,完全摒弃了对齐操作,实现了端到端的视频人脸恢复,简化了处理流程,并大幅提升了结果的一致性和视觉效果。

网络结构

51c视觉~合集24_视觉_54

图示详细展示了PGTFormer的网络结构,并展示了TS-VQGAN与PGTFormer之间的协作及两阶段训练的过程。

PGTFormer的网络结构旨在从根本上解决视频人脸恢复中的关键难题。其训练过程分为两个主要阶段:

第一阶段 - 训练TS-VQGAN(时空VQGAN):在该阶段,研究者首先训练TS-VQGAN。该模型通过嵌入高质量的视频人脸先验,为PGTFormer后续的恢复任务提供了强大的基础。TS-VQGAN能够有效地捕捉和表示高质量人脸的时空特征,生成与真实人脸非常接近的先验嵌入。这些嵌入在后续步骤中作为PGTFormer的查询目标。

第二阶段 - 训练PGTFormer:在第二阶段,PGTFormer通过人脸解析模块和时空Transformer模块,利用第一阶段中训练得到的高质量视频人脸先验,完成视频人脸恢复任务。具体而言,PGTFormer首先解析输入的低质量视频帧,提取出关键的面部特征,然后通过时空Transformer模块,从TS-VQGAN生成的高质量人脸先验中提取相应的细节信息。最终,解码器将这些高质量特征整合到原始视频中,输出高清且时序一致性强的恢复视频。

实验结果

为了验证PGTFormer的有效性,研究者在多个公开数据集上与其他最先进的方法进行了比较。以下展示了PGTFormer与其他方法在多个定量指标上的表现,涵盖了对齐和非对齐人脸视频的训练和测试结果。

51c视觉~合集24_视觉_55

定量实验结果对比

如表格所示,PGTFormer在多个关键指标上显著超越了现有的最先进方法,具体表现在以下几个方面:

  • PSNR(峰值信噪比):在对齐和非对齐人脸视频上的PSNR值分别达到30.74和29.66,远高于其他方法,表明PGTFormer在图像质量重建上的卓越能力。
  • SSIM(结构相似性):PGTFormer在SSIM指标上表现出色,对齐和非对齐数据集上的SSIM值分别为0.8668和0.8408,明显优于其他方法,证明了PGTFormer在保持结构一致性方面的优势。
  • LPIPS(感知相似度):PGTFormer在LPIPS指标上取得了最低值,分别为0.2095(对齐)和0.2230(非对齐),表明PGTFormer生成的图像与高质量图像的差异最小,具有更好的视觉效果。
  • Deg、LMD、TLME、MSRL:PGTFormer在这些评价面部特征、扭曲程度、时间一致性和细节保留的指标上全面领先,展现出强大的全方位恢复能力。

主观对比结果

除了定量评价,研究者还进行了大量的主观视觉对比实验,结果清晰展示了PGTFormer在视频人脸恢复中的卓越表现:

51c视觉~合集24_视觉_56

图示展示了PGTFormer与其他方法在视觉效果上的差异。PGTFormer在细节保留、伪影去除及面部自然度上表现更为出色。

主观视觉对比结果表明,PGTFormer在恢复面部细节方面表现突出,如眼睛、嘴巴的轮廓和纹理。与其他方法相比,PGTFormer生成的人脸更加生动,色彩还原度更高,几乎没有伪影和不自然的过渡。

结论

PGTFormer作为首个专为视频人脸恢复设计的方法,在该领域中开创了一个全新的方向。其端到端的设计彻底解决了传统方法中复杂且易引入误差的对齐操作问题,同时通过解析引导和时序一致性建模,实现了高效且自然的视频人脸恢复。未来,研究者计划进一步优化网络结构,并将其应用于更广泛的视频增强任务,期待PGTFormer在更多实际场景中展现其卓越的性能。




#使用通用Pix2Pix去除照片模糊

在工作中遇到了一个问题。有一些拍得不好的照片非常模糊,需要修复。锐化蒙版和一些免费的修复软件效果不佳。通过使用 Photoshop 手动重新创建照片的重要部分,问题得以解决。但我不禁想知道是否可以通过一些通用的深度学习算法来实现去模糊。

    一开始使用了一些超分辨率算法,但很快意识到它们之间存在一些差异。去模糊本质上是试图对图像进行逆卷积(盲反卷积)。而超分辨率则试图对图像进行逆下采样。因此,我发现 pix2pix 模型应该更适合这项任务(作为模糊照片和清晰照片之间的成对映射)

实施概述

    代码基于Github上mrzhu-cool的pix2pix实现,并做了以下修改。

https://github.com/mrzhu-cool/pix2pix-pytorch
  • 原始 GAN 损失被Wasserstein 损失取代。
  • 该图像按照torchvision.models进行标准化。
  • 生成器最后一层的 Tanh 激活被移除。
  • 在对抗训练之前,使用 L1 损失对原始图像进行生成器训练 1 个 epoch。

    使用 MIRFLICKR-25k 数据集(希望能够更好地与现实生活中的照片进行推广)。前 20k 张照片用于训练。应用了缩放和随机裁剪。对于最后 5k 张照片,大约 2k 用作验证/开发集,其余保留为测试集(尚未使用)。

https://press.liacs.nl/mirflickr/mirdownload.html

    通过应用均匀的 3x3 滤波器和高斯 5x5 滤波器来创建人工模糊(还有很大的改进空间):

均匀滤波器-效果

    在开发集中通过 200 个时期(批次大小为 16)实现了~19.5 PSNR。

高斯滤波器-效果

    在开发集中通过 200 个时期(批次大小为 16)实现了~19.8 PSNR。

总 结

    该模型在人工数据集上表现良好

    然而,考虑到所使用的模糊过滤器非常简单,该模型收敛得相当慢。

    在真实照片上,该模型的成功率有限。结果图像中的某些部分感觉不自然。考虑到训练数据集的准备方式,这在某种程度上是意料之中的(该模型不太可能很好地推广)。

    我们可能需要提供一些负面训练数据,其中照片足够清晰,不需要或几乎不需要增强。

源码下载:

https://github.com/ceshine/pix2pix-deblur?source=post_page-----6f8774f9701e-------------------




#KernelWarehouse

英特尔开源轻量级涨点神器

本文提出了 KernelWarehouse,这是一种更通用的动态卷积形式,它通过利用卷积神经网络的同一层内和相邻层的卷积参数依赖关系,重新定义了 “内核”、“组装内核” 和 “注意力函数” 的基本概念。

动态卷积学习n个静态卷积核的线性混合,加权使用它们输入相关的注意力,表现出比普通卷积更优越的性能。然而,它将卷积参数的数量增加了n倍,因此并不是参数高效的。这导致不能探索n>100的设置(比典型设置n<10大一个数量级),推动动态卷积性能边界提升的同时享受参数的高效性。为此,论文提出了KernelWarehouse,通过利用卷积参数在同一层内部以及邻近层之间的依赖关系重新定义了“卷积核”、“组装卷积核”和“注意力函数”的基本概念。

论文地址:https://arxiv.org/abs/2406.07879

论文代码:https://github.com/OSVAI/KernelWarehouse

Introduction

卷积是卷积神经网络(ConvNets)中的关键操作。在卷积层中,普通卷积  通过由—组卷积滤波器定义的相同卷积核  应用于每个输入样本  来计算输出  。为简洁起见,将"卷积核"简称为"核"并省略偏置项。尽管常规卷积的有效性已经通过在许多计算机视觉任务上通过各种 ConvNet 架构进行广泛验证,但最近在高效 ConvNet 架构设计方面的进展表明,被称为 CondConv 和 DY-Conv 的动态卷积取得了巨大的性能提升。

动态卷积的基本思想是用  个相同维度的卷积核的线性混合来取代常规卷积中的单个核,  ,其中  是由一个依赖于输入的注意力模块生成的标量注意力。受益于  的加法性质和紧凑的注意力模块设计,动态卷积提高了特征学习能力,而与普通卷积相比只增加了少量的乘加成本。然而,它将卷积参数的数量增加了 倍,因为现代 ConvNet 的卷积层占据了绝大部分参数,这导致了模型大小的大幅增加。目前还很少有研究工作来缓解这个问题。DCD 通过矩阵分解学习基础核和稀疏残差,以逼近动态卷积。这种逼近放弃了基本的混合学习范式,因此当  变大时无法保持动态卷积的表征能力。ODConv 提出了一个改进的注意力模块,沿不同维度动态加权静态卷积核,而不是单个维度,这样可以在减少卷积核数量的情况下获得具有竞争力的性能。但是,在相同的  设置 下,ODConv 的参数比原始动态卷积多。最近,有研究直接使用了流行的权重修剪策略,通过多个修剪和重新训练阶段来压缩 DY-Conv。

简而言之, 基于线性混合学习范式的现有动态卷积方法在参数效率方面存在局限。受此限制, 卷积核数量通常设置为  或  。然而, 一个显而易见的事实是, 采用动态卷积构建的 ConvNet 的增强容量来源于通过注意机制增加每个卷积层的卷积核数量  。这导致了所需模型大小和容量之间的基本冲突。因此, 论文重新思考了动态卷积的设计, 旨在协调这种冲突, 使其能够在参数效率的同时探索动态卷积性能边界, 即能够设置更大的核数  (比典型设置  大一个数量级)。需要注意的是, 对于现有的动态卷积方法, 意味着模型大小将大约比使用普通卷积构建的基础模型大 100 倍以上。

为了实现这一目标,论文提出了一种更通用的动态卷积形式,称为KernelWarehouse,主要受到现有动态卷积方法的两个观察的启发:(1)它们将常规卷积层中的所有参数视为静态核,将卷积核数量从1增加到,并使用其注意模块将个静态核组装成线性混合核。虽然直观有效,但它们没有考虑卷积层内部静态核之间的参数依赖关系;(2)它们为ConvNet的各个卷积层分配不同的个静态核集合,忽略了相邻卷积层之间的参数依赖关系。与现有方法形成鲜明对比的是,KernelWarehouse的核心理念是利用ConvNet中同一层和相邻层的卷积参数依赖关系,重新构成动态卷积,以实现在参数效率和表示能力之间取得大幅度改进的权衡。

51c视觉~合集24_视觉_57

KernelWarehouse 由三个组件组成, 分别是核分区、仓库的构建与共享和对比驱动的注意函数, 它们之间紧密相互依赖。核分区利用同一卷积层内的参数依赖关系, 重新定义了线性混合中的"核",以较小的局部尺度而不是整体尺度来定义。仓库构建与共享利用相邻卷积层之间的参数依赖关系, 重新定义了跨同一阶段卷积层的"组装核",并生成了一个包含  个局部核 (例如  )的大型仓库,用于跨层线性混合共享。对比驱动的注意函数用于解决在具有挑战性的  设置下, 跨层线性混合学习范式下的注意力优化问题, 重新定义了"注意力函数"。在给定不同的卷积参数预算下, KernelWarehouse 提供了很高的灵活性, 允许以足够大的  值来很好地平衡参数效率和表示能力。

作为普通卷积的即插即用替代品,KernelWarehouse可以轻松应用于各种类型的ConvNet架构,通过对ImageNet和MS-COCO数据集进行大量实验证实了KernelWarehouse的有效性。一方面,轮你问展示了与现有动态卷积方法相比,KernelWarehouse实现了更优越的性能(例如,在ImageNet数据集上,使用KernelWarehouse训练的ResNet18|ResNet50|MobileNetV2|ConvNeXT-Tiny模型达到了76.05%|81.05%|75.92%|82.55%的top-1准确率,为动态卷积研究创造了新的性能纪录)。另一方面,论文展示了KernelWarehouse的三个组件对于模型准确性和参数效率的性能提升至关重要,而且KernelWarehouse甚至可以在减小ConvNet的模型大小同时提高模型准确性(例如,论文的ResNet18模型相对于基准模型减少了65.10%的参数,仍实现了2.29%的绝对top-1准确率增益),并且也适用于Vision Transformers(例如,论文的DeiT-Tiny模型达到了76.51%的top-1准确率,为基准模型带来了4.38%的绝对top-1准确率增益)。

MethodMotivation and Components of KernelWarehouse

对于一个卷积层, 设  为输入, 具有  个特征通道,  为输出, 具有  个特征通道, 其中  表示通道大小。普通卷积  使用一个静态卷积核  ,包含  个具有空间大小  的卷积滤波器。动态卷积通过一个由注意力模块  生成的  权重的  个相同维度的静态卷积核  的线性混合取代普通卷积中的  定义为:

51c视觉~合集24_视觉_58

正如之前讨论的那样, 由于参数效率的缺点, 通常将核数量  设置为  。论文的主要动机是重新制定这种线性混合学习范式, 使其能够探索更大的设置, 例如  (比典型设置  大一个数量级),以推动动态卷积性能边界的提升,同时享受参数效率。为此, KerneIWarehouse 具有三个关键组成部分:核分区、仓库的构建与共享和对比驱动的注意力函数。

Kernel Partition

核分区的主要思想是通过利用同一个卷积层内的参数依赖性来减少核维度。具体而言, 对于一个普通的卷积层, 将静态卷积核  沿着空间和通道维度依次划分为  个不相交的部分 , 称为"核单元", 其具有相同的维度。为简洁起见, 在这里省略了定义核单元维度的过程。核分区可以被定义为:

51c视觉~合集24_视觉_59

在核分区之后, 将核单元  视为"局部核",并定义一个包含  个核单元  的"仓库",其中  的维度与  相同。然后,每个核单元  都可以视为仓库  的一个线性混合:

51c视觉~合集24_视觉_60

其中,  是由注意力模块  生成的依赖于输入的标量注意力。最后,普通卷积层中的静态卷积核  被其对应的  个线性混合所取代。

由于核分区的存在, 核单元  的维度可以远小于静态卷积核  的维度。例如, 当  时, 核单元  中的卷积参数数量仅为静态卷积核  的  。在预定的卷积参数预算  下, 相比于现有的将线性混合定义为  (例如  )的"整体核"的动态卷积方法, 这使得仓库很容易设置更大的  值(例如  )。

Warehouse Construction-with-Sharing

51c视觉~合集24_视觉_61

仓库的构建与共享的主要思想是通过简单地利用相邻卷积层之间的参数依赖关系, 进一步改进基于仓库的线性混合学习公式,图 2 展示了核分区和仓库构建与共享的过程。具体而言, 对于 ConvNet 的同阶段的  个卷积层, 通过使用相同的核单元维度来构建一个共享仓库  进行核分区。这不仅允许共享仓库具有较大的  值(例如  ),与层特定的仓库(例如  )相比,还可以提高表示能力。由于 ConvNet 的模块化设计机制(即可通过简单的值设定来控制阶段整体维度的缩放), 可以简单地为所有同阶段的  个静态卷积核使用公共的维度除数(类似公约数的概念),作为统一的核单元维度来进行核分区。从而自然地确定了同阶段每个卷积层的核单元数量 , 以及在给定期望的卷积参数预算  时共享仓库的  。

Convolutional Parameter Budget   对于普通的动态卷积, 相对于正常卷积来说, 卷积参数预算  始终等于核数量。即  , 且  。当设置一个较大的  值, 例如  时, 现有的动态卷积方法得到的  ,导致 ConvNet 主干模型大小增加约 188 倍。而对于 KerneWWarehouse,这些缺点得到了解决。设  为 ConvNet 同阶段的  个卷积层中核单元的总数(当  时,  。那么, 相对于正常卷积, KernelWarehouse 的卷积参数预算可以定义为  。在实现中, 使用相同的  值应用于 ConvNet 的所有卷积层, 这样 KerneLWareho use 可以通过改变  值来轻松调整 ConvNet 的模型大小。与正常卷积相比:(1)当 时,KernelWarehouse 倾向于减小模型大小;(2)当  时,KernelWarehouse 倾向于获得相似的模型大小;(3)当  时, KernelWarehouse 倾向于增加模型大小。

Parameter Efficiency and Representation Power   有趣的是, 通过简单地改变  (由核分区和仓库构建与共享控制), 可以得到适当且较大的  值, 以满足所需的参数预算 , 为 KerneLWarehouse 提供表示能力保证。由于这种灵活性, KerneLWarehouse 可以在不同的卷积参数预算下, 在参数效率和表示能力之间取得有利的权衡。

Contrasting-driven Attention Function

在上述的表述中, KernelWarehouse 的优化与现有的动态卷积方法在三个方面有所不同: (1)使用线性混合来表示密集的局部核单元,而不是整体的核(2)仓库中的核单元数量显著较大(  vs.  )(3)一个仓库不仅被共享用于表示 ConvNet 的特定卷积层的  个核单元, 还被共享用于表示其他  个相同阶段的卷积层的每个核单元。然而,对于具有这些优化特性的 KernelWarehouse, 论文发现常见的注意力函数失去了其效果。因此, 论文提出了对比驱动的注意力函数(CAF)来解决 KerneLWarehouse 的优化问题。对于静态核  的第  个核单元, 设  为由紧凑型 SE 注意力模块  的第二个全连接层生成的特征 logits, 则 CAF 定义为:

51c视觉~合集24_视觉_62

其中,  是一个从 1 线性减少到 0 的温度参数, 在训练初期阶段使用;  是一个二元值 ( 0 或 1 )用于初始化注意力;  是一个归一化函数。

51c视觉~合集24_视觉_63

CAF 依赖于两个巧妙的设计原则:(1)第一项确保在训练开始时, 共享仓库中的初始有效核单元  被均匀地分配到 ConvNet 的所有  个相同阶段的卷积层的不同线性混合中;(2)第二项使得注意力既可以是负值也可以是正值,不同于常见的注意力函数总是产生正的注意力。这鼓励优化过程学习在共享同一仓库的  个相同阶段卷积层上的所有线性混合中形成对比度和多样性的注意力分布(如图3所示), 从而保证提高模型性能。

在 CAF 初始化阶段,  个相同阶段卷积层中的  的设置应确保共享仓库能够:(1)在  时,对于每个线性混合至少分配一个指定的核单元 () 在  时,对于每个线性混合至多分配一个特定的核单元  。论文采用一个简单的策略, 在同阶段的  个卷积层的每组线性混合(  个权重)中分配共享仓库中的全部  个核单元之一,且不重复。当 $n<m_t$ 时,="" 一旦="" $n$="" 个核单元被使用完,="" 让剩余的线性混合始终使="" $\beta_{i="" j}="0$" 。<="" p="">

Visualization Examples of Attentions Initialization Strategy

使用  和  的注意力初始化策略来构建 KernelWarehouse 模型。在训练的早期阶段, 这个策略强制标量注意力是 one-hot 的形式,以建立核单元和线性混合之间的一对一关系。为了更好地理解这个策略, 分别提供了 KW (  )、KW (  )和 KW  的可视化示例。

  • Attentions Initialization for KW ()

51c视觉~合集24_视觉_64

在图 4 中展示了 KernelWarehouse  的注意力初始化策略的可视化示例。在此示例中,一个仓库  被共享给 3 个相邻的卷积层,它们的核维度分别为  和  。这些核单元的维度都是 。请注意,核单元  实际上并不存在,它一直保持为一个零矩阵。它仅用于注意力归一化,而不用于汇总核单元。这个核单元主要用于当  时的注意力初始化,不计入核单元数量 。在训练的早期阶段,根据设定的  ,明确强制每个线性混合与一个特定的核单元建立关系。如图4所示,将仓库中的  中的一个分配给每个 3 个卷积层中的 6 个线性混合,没有重复。因此,在训练过程的开始阶段,当温度  为 1 时,使用 KW(  )构建的 C onvNet 大致可以看作是一个标准卷积的 ConvNet 。

51c视觉~合集24_视觉_65

这里,论文将其与另一种替代方案进行了比较。在这种替代策略中,将所有设为1,强制每个线性混合与所有核单元均等地建立关系。全连接策略展示了与不使用任何注意力初始化策略的KernelWarehouse相似的表现,而论文提出的策略在top-1增益方面优于它1.41%。

  • Attentions Initialization for KW ()

51c视觉~合集24_视觉_66

对于  的 KerneLWarehouse, 采用与 KW  中使用的相同的注意力初始化策略。图  展示了 KW  的注意力初始化策略的可视化示例。为了建立一对一的关系,将  分配给 , 将  分配给  。当  时, 另一种合理的策略是将多个核单元分配给每个线性混合, 而且不重复分配, 如图 5b 所示。使用基于 KW (  ) 的 ResNet18 主干网络来比较这两种策略。根据表 13 中的结果, 可以看到一对一策略表现更好。

  • Attentions Initialization for KW ()

51c视觉~合集24_视觉_67

对于  的 KernelWarehouse,核单元的数量少于线性混合的数量,这意味着不能采用  中使用的相同策略。因此,只将仓库中的总共  个核单元分别分配给  个线性混合,而且不重复分配。将  分配给所有剩余的线性混合。图  展示了 KW  的可视化示例。当温度  为 1 时,使用 KW  构建的 ConvNet 可以大致看作是一个具有分组卷积(groups = 2)的 ConvNet 。论文还提供了我们提出的策略和另一种替代策略的比较结果,该替代策略将  个核单元中的一个分配给每两个线性混合,而且不重复分配。如表 13 所示,一对一策略再次取得了更好的结果,表明为  引入额外的核  可以帮助 ConvNet 学习到更合适的核单元和线性混合之间的关系。当将一个核单元分配给多个线性混合时,ConvN et 无法很好地平衡它们之间的关系。

Design Details of KernelWarehouse

51c视觉~合集24_视觉_68

训练模型的每个相应的  和  的值在表 14 中提供。请注意,  和  的值根据设置的核单元维度、共享仓库的层以及  自然确定。

51c视觉~合集24_视觉_69

算法1展示了给定一个ConvNet主干网络和所需的卷积参数预算时,KernelWarehouse的实现。

  • Design details of Attention Module of KernelWarehouse

在现有的动态卷积方法中, KernelWarehouse 也采用了一种紧凑的 SE 类型结构作为注意力模块  (如图 1 所示), 用于生成对仓库中的核单元进行加权的注意力。对于任何具有静态核  的卷积层,按通道的全局平均池化(GAP)操作开始,将输入 -- 映射为特征向量, 然后经过一个全连接(FC)层, 修正线性单元(ReLU), 另一个 FC 层和一个对比驱动的注意力函数(CAF)。第一个 FC 层将特征向量的长度缩减为原来的 , 第二个  C 层并行生成  组  个特征 logits, 最终由我们的 CAF 逐组进行归一化。

  • Design details of KernelWarehouse on ResNet18

在KernelWarehouse中,一个仓库被分享给所有相同阶段的卷积层。虽然这些层最初根据其输入特征图的分辨率被划分到不同的阶段,但在KernelWarehouse中,这些层根据其核维度被划分到不同的阶段。在论文的实现中,通常将每个阶段的第一层(或前两层)重新分配到前一个阶段。

51c视觉~合集24_视觉_70

表 15 展示了基于 KW ( ) 的 ResNet18 主干网络的一个示例。通过重新分配层,可以避免由于最大公共维度因子造成的所有其他层都必须根据单个层进行划分的情况。对于 ResNe t18 主干网络, 将 KernelWarehouse 应用于除第一层以外的所有卷积层。在每个阶段, 相应的仓库被共享给其所有的卷积层。对于 KW  、 KW  和 KW  ,使用静态核的最大公共维度因子作为核分割的统一核单元维度。对于 KW  和 KW  ), 使用最大公共维度因子的一半。

  • Design details of KernelWarehouse on ResNet50

对于 ResNet50 主干网络, 将 KernelWarehouse 应用于除前两层以外的所有卷积层。在每个阶段, 相应的仓库被共享给其所有的卷积层。对于 KW  和 KW  ,使用静态核的最大公共维度因子作为核分割的统一核单元维度。对于 KW , 使用最大公共维度因子的一半。

  • Design details of KernelWarehouse on ConvNeXt-Tiny

对于 ConvNeXt 主干网络, 将 KernelWarehouse 应用于所有的卷积层。将 ConvNeXt-Tin y 主干网络第三阶段的 9 个 Block 划分为具有相等块数的三个阶段。在每个阶段中, 相应的三个仓库分别共享给点卷积层、深度卷积层和下采样层。对于 KW , 使用静态核的最大公共维度因子作为核分割的统一核单元维度。对于 KW  ,将 KW  应用于 ConvNeXt 主干网络后两个阶段的点卷积层, 使用最大公共维度因子的一半。对于其他层,使用最大公共维度因子的 KW  。

  • Design details of KernelWarehouse on MobileNetV2

对于基于 KW  和 KW  的 MobileNetV2  和 MobileNetV2 (  )主干网络, 将 KerneLWarehouse 应用于所有的卷积层。对于基于 KW (  )的 MobileNe tV2 , ,在每个阶段,相应的两个仓库分别共享给点卷积层和深度卷积层。对于基于 KW  的 MobileNetV2  ,在每个阶段,相应的三个仓库分别共享给深度卷积层、通道扩展的点卷积层和通道减少的点卷积层, 使用静态核的最大公共维度因子作为核分割的统一核单元维度。对于基于 KW  的 MobileNetV2 (1.0×) 和 Mobi leNetV2  ,考虑到注意力模块和分类器层的参数以减少总参数数量。将 KerneWWare house 应用于所有深度卷积层、最后两个阶段的点卷积层和分类器层。为点卷积层设置  , 而对于其他层设置  。对于深度卷积层, 使用静态核的最大公共维度因子作为核分割的统一核单元维度。对于点卷积层, 使用最大公共维度因子的一半。对于分类器层, 使用维度为  的核单元维度。

Discussion

需要注意的是,采用多分支组卷积的分裂与合并策略已经广泛应用于许多ConvNet架构中。虽然KernelWarehouse在核分区中也使用了参数分割的思想,但重点和动机与它们明显不同。此外,由于使用普通卷积,KernelWarehouse也可以用来提高它们的性能。

根据其公式, 当在核分区中统一设置  (即每个仓库中的所有核单元都具有与普通卷积中的静态核  相同的维度)并且在仓库共享中设置  (即每个仓库仅用于特定的卷积层)时,KernelWarehouse 将退化为普通的动态卷积。因此,KernelWarehouse 是动态卷积的一种更通用形式。

在公式中,KernelWarehouse的三个关键组成部分密切相互依赖,它们的联合正则化效应导致了在模型准确性和参数效率方面显著提高的性能,这一点在实验部分通过多个剔除实验证明了。

ExperimentsImage Classification on ImageNet Dataset
  • ConvNet Backbones 选择了来自MobileNetV2、ResNet和ConvNeXt的五种ConvNet骨干网络进行实验,包括轻量级和较大的架构。
  • Experimental Setup

在实验中,与相关方法进行了多种比较,以证明其有效性。首先,在ResNet18骨干网络上,与各种最先进的基于注意力的方法进行了比较,包括:(1)SE、CBAM和ECA,这些方法专注于特征重新校准;(2)CGC和WeightNet,这些方法专注于调整卷积权重;(3)CondConv、DY-Conv、DCD和ODConv,这些方法专注于动态卷积。其次,选择DY-Conv和ODConv作为关键参考方法,因为它们是最优秀的动态卷积方法,与论文的方法最密切相关。在除了ConvNeXt-Tiny之外的所有其他ConvNet骨干网络上,将KernelWarehouse与它们进行比较(因为在ConvNeXt上没有公开可用的实现)。为了进行公平的比较,所有方法都使用相同的训练和测试设置,使用公共代码实现。在实验中,使用  来表示相对于正常卷积的每个动态卷积方法的卷积参数预算。

  • Results Comparison with Traditional Training Strategy

51c视觉~合集24_视觉_71

  • Results Comparison with Advanced Training Strategy

51c视觉~合集24_视觉_72

  • Results Comparison on MobileNets

51c视觉~合集24_视觉_73

Detection and Segmentation on MS-COCO Dataset

为了评估通过论文方法训练的分类骨干模型对下游目标检测和实例分割任务的泛化能力,在MS-COCO数据集上进行了比较实验。

  • Experimental Setup

采用 Mask R-CNN 作为检测框架, 并使用不同的动态卷积方法构建了 ResNet50 和 Mobile NetV2  作为骨干网络, 并在 ImageNet 数据集上进行了预训练。然后, 所有模型都在 MS-COCO 数据集上使用标准的  调度进行训练。为了进行公平比较, 对所有模型采用相同的设置, 包括数据处理流程和超参数。

  • Results Comparison

51c视觉~合集24_视觉_74

  • Ablation Studies

51c视觉~合集24_视觉_75

51c视觉~合集24_视觉_76

51c视觉~合集24_视觉_77