大模型预训练模型微调新模式——ControlNet:提高大模型在特定任务微调的效果
时间:2023-03-11 18:40:47.530
论文名:Adding Conditional Control to Text-to-Image Diffusion Models
发布时间:2023-02-10
论文地址:https://arxiv.org/abs/2302.05543
代码地址:https://github.com/lllyasviel/ControlNet
原文摘要:我们提出了一种神经网络结构,即ControlNet,以控制预训练的大型扩散模型,支持额外的输入条件。ControlNet以端到端的方式学习特定的任务条件,即使训练数据集很小(<50k),学习也很稳健。此外,训练ControlNet的速度和微调扩散模型一样快,而且该模型可以在个人设备上训练。另外,如果有强大的计算集群,该模型可以扩展到大量(数百万到数十亿)的数据。实验证明,像稳定扩散这样的大型扩散模型可以用ControlNet来增强,以实现像边缘图、分割图、关键点等的条件输入。这可能会丰富控制大型扩散模型的方法,并进一步促进相关应用。
ControlNet是一种新的神将网络结构,由斯坦福大学的Lvmin Zhang和Maneesh Agrawala提出的可以用来增强扩散模型的方法。主要是基于已有的Text-to-Image预训练模型对特定数据进行微调以更加适合使用者的目的。这个结构最大的特点是可以在比较资源少的设备如个人PC上对大模型进行调整以获得更好的效果。
这个结构可以帮助大家去训练模型,提高模型在一些特定任务上的效果。大模型一般可能是文本-图像对应关系训练的。但是这种模型在边缘检测、关键点识别等任务上需要做微调。微调的代价比较高,效果也不确定,而ControlNets的作用就是和原来的大模型一起对特定任务重训练的方法。
微软最新的Visual ChatGPT的也用到了这个能力。

随着大型文本-图像(Text-to-Image)模型的出现,生成一个具有视觉吸引力的图像可能只需要用户输入一个简短的描述性提示。在输入一些文字并得到图像后,我们可能会很自然地想到几个问题:这种基于提示的控制是否满足我们的需要?例如在图像处理中,考虑到许多长期存在的具有明确问题表述的任务,这些大型模型是否可以应用于促进这些特定的任务?我们应该建立什么样的框架来处理广泛的问题条件和用户控制?在具体任务中,大型模型能否保留从数十亿图像中获得的优势和能力?为了回答这些问题,我们调查了各种图像处理应用,有三个发现。
首先,特定任务领域的可用数据规模并不总是像一般图像-文本领域那样大。许多特定问题(如物体形状/正常、姿势理解等)的最大数据集规模往往低于100k,即比LAION5B小5×104倍。这就需要稳健的神经网络训练方法来避免过度拟合,并在为特定问题训练大型模型时保持泛化能力。
第二,当用数据驱动的解决方案处理图像处理任务时,大型计算集群并不总是可用。这使得快速训练方法对于在可接受的时间和内存空间内(例如在个人设备上)将大型模型优化到特定任务非常重要。这将进一步要求利用预训练的权重,以及微调策略或转移学习。
第三,各种图像处理问题有不同形式的问题定义、用户控制或图像注释。在处理这些问题时,尽管图像扩散算法可以以 “程序化 “的方式进行调节,例如约束去噪过程、编辑多头注意力激活等,但这些手工制作的规则的行为基本上是由人类指令规定的。考虑到一些特定的任务,如深度到图像、姿势到人等,这些问题基本上需要将原始输入解释为对象级或场景级的理解,使得手工制作的程序方法不太可行。为了在许多任务中实现学习的解决方案,端到端的学习是不可缺少的。
ControlNet,一个端到端的神经网络架构,它可以控制大型图像扩散模型(如稳定扩散)来学习特定任务的输入条件。ControlNet将大型扩散模型的权重克隆为一个 “可训练副本 “和一个 “锁定副本”:锁定副本保留了从数十亿图像中学习到的网络能力,而可训练副本则在特定任务的数据集上训练,以学习条件控制。可训练的和锁定的神经网络块与一种独特的卷积层连接,称为 “零卷积”,其中卷积权重以学习的方式从零逐步增长到优化参数。由于生产就绪的权重被保留下来,训练在不同规模的数据集上是稳健的。由于零卷积不会给深层特征增加新的噪声,与从头开始训练新层相比,训练的速度和微调扩散模型一样快。
我们用各种不同条件的数据集来训练几个ControlNet,例如,Canny边缘、Hough线、用户涂鸦、人类关键点、分割图、形状法线、深度等。我们还在小数据集(样本少于50k甚至1k)和大数据集(数百万样本)上进行了ControlNets实验。我们还表明,在一些任务中,如深度到图像,在个人电脑(一台Nvidia RTX 3090TI)上训练ControlNets可以取得与在拥有TB级GPU内存和数千GPU小时的大型计算集群上训练的商业模型相竞争的结果。
ControlNet可以和很多大模型一起配合使用,效果非常好。值得关注。
代码地址:https://github.com/lllyasviel/ControlNet
HuggingFace上预训练结果地址:https://huggingface.co/lllyasviel/ControlNet
作者用ControlNet配合很多模型做了重新的训练,目前包括如下系列:

模型名称 | 类型 | 地址 |
---|---|---|
Controlnet - Canny Version | Canny边缘检测 | https://huggingface.co/lllyasviel/sd-controlnet-canny |
Controlnet - Image Segmentation Version | 图像分割 | https://huggingface.co/lllyasviel/sd-controlnet-seg |
Controlnet - Scribble Version | 图片涂鸦 | https://huggingface.co/lllyasviel/sd-controlnet-scribble |
Controlnet - Normal Map Version | 法线估计 | https://huggingface.co/lllyasviel/sd-controlnet-normal |
Controlnet - M-LSD Straight Line Version | 直线提取 | https://huggingface.co/lllyasviel/sd-controlnet-mlsd |
Controlnet - Depth Version | 图片深度估计 | https://huggingface.co/lllyasviel/sd-controlnet-depth |
Controlnet - HED Boundary Version | HED 网络的图像边缘检测 | https://huggingface.co/lllyasviel/sd-controlnet-hed |
Controlnet - Human Pose Version | 人类姿态估计 | https://huggingface.co/lllyasviel/sd-controlnet-openpose |
这些模型都是作者实现的,将ControlNet与知名的算法结合的预训练结果,效果很好,可以直接使用!