【深度学习】AIGC ,ControlNet 论文,原理,训练,部署,实战,教程

news2024/10/7 4:27:05

论文:https://arxiv.53yu.com/pdf/2302.05543
代码:https://github.com/lllyasviel/ControlNet

得分几个博客完成这个事情的记录了,此篇是第一篇,摘录了一些论文内容。ControlNet 的原理极为朴实无华(对每个block添加zero conv连接),但却非常有效地减少了训练资源和训练时间,针对不同领域任务的训练形成自己的style。论文最后给出了很多值得思考的图例。

文章目录

  • 原论文摘录
    • Introduction
    • HyperNetwork and Neural Network Structure
    • Diffusion Probabilistic Model
    • text-to-image generating tasks
    • Personalization,Customization, and Control of Pretrained Diffusion Model
    • Image-to-Image Translation
    • ControlNet
    • ControlNet in Image Diffusion Model
    • Training
    • Improved Training
    • Implementation
    • Experiment
    • Ablation Study 消融实验
    • Comparison of pre-trained models
    • More Applications
    • Limitation

原论文摘录

Introduction

我们提出了一个神经网络结构,ControlNet,来控制预训练的大型扩散模型,以支持额外的输入条件。ControlNet以端到端方式学习特定于任务的条件,即使训练数据集很小(< 50k),学习也是鲁棒的。此外,训练ControlNet与微调扩散模型一样快,并且该模型可以在个人设备上训练。
或者,如果有强大的计算集群可用,则模型可以扩展到大量(数百万到数十亿)数据。我们报告说,像稳定扩散这样的大型扩散模型可以用ControlNets来增强,以实现边缘图、分割图、关键点等条件输入。这可以丰富控制大型扩散模型的方法,并进一步促进相关应用。

ControlNet,一个端到端神经网络架构,它控制大型图像扩散模型(如Stable diffusion)来学习特定于任务的输入条件。ControlNet将大型扩散模型的权重克隆为“trainable copy”和“locked copy”:locked copy保留了从数十亿张图像中学习到的网络能力,而可训练副本则在特定任务数据集上进行训练,以学习条件控制。可训练和锁定的神经网络块与一种称为“零卷积”的独特类型的卷积层相连,其中卷积权以学习的方式从零逐步增长到优化参数。

由于保留了production-ready weights,因此训练在不同规模的数据集上具有鲁棒性。

由于零卷积不会向深度特征中添加新的噪声,与从头开始训练新层相比,训练与微调扩散模型一样快。

我们用不同条件的各种数据集训练几个ControlNets,例如,Canny边缘,Hough线,用户涂鸦,人类关键点,分割地图,形状法线,深度等。我们还用小数据集(样本少于50k甚至1k)和大数据集(数百万样本)对ControlNets进行了实验。我们还表明,在某些任务中,如深度到图像,在个人计算机(一台Nvidia RTX 3090TI)上训练ControlNets可以获得与在具有tb GPU内存和数千个GPU小时的大型计算集群上训练的商业模型具有竞争力的结果。

HyperNetwork and Neural Network Structure

ControlNet使用一种特殊类型的卷积层,称为“零卷积”。 早期的神经网络研究[31,47,32]对网络权值的初始化进行了广泛的讨论,包括用高斯分布初始化权值的合理性以及用零初始化权值可能带来的风险。最近,[37]讨论了一种在扩散模型中缩放多个卷积层的初始权值以改进训练的方法,该方法与零卷积的思想有相似之处(它们的代码包含一个称为“zero_module”的函数)。在ProGAN[21]和StyleGAN[22]以及Noise2Noise[33]和[65]中也讨论了对初始卷积权值的操作。Stability的模型卡片[55]也提到了在神经层中使用零权重。

Diffusion Probabilistic Model

为了减少训练扩散模型所需的计算资源,基于latent image的思想[11],提出了 Latent Diffusion Model(LDM)[44]方法,并进一步扩展为Stable Diffusion 。

text-to-image generating tasks

Diffusion models可以应用于text-to-image generating tasks,以获得state-of-the-art image generating results。这通常是通过使用类似于CLIP等预训练语言模型将文本输入编码为latent vectors来实现的[41]。例如,Glide[38]是一种支持图像生成和编辑的text-guided diffusion models。Disco Diffusion是一个剪辑引导的实现[9]来处理文本提示。Stable Diffusion是latent diffusion的大规模实现[44],以实现文本到图像的生成。 Imagen[49]是一种文本到图像的结构,它不使用潜在图像,直接使用金字塔结构扩散像素。

Personalization,Customization, and Control of Pretrained Diffusion Model

由于 state-of-the-art image diffusion models 以文本到图像的方法为主,因此增强对 diffusion model 控制的最直接的方法通常是 text-guided [38,24,2,3,23,43,16]。这种类型的控制也可以通过操纵CLIP特征来实现[43]。

图像扩散过程本身可以提供一些功能来实现颜色级别的细节变化[35](Stable diffusion社区称之为img2img)。图像扩散算法自然支持inpainting,作为控制结果的重要方法[43,2]。

本文提出了Textual Inversion[12]和DreamBooth[46],利用一小组具有相同主题或对象的图像来定制(或个性化)生成结果中的内容。

Image-to-Image Translation

我们想指出的是,尽管ControlNet和Image-to-image translation可能有几个重叠的应用程序,但它们的动机本质上是不同的。

Image-to-image translation 的目标是学习不同领域图像之间的映射,而ControlNet的目标是控制具有特定任务条件的diffusion model。

Pix2Pix[20]提出了 image-to-image translation的概念,早期的方法主要是条件生成神经网络(generative neural networks)[20,69,60,39,8,63,68]。在 transformers and Vision Transformers (ViTs)普及之后,使用自回归方法(autoregressive methods)取得了成功的结果[42,11,7]。一些研究也表明,multi-model methods 可以从various translation tasks 中学习到一个robust generator [64,29,19,40]。

我们讨论了目前图像到图像翻译中最强的方法。Taming Transformer[11]是一个vision transformer ,具有generate images and perform image-to-image translations。Palette[48]是一个unified diffusion-based image-to-image translation framework。PITI[59]是一种diffusion-based image-to-image translation method ,它利用 large-scale pretraining 来提高生成结果的质量。在特定领域,如sketch-guided diffusion,[58]是一种基于优化的方法,可以操纵扩散过程。 这些方法在实验中得到了验证。

ControlNet

ControlNet操纵network block的输入条件,从而进一步控制整个神经网络的整体行为。这里的“network block”是指将一组神经层组合在一起作为构建神经网络的常用单元,如“resnet”块、“convn -bn-relu”块、multi-head attention block、transformer block等。

在这里插入图片描述
可以对照下图(b)查看公式(2)。
在这里插入图片描述
由于Zero Conv初始化的时候是0,所以ContorlNet在优化器Back Propagation之前,和原始的Stable Diffusion是一样的。
在这里插入图片描述

进一步来说,只要输入特征不是0,那么权重W在第一次BP之后就不会是0。

在这里插入图片描述
其中得到非零梯度,神经网络开始学习。这样,零卷积就成为一种独特的连接层,以一种学习的方式从零逐步到optimized parameters。

下图也解释了这个过程:
在这里插入图片描述

ControlNet in Image Diffusion Model

我们以Stable Diffusion[44]为例,介绍了使用ControlNet控制具有特定任务条件的大型扩散模型的方法。ControlNet的思想也可以扩展到其他的diffusion model。

Stable Diffusion是一个大型 text-to-image diffusion model ,训练了数十亿张图像。该模型本质上是一个带有encoder, a middle block, and a skip-connected decoder的U-net。encoder and decoder 都有12个块,整个模型有25个块(包括中间块)。

在这些块中,8个块是下采样或上采样卷积层。17个块是主块,每个块包含4个 resnet layers和2个Vision Transformers (ViTs)。每个Vit包含几个cross-attention and/or self-attention mechanisms。文本采用OpenAI公司的CLIP模型进行编码,扩散时间步长(diffusion time steps)采用位置编码(positional encoding)。

为了匹配Stable Diffusion的latent images大小,ControlNet采用了一个小的网络完成此事:
在这里插入图片描述
在图3中,可见ControlNet控制U-net的每个层级块,但由于原始权重是锁定的,所以计算消耗很少,23%显存、34%训练时间就可以去训练Stable Diffusion。

在这里插入图片描述
在这里插入图片描述

Training

Image diffusion models 学习逐步去噪图像以生成样本。去噪可以在pixel space或从训练数据编码的“latent” space 中进行。Stable Diffusion使用latent images作为 training domain。在这种情况下,术语“image”、“pixel”、“denoising”都是指“感知潜在空间(perceptual latent space)”中的相应概念[44]。

在训练过程中,我们随机将50%的文本提示替换为空字符串。这有助于ControlNet从输入条件图中识别语义内容的能力,例如,Canny边缘图或人类涂鸦等。这主要是因为当SD模型中提示符不可见时,编码器倾向于从输入控制映射中学习更多的语义,作为提示符的替代品。

在这里插入图片描述

Improved Training

我们讨论了几种改进ControlNets训练的策略,特别是在计算设备非常有限(例如,在笔记本电脑上)或非常强大(例如,在具有大规模gpu可用的计算集群上)的极端情况下。在我们的实验中,如果使用了其中任何一种策略,我们将在实验设置中提及。

Small-Scale Training 在计算设备有限的情况下,我们发现局部断开控制网与稳定扩散之间的连接可以加快收敛速度。默认情况下,我们将ControlNet连接到“SD中间块”和“SD解码器块1,2,3,4”,如图3所示。我们发现,断开到解码器1、2、3、4的链接,只连接中间块,可以将训练速度提高约1.6倍(在RTX 3070TI笔记本电脑GPU上测试)。当模型显示出结果与条件之间的合理关联时,断开的环节可以在继续训练中重新连接起来,以方便精确控制。

Large-Scale Training 大规模训练是指同时拥有强大的计算集群(至少8个Nvidia A100 80G或同等)和大型数据集(至少100万对训练图像)。这通常适用于数据容易获得的任务,例如,Canny检测到的边缘地图。在这种情况下,由于过度拟合的风险相对较低,我们可以首先训练ControlNets进行足够多的迭代(通常超过50k步),然后解锁稳定扩散的所有权重,并将整个模型作为一个整体进行联合训练。这将导致更具体问题的模型。

Implementation

我们提出了几种基于不同图像条件的ControlNets实现,以各种方式控制大型扩散模型。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Experiment

本文的所有结果都是在CFG-scale为9.0时获得的。采样器是DDIM。我们默认使用20 steps。我们使用四种类型的prompts来测试模型:

(1)No prompt:我们使用空字符串" "作为prompts。

(2)Default prompt:由于Stable diffusion本质上是通过prompts进行训练的,因此空字符串可能是模型的意外输入,如果不提供提示,SD倾向于生成随机的纹理映射。更好的设置是使用无意义的提示,如“an image”, “a nice image”, “a professional image”等。在我们的设置中,我们使用“a professional, detailed, high-quality image” 作为Default prompt。

(3)Automatic prompt:为了测试the state-of-the-art maximized quality of a fully automatic pipeline,我们还尝试使用自动图像字幕方法(如BLIP[34]),to generate prompts using the results obtained by “default prompt” mode。We use the generated prompt to diffusion again。

(4)User prompt: Users give the prompts.

Ablation Study 消融实验

图20显示了与未使用ControlNet训练的模型的比较。该模型使用与Stability的深度到图像模型完全相同的方法进行训练(向SD添加一个通道并继续训练)。
在这里插入图片描述

图21我们想指出一种“突然收敛现象(sudden convergence phenomenon)”,即模型突然能够遵循输入条件。当使用1e-5作为学习率时,这种情况可能发生在从5000到10000步的训练过程中。

在这里插入图片描述

图22显示了使用不同数据集规模训练的基于canny -edge的ControlNets。

PS 看起来依旧是数据量越多,效果越好。

在这里插入图片描述

Comparison of pre-trained models

在这里插入图片描述

More Applications

从图16可以看出,如果对扩散过程进行屏蔽,则模型可以用于pen-based的图像编辑。
在这里插入图片描述

从图26可以看出,当对象比较简单时,模型可以实现对细节的比较精确的控制。

在这里插入图片描述

从图27可以看出,当ControlNet只应用于50%的扩散迭代时,用户可以得到不遵循输入形状的结果。

在这里插入图片描述

Limitation

从图28可以看出,当语义解释错误时,模型可能难以生成正确的内容。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++ connect函数连接失败

bool Connect() {//初始化网络WSADATA wsadata;WSAStartup(MAKEWORD(2, 2), &wsadata);if (0 ! WSAStartup(MAKEWORD(2, 2), &wsadata))return false;if (LOBYTE(wsadata.wVersion) ! 2 ||HIBYTE(wsadata.wVersion) ! 2) {printf("请求协议版本失败!\n");ret…

Ghatgpt正式登录苹果手机应用商城,并支持Siri和快捷指令

根据最新信息&#xff0c;OpenAI 发布的 ChatGPT 官方 iOS 应用程序迎来了重大更新。该应用程序已经在上个月登陆了美国、英国、法国、德国和韩国等 App Store&#xff0c;并且成为该市场上最受欢迎的免费应用程序。 作为生产力类应用的领导者&#xff0c;该应用程序完全免费&a…

MYSQL执行一条SELECT语句的具体流程

昨天CSDN突然抽风 我一个ctrlz把整篇文章给撤掉了还不能复原 直接心态崩了不想写了 不过这部分果然还是很重要,还是写出来吧 流程图 这里面总共有两层结构Server层 储存引擎 Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现&#xff0c;主要包…

PF-Net点云补全解读

论文链接&#xff1a;https://arxiv.org/pdf/2003.00410.pdfhttps://arxiv.org/pdf/2003.00410.pdf PF-Net是一个点云补全模型&#xff0c;整体网络为生成对抗网络&#xff08;Gan&#xff09;构成&#xff0c;G网络负责生成缺失的数据&#xff0c;D网络负责鉴别G网络生…

为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件

1&#xff09;为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件 ​2&#xff09;Addressable热更&#xff0c;断点续传问题 3&#xff09;在线性空间&#xff0c;使用后处理解决UI混合问题 这是第341篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&am…

计算机毕业论文内容参考|基于Python的手机订餐系统的设计与实现

文章目录 导文摘要前言绪论1课题背景2国内外现状与趋势3课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于Python的手机订餐系统的设计与实现 摘要 本文基于Python语言,设计并实现了一个手机订餐…

我的毕业故事

前言 2023年6月25日&#xff0c;在拿到双证(毕业证书/学士学位证书)之后&#xff0c;我正式毕业&#xff0c;结束了本科学习阶段。 由于毕业设计中了盲审&#xff0c;因此在大致顺利的过程中平添了不少故事&#xff0c;这里就对近两个月做一个回顾。 盲审 首先解释一下什么…

MySQL之binlog、redolog、undolog

1.binlog是 mysql server 层的一种二进制日志&#xff0c;用来记录数据库的写入操作&#xff0c;并以"事务"的形式保存在磁盘上&#xff0c;主要的使用场景有主从复制和数据恢复。 2.redo log &#xff08;重做日志&#xff09;是InnoDB存储引擎产生的&#xff0c;记…

day30-Oracle函数

Oracle函数 1.oracle字符函数 1.1 拼接函数concat 1.2 首字母转大写initcap 1.3 lower转小写&#xff1b;upper转大写 1.4 trim去除首尾空格 1.5 substr截取字符串3,4,3代表从第三个字符开始&#xff0c;4代表共截取4个字符 1.6 replace替换字符串 2.oracl…

局部均方差滤波(磨皮)

note 锚点灰度值 用 原图像对应点的原灰度值 和 局部均值加权得到 局部均值 由 掩膜 区域计算得到 权重 由 局部方差 与用户输入参数计算确定 code // 局部均方差滤波 /*\brief 局部均方差滤波\param src:原矩阵&#xff0c;单通道\param res:结果矩阵\param size:掩膜矩形…

Linux学习之磁盘分区(fdisk、parted、df)、文件大小查看(ls、du)和文件写入(dd)

我用来演示的系统使用CentOS Linux release 7.9.2009 (Core)&#xff0c;内核版本是3.10.0-1160.71.1.el7.x86_64。 fdisk fdisk -l可以查看分区&#xff0c;因为我这里使用的不是root用户&#xff0c;所以前边加上sudo。 可以看到当前只有sda一块磁盘&#xff0c;第二磁盘…

全志V3S嵌入式驱动开发(软、硬件调试方法总结)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 v3s开发板本身是比较小巧的&#xff0c;ddr也是嵌入在soc里面的&#xff0c;电路设计也不复杂&#xff0c;因此很受电子爱好者的喜欢。不过大部分朋…

对话小红书剑寒:如何跨方向技术融合,全局优化打造更智能的音视频系统?...

编者按&#xff1a;在 AI 时代&#xff0c;随着 ChatGPT 掀起技术狂潮&#xff0c;构建更智能的音视频系统已经成为音视频领域从业者的共同目标。 然而&#xff0c;音视频系统的智能化&#xff0c;每个从业者对其都有自己独特的视角和理解&#xff0c;正如“一千个人眼中有一千…

华为官宣2024年推出面向商用的5.5G全套网络设备

2023年6月29日华为董事、ICT产品与解决方案总裁杨超斌在2023 MWC上海展5G Advanced论坛上宣布&#xff0c;2024年&#xff0c;华为将会推出面向商用的5.5G全套网络设备。这也标志着ICT行业即将迈入5.5G时代。 经过四年的高速发展&#xff0c;5G建设已经取得了丰硕的成果。目前…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册7

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

MySql的操作跟命令

概述 仅仅为了加强记忆&#xff0c;废话不说&#xff0c;直接上正文。 快速开始 创建数据库。 进入MySql客户端&#xff0c;输入root用户的密码 Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server vers…

第3章 创建项目并初始化业务数据(过程记录)

项目声明和依赖 ECommerceRecommendSystem [pom.xml] 公用的声明、依赖、插件 properties 声明 log4g&#xff1a;处理日志的框架&#xff08;日志的具体实现&#xff09;sel4g&#xff1a;简单日志门面&#xff08;简单日志的接口&#xff09;mongodb-spark&#xff1a;Mong…

Python 元类实现ORM

目录 ORM概念 __new__、__init__、__call__的介绍 通过元类简单实现ORM中的insert功能 抽取到基类中 ORM概念 ORM&#xff08;Object Ralational Mapping&#xff0c;对象关系映射&#xff09;用来把对象模型表示的对象映射到基于 SQL 的关系模型数据库结构中去。这样&am…

隔断推拉门滑动不畅常见的原因和解决方法

隔断推拉门滑动不畅常见的原因和解决方法如下&#xff1a; 1. 滑轨污秽&#xff1a;如果滑轨上有灰尘、油垢或杂物积聚&#xff0c;会影响推拉门的滑动效果。解决方法是定期清洁滑轨&#xff0c;使用吸尘器或刷子清除污垢&#xff0c;并用湿布擦拭干净。 2. 滑轨损坏&#xff1…

Git---分支管理

文章目录 前言一、理解分支二、创建分支三、切换分支四、合并分支五、删除分支六、合并冲突七、分支管理策略八、分支策略九、bug分支十、删除临时分支总结 前言 本篇博客开始介绍Git的杀手级功能之一 : 分支.分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习C的时候,另…