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

news/2024/5/19 14:37:29/文章来源:https://blog.csdn.net/x1131230123/article/details/131531168

论文: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.luyixian.cn/news_show_325861.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3+ts+elementui制作精美的课表

使用vue3tselementui 如何制作出精美的课表呢&#xff0c; 最终效果图如下: 直接上代码&#xff1a; 这里直接把封装成一个课表的组件&#xff1a; <script setup lang"ts"> import { ref, watch, onMounted } from "vue"; import IconText from …

Android Studio实现内容丰富的安卓志愿者平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号122 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.…

网页的动静分离设置

我们都知道nginx处理静态网页是强项,而tomcat处理动态网页是强项.我们可以发挥他们共同的优点.nginx处理静态页面而tomcat处理动态页面 进入nginx配置文件改 总结 1.改配置文件最好复制一份 2.做一步验证一步 才知道哪里出错了 3.出错了别着急先看页面在浏览器能不能打开 不…

nRF52832蓝牙概述

基本概念 RSSI&#xff08;Received Signal Strength Indicator&#xff09;是接收信号的强度指示。 接收包RSSI是指无线模块发送信息后&#xff0c;接收端的无线模块接收到数据后&#xff0c;当前接收数据的信号强度的寄存器值&#xff0c;也就是接收模块获取到发送模块当前发…

【Verilog HDL】FPGA-testbench基础知识

&#x1f389;欢迎来到FPGA专栏~testbench基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…

20230704测试STC32G实验箱9.6(STC32G12K128)开发板的虚拟串口(C语言深入了解)

20230704测试STC32G实验箱9.6&#xff08;STC32G12K128&#xff09;开发板的虚拟串口&#xff08;C语言深入了解&#xff09; 06第五集&#xff1a;C语言运算符和进制数入门上.mp4 07第五集&#xff1a;C语言运算符和进制数入门下.mp4 2023/7/4 19:00 下次 在【冲哥】录视频的时…

PSI算法极简概述

什么是隐私求交PSI 隐私求交是多方安全计算中的密码学技术&#xff0c;它允许数据持有方通过比较加密集合计算得到交集&#xff0c;且任何一方都不会获得其他信息。PSI还存在一种变体&#xff0c;即CS场景。客户端可以获取其与服务器的交集但是服务器无法学习到该集合。如果在…

netty学习(2):多个客户端与服务器通信

1. 基于前面一节netty学习&#xff08;1&#xff09;:1个客户端与服务器通信 只需要把服务器的handler改造一下即可&#xff0c;通过ChannelGroup 找到所有的客户端channel&#xff0c;发送消息即可。 package server;import io.netty.channel.*; import io.netty.channel.gr…

Android Studio实现内容丰富的安卓汽车租赁平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号101 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查…

登录校验-Filter/过滤器

过滤器 概念&#xff1a;Filter过滤器&#xff0c;是javaweb的三大组件&#xff08;servlet,Filter,Listener&#xff09;之一 作用&#xff1a;可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能 过滤器的常见操作&#xff1a;登录校验&#xff0c;统一编码&…

Word公式大括号左对齐

1、大括号公式如下&#xff1a; 2、依次选中每一行&#xff0c;然后在开头输入一个&&#xff0c;然后回车&#xff1a; 3、当最后一行输入完立马可以发现左对齐了&#xff1a; The higher I got, the more amazed I was by the view.

win下实现Linux的tab自动补全

声明 &#xff1a;如果不是确定的话 注册表这个东西不建议更改 如果更改的话建议先备份系统 以防意外 1.找到注册表编辑器 2. 展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 3.找到Completion Char 双击 把橙色的数值改成9 4.重新打开cmd 就可以了 参考文章…

github上传超过100M的大文件

当上传的工程中有超过100M的文件时&#xff0c;直接上传github会产生如下报错&#xff1a; remote: error: File retinaface-R50/R50-0000.params is 112.54 MB; this exceeds GitHubs file size limit of 100.00 MB! [remote rejected] master -> master (pre-receive ho…

vue打包到生产环境

1.进入到项目根目录执行 npm run build此时会自动打包在dist目录下 2.安装服务 npm install -g serve3.启动 serve dist以上是生产环境打包的过程。 npm run dev 是开发环境, npm run build 是生产环境

微软发布「升级版」多模态大模型 Kosmos-2!新增局部理解能力,解锁实体级交互

夕小瑶科技说 原创 作者 | 小戏、ZenMoore 三个多月前&#xff0c;微软亚洲研究院在论文《Language Is Not All You Need: Aligning Perception with Language Models》中发布了一个强大的多模态大模型 Kosmos-1&#xff0c;成功将感知与语言对齐&#xff0c;在 ChatGPT 的多…

银河麒麟服务器v10 sp1 安装mysql

可以先用 dpkg --list|grep mysql 查看自己的mysql有哪些依赖&#xff1a; 上图已经是安装后的截图&#xff0c;然后再卸载 sudo apt-get autoremove --purge mysql-common 本文在没有安装之前&#xff0c;只有mysql-common包&#xff0c;再用dpkg --list|grep mysql查看&…

HTML5开发工程师岗位的职责说明文(合集)

HTML5开发工程师岗位的职责说明文1 职责&#xff1a; 1、根据产品设计文档和视觉文件&#xff0c;利用HTML5&#xff0c;Javascript相关技术实现web端的界面效果、交互和功能; 2、基于HTML5.0的标准进行页面制作&#xff0c;编写可复用的用户界面组件; 3、负责分析和解决前端…

【Java从入门到大牛】Java快速入门

目录 简单认识JavaJava背景知识Java能做什么Java技术体系 如何使用Java搭建Java开发环境总结 开发第一个Java程序开发过程HelloWorld案例常见错误总结 Java程序的执行原理总结 JDK的组成和跨平台原理JDK的组成Java的跨平台、工作原理总结 JDK安装后设置Path和Java_home环境变量…

【服务器】群辉 NAS 安装 Mysql 远程访问连接

群辉安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一个优秀的数据管理和分析环境。同时具有良好的硬件性能和稳定性&#xff0c;可以保障MySQL数据库的高效运行和数据安全. cpolar 是一款内网穿透工具,通过简单的设置,我们即可实现远程访问群辉中mysq…

FPGA实验二:模可变计数器设计

目录 一、实验目的 二、实验要求 三、实验代码 1.实验源码 2.部分代码设计思路分析 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 1.解决实验中遇到的困难及解决 2.完成实验后的心得 一、实验目的 &#xff08;1&#xf…