当前位置: 首页 > news >正文

【ControlNet v3版本论文阅读】

网络部分最好有LDM或者Stable Diffusion的基础,有基础的话会看的很轻松

Abstract

1.提出了一种网络结构支持额外输入条件控制大型预训练的扩散模型。利用预训练模型学习一组不同的条件控制。
2.ControlNet对于小型(<50k)或大型(>1m)数据集都是稳健,可以促进更广泛的应用控制图像扩散模型。

Introduction

现有问题:
1.仅通过文本提示很难准确表达复杂的布局、姿势、形状和形式去生成所需图像,通常需要多次文本编辑。
想法:
提供额外的空间控制(条件)以生成想要的图像组合且深度到图像、姿势到图像等问题需要端到端学习和数据驱动的解决方案。
挑战:
1.特定条件的训练数据数量可能明显小于通用文本到图像训练的数据。(直接对大模型进行微调可能会导致过拟合和灾难性遗忘等问题)
->解决 设计更深或更定制的神经架构处理具有复杂形状和步同高级语义的图像。

ControlNet

1.端到端的神经网络架构学习大型与训练文本到图像扩散模型的条件控制
2.锁定大模型的参数以保留质量和功能,并使其成为其编码层的可训练副本
3.可训练副本和原始锁定模型通过零卷积层相连,且权重初始化为0(训练期间主键增长),保证训练开始时不会将有害噪声添加到大型扩散模型的深度特征中,并保护可训练副本中的大规模预训练主干不被此类噪声破坏。
实验结果:
1.可多种条件控制
2.可不同大小数据集
3.省显卡
贡献:
1.我们提出了 ControlNet,这是一种神经网络架构,可以通过有效的微调将空间局部输入条件添加到预训练的文本到图像扩散模型中
2.我们提出了预训练的 ControlNets 来控制稳定的扩散,以 Canny 边缘、Hough 线、用户涂鸦、人类关键点、分割图、形状法线、深度和卡通线条图为条件
3.我们通过消融实验验证该方法,并与几种替代架构进行比较,并开展用户研究专注于跨不同任务的几个先前基线。

Method

3.1 基本结构

在这里插入图片描述
神经块输入特征图x,输出特征图y,参数为在这里插入图片描述,公式为:在这里插入图片描述
ControlNet中锁定原始块参数在这里插入图片描述,并克隆为可训练副本参数为在这里插入图片描述,输入外部条件向量c,用两个不同参数的初始化为零的零卷积层在这里插入图片描述
将副本连接到主干网络。公式为:在这里插入图片描述
总结: 其实就是将输入条件先进行零卷积,然后将加上输入的x的结果输入克隆网络得到结果,将结果再进行零卷积后与x进入主干网络得到的结果y相加。

3.2 如何将ControlNet应用于图像扩散模型稳定扩散

使用stable diffusion(U-Net)作为大型预训练扩散模型,包括:编码器、中间块和跳过连接解码器,具体包含什么块可以看图片或者源码。文本提示使用CLIP进行编码,扩散时间步使用一个时间编码器使用位置编码。
controlnet的具体结构如图所示。
补充: ControlNet类似LDM,在将原始条件输入网络之前先使用卷积等操作将特征转化到隐式空间在这里插入图片描述,然后再输入到ControlNet。

在这里插入图片描述

3.3 训练,推理过程中额外因素

网络的损失函数:
在这里插入图片描述
1.训练;训练过程中将50%文本提示随机替换为空字符串以增加直接识别条件图像语义的能力。
2.零卷积不会向网络添加噪声,模型应始终能够预测高质量的图像。
3.会有突然收敛现象(不到10K优化步骤)

3.4 组合多个ControlNets

Classifier-free guidance resolution weighting.

Composing multiple ControlNets.

可以直接将相应的ControlNets的输出添加到稳定扩散模型中(图6)。这种组合不需要额外的加权或线性插值。

实验

消融实验

1.不同卷积层和不同提示的效果对比:
在这里插入图片描述

定量评价

1.用户调研
在这里插入图片描述
2.与工业模型比较
stable diffusion需要:在这里插入图片描述
controlnet需要在这里插入图片描述
发现结果差不多
3.条件重建和 FID 分数。
在这里插入图片描述
在这里插入图片描述

讨论

训练数据集大小的影响: 小数据集也行,大了更好
在这里插入图片描述

解释内容能力:
在这里插入图片描述

可用于各种扩散模型
在这里插入图片描述

相关文章:

  • 发挥自定义表单开源优势,助力实现流程化办公!
  • Android输入框架
  • vue vue3 手写 动态加载组件
  • SQL注入sqli_labs靶场第五、六题
  • 嵌入式:第一天(c语言入门)
  • 基于Java+SpringBoot+Vue实验室安全考试系统(源码+文档+部署+讲解)
  • Linux函数学习 fork
  • RabbitMQ3.13.x之六_RabbitMQ使用场景
  • 【算法-数组】二分查找法
  • (27)4.8 习题课
  • 深入浅出 -- 系统架构之微服务架构选型参考图
  • 数字化智慧养老:引领老年人融入科技时代新生活
  • Ant Design Vue 表单验证手机号的正则
  • c#编程基础学习之方法
  • maven: 标签总结
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • JAVA多线程机制解析-volatilesynchronized
  • Java反射-动态类加载和重新加载
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • PhantomJS 安装
  • SpringBoot 实战 (三) | 配置文件详解
  • underscore源码剖析之整体架构
  • 给初学者:JavaScript 中数组操作注意点
  • 关于for循环的简单归纳
  • 使用Swoole加速Laravel(正式环境中)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #13 yum、编译安装与sed命令的使用
  • $(function(){})与(function($){....})(jQuery)的区别
  • (¥1011)-(一千零一拾一元整)输出
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (6)STL算法之转换
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (k8s中)docker netty OOM问题记录
  • (接口自动化)Python3操作MySQL数据库
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Scala的“=”符号简介
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 表达式计算:Expression Evaluator
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @Autowired多个相同类型bean装配问题
  • @Data注解的作用
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @javax.ws.rs Webservice注解
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [2018-01-08] Python强化周的第一天
  • [cb]UIGrid+UIStretch的自适应
  • [CentOs7]搭建ftp服务器(2)——添加用户