首页 » 软件开发 » AI降维打击人类画家(图像训练模型扩散卷积)

AI降维打击人类画家(图像训练模型扩散卷积)

南宫静远 2024-07-23 19:38:12 软件开发 0

扫一扫用手机浏览

文章目录 [+]

如果将所有参数锁定在Θ中,然后将其克隆为可训练的副本Θc。
复制的Θc使用外部条件向量c进行训练。
在本文中,称原始参数和新参数为“锁定副本”和“可训练副本”。
制作这样的副本而不是直接训练原始权重的动机是:避免数据集较小时的过拟合,并保持从数十亿张图像中学习到的大型模型的能力。
神经网络模块由一种称为“零卷积”的独特类型的卷积层连接,即1×1卷积层,权重和偏差都用零初始化。
将零卷积运算表示为Z(·;·),使用参数{Θz1,Θz2}的两个实例组成ControlNet结构:

其中yc成为该神经网络模块的输出。
因为零卷积层的权值和偏差都初始化为零,所以在第一个训练步骤中,有:

这可以转换为yc = y表明,在第一个训练步骤中,神经网络块的可训练副本和锁定副本的所有输入和输出都与它们的状态一致,就像ControlNet不存在一样。
换句话说,当一个ControlNet应用于一些神经网络块时,在进行任何优化之前,它不会对深层神经特征造成任何影响。
任何神经网络块的能力、功能和结果质量都得到了完美的保留,任何进一步的优化都将变得像微调一样快(与从零开始训练这些层相比)。
下面简单地推导零卷积层的梯度计算。
考虑权值W和偏差B的1 × 1卷积层,在任意空间位置p和通道索引i处,给定输入特征i∈h×w×c,正向通过可写成

AI降维打击人类画家(图像训练模型扩散卷积) AI降维打击人类画家(图像训练模型扩散卷积) 软件开发
(图片来自网络侵删)
零卷积有W = 0和B = 0(在优化之前),对于Ip,i非零的任何地方,梯度变为:

可以看到,尽管零卷积可以导致特征项i的梯度变为零,但权值和偏差的梯度不受影响。
在第一次梯度下降迭代中,只要特征I是非零,权重W就会被优化为非零矩阵。
值得注意的是,在例子中,特征项是从数据集中采样的输入数据或条件向量,这自然地确保了I不为零。
例如,考虑一个具有总体损失函数L和学习率βlr的经典梯度下降,如果“外部”梯度∂L/∂Z(I;{W, B})不为零,有:

AI降维打击人类画家(图像训练模型扩散卷积) AI降维打击人类画家(图像训练模型扩散卷积) 软件开发
(图片来自网络侵删)
其中W∗是一阶梯度下降后的权值;是Hadamard乘积。
在这一步之后,可得到:

获得非零梯度,神经网络开始学习。
通过这种方式,零卷积成为一种独特的连接层类型,以学习的方式逐步从零增长到优化参数。
扩散模型中的ControlNet以Stable Diffusion为例,介绍利用ControlNet对具有任务特定条件的大型扩散模型进行控制的方法。
Stable Diffusion是一个大型的文本到图像扩散模型,训练了数十亿张图像。
该模型本质上是一个带有编码器、中间块和跳接解码器的U-net。
编码器和解码器都有12个块,完整模型有25个块(包括中间块)。
其中8个块是下采样或上采样卷积层,17个块是主块,每个主块包含4个resnet层和2个Vision transformer (vit)。
每个Vit都包含若干交叉注意和/或自注意机制。
文本采用OpenAI CLIP编码,扩散时间步长采用位置编码。
Stable Diffusion使用类似于VQ-GAN的预处理方法,将整个512 × 512图像数据集转换为较小的64 × 64“潜在图像”进行训练。
这需要ControlNets将基于图像的条件转换为64 × 64的特征空间,以匹配卷积大小。
使用一个由4个4核和2 × 2步长卷积层组成的微型网络E(·)(由ReLU激活,通道为16,32,64,128,初始化为高斯权值,与完整模型联合训练)将图像空间条件ci编码为特征映射:

其中cf为转换后的特征图。
该网络将512 × 512的图像条件转换为64 × 64的特征图。
如图所示,使用ControlNet来控制U-net的各个层。

ControlNet的方式在计算上是高效的:由于原始权重是锁定的,因此训练不需要在原始编码器上进行梯度计算。
这样可以加快训练速度,节省GPU内存,因为可以避免原来模型一半的梯度计算。
使用ControlNet训练一个扩散模型只需要在每次训练迭代中增加约23%的GPU内存和34%的时间(在单个Nvidia A100 PCIE 40G上测试)。
具体来说,使用ControlNet创建了Stable Diffusion的12个编码块和1个中间块的可训练副本。
12个块有4种分辨率(64 × 64,32 × 32,16 × 16,8 × 8),每种3个块。
输出被添加到U-net的12个跳过连接和1个中间块。
SD是一个典型的U-net结构,这种ControlNet结构也可用于其他扩散模型。
训练图像扩散模型学习逐步去噪来生成样本。
去噪可以发生在像素空间或从训练数据编码的“潜在”空间。
Stable Diffusion算法使用潜在空间作为训练域。
给定一个图像z0,扩散算法逐步向图像中添加噪声,并产生一个噪声图像zt,其中t是噪声添加的次数。
当t足够大时,图像近似于纯噪声。
给定一组条件,包括时间步长t,文本提示ct,以及特定任务条件cf,图像扩散算法学习一个网络θ来预测噪声加入到噪声图像zt中

其中L为整个扩散模型的总体学习目标。
该学习目标可直接用于精细调整扩散模型。
在训练过程中,随机将50%的文本提示替换为空字符串。
这有助于提升ControlNet从输入条件(例如Canny边缘图或人类涂鸦等)中识别语义内容的能力。
这主要是因为当prompt对于SD模型不可见时,编码器倾向于从条件输入中学习更多语义,以替代prompt。
接下来讨论几种改进ControlNet训练的策略,比如计算设备非常有限(例如,在笔记本电脑上)时。
小规模训练。
当计算设备有限时,切断部分ControlNet和Stable Diffusion之间的连接可以加速收敛。
默认情况下,将ControlNet连接到“SD中间块”和“SD解码器块1,2,3,4”,如图3所示。
断开与解码器1,2,3,4的链接,只连接中间块,可以将训练速度提高约1.6倍(在RTX 3070TI笔记本GPU上测试)。
当模型显示出结果与条件之间的合理关联时,可以在继续训练中将断开的环节重新连接起来,以便进行准确的控制。
大规模训练。
拥有强大的计算集群(至少8个Nvidia A100 80G或同等规模)和大型数据集(至少100万张训练图像对)时,和数据容易获得的任务下,例如Canny检测到的边缘映射。
在这种情况下,由于过拟合的风险相对较低,可以先训练ControlNets进行足够大的迭代次数(通常超过50k步),然后解锁Stable Diffusion的所有权重,共同训练整个模型。
实验

设置中,采样器为DDIM。
默认使用20个步骤,三种类型的prompt来测试模型:

(1)No prompt:使用空字符串“”作为prompt。

(2)Default prompt:由于Stable diffusion本质上是用prompt训练的,空字符串可能是模型的一个意外输入,如果没有提供prompt,SD倾向于生成随机纹理。
更好的设置是使用无意义的prompt,如“一张图片”、“一张漂亮的图片”、“一张专业的图片”等。
在设置中,使用“专业、详细、高质量的图像”作为默认prompt。

(3)Automatic prompt:为了测试全自动流程最好的效果,还使用自动图像caption方法(如BLIP)。
使用“Default prompt”模式获得的结果生成prompt,再次使用生成的prompt进行扩散生成。

(4)User prompt:用户给出prompt。

实现提出几种基于不同图像条件输入的方式,以控制生成。
Canny边缘图。
使用Canny边缘检测,用随机阈值从互联网上获得3M的边缘-图像-caption数据对。
该模型使用Nvidia A100 80G进行600个gpu小时的训练。
使用的基础模型是Stable Diffusion 1.5。
此外,对上述Canny边缘数据集按图像分辨率进行排序,并采样1k、10k、50k、500k样本的子集。
使用相同的实验设置来测试数据集规模的影响。

Hough线图。
使用基于深度学习的Hough变换方法对Places2数据集检测线图,并且使用BLIP生成caption。
由此,得到了600k对的边缘-图像-caption。
使用前面的Canny模型作为初始化checkpoint,并使用Nvidia A100 80G用150个gpu小时训练。

HED边界检测。
从互联网上获取3M的边缘-图像-caption的数据对,使用Nvidia A100 80G进行300个gpu小时训练。
基础模型是Stable Diffusion 1.5。

用户草图。
结合HED边界检测和一组强数据增强(随机阈值、随机屏蔽涂鸦、随机形态变换、随机非极大抑制),从图像中合成人类涂鸦。
从互联网上获得了50万对的涂鸦图像-caption数据对。
使用前面的Canny模型作为初始化checkpoint,并使用Nvidia A100 80G用150个gpu小时训练。

人体姿势(Openpifpaf)。
使用基于学习的姿势估计方法来从互联网上“找到”人类,使用一个简单的规则:含有人类的图像必须有至少30%的全身关键点被检测到。
获得了80k个姿势-图像-caption数据对。
请注意,直接使用人体骨骼的可视化姿态图像作为训练条件。
在Nvidia RTX 3090TI上使用400个gpu小时进行训练。
基础模型是Stable Diffusion 1.5。

人体姿势(Openpose)。
使用基于学习的姿态估计方法在上面的Openpifpaf设置中使用相同的规则从互联网上找到人类。
获得了200k个姿势-图像-caption数据对。
直接使用人体骨骼的可视化姿态图像作为训练条件。
使用Nvidia A100 80G进行300个gpu小时的训练,其他设置与上面的Openpifpaf相同。

语义分割(COCO)。
由BLIP对COCO-stuff数据集生成caption,获得了164K分割-图像-caption数据对。
该模型在Nvidia RTX 3090TI上使用400个gpu小时进行训练。
基础模型是Stable Diffusion 1.5。

语义分割(ADE20K)。
由BLIP对ADE20K数据集生成caption,获得了164K分割-图像-caption数据对。
该模型在Nvidia A100 80G上使用200个gpu小时进行训练。
基础模型是Stable Diffusion 1.5。

深度(大尺度)。
使用Midas从互联网上获取3M的深度-图像-caption数据对。
使用Nvidia A100 80G进行500 gpu小时的训练。
基础模型是Stable Diffusion 1.5。
深度(小尺度)。
对上述深度数据集的图像分辨率进行排序,采样200k的子集,用于训练模型所需的最小数据集大小。

卡通线图提取方法。
从网络上的卡通插图中提取线描。
通过对受欢迎程度的卡通图像进行排序,得到了前1M的素描-卡通-caption数据对,使用Nvidia A100 80G进行300个gpu小时的训练。
基础模型是Waifu Diffusion。

本文转载于:CV技术指南

侵权联系删除

标签:

相关文章