浅析扩散模型与图像生成【应用篇】(十八)——ControlNet

news2024/7/31 7:41:26

18. Adding Conditional Control to Text-to-Image Diffusion Models

  现有的文生图模型如Stable Diffusion通常需要人工输入非常准确的提示词,而且生成的结果还是完全随机不可控制的,只能通过生成多个结果,再从中选取最佳方案。而ControlNet的提出就有效的解决了生成结果不可控的问题,通过引入更多的条件信息,例如:边缘图、深度图、法线方向图、语义分割图等,使得生成结果更接近我们的初衷。
在这里插入图片描述
  那么如何将条件信息引入到生成模型中呢?最常见的思路可能是,直接用新的数据对原始模型进行finetune,但是我们知道SD模型是在一个超大规模的数据集(LAION-5B)上训练得到的,现有的其他的图像数据集与其相比都有着数量级的差距。因此单纯的finetune模型很容易导致过拟合、模式崩溃和灾难性遗忘的问题。为了实现使用少量的数据(几万到几百万级别)就能将新的条件信息注入到SD模型中,且能够在普通显卡平台上完成训练,作者提出了一种新的网络结构ControlNet。
在这里插入图片描述

  其实现方式也并不复杂,如上图所示,一个普通的神经网络块,如残差块、Transformer块,都是输入一个 x x x,然后给出一个输出结果 y y y。而ControlNet为了保证原有模型的能力不受影响,将原有模型的参数锁定,并复制得到一个可训练的模型。然后将条件输入 c c c经过一个“零卷积层”处理后,与原本的输入 x x x相加,再输入到可训练模型中。输出结果再次经过“零卷积层”并于原始输出 y y y相加得到最终的输出结果 y c y_c yc。这里的“零卷积层”实际上就是普通的卷积层,只不过所有的权重和偏置初始化均为0。上述过程的数学化描述如下 y c = F ( x ; Θ ) + Z ( F ( x + Z ( c ; Θ z 1 ) ; Θ c ) ; Θ z 2 ) \boldsymbol{y}_{\mathrm{c}}=\mathcal{F}(\boldsymbol{x} ; \Theta)+\mathcal{Z}\left(\mathcal{F}\left(\boldsymbol{x}+\mathcal{Z}\left(\boldsymbol{c} ; \Theta_{\mathrm{z} 1}\right) ; \Theta_{\mathrm{c}}\right) ; \Theta_{\mathrm{z} 2}\right) yc=F(x;Θ)+Z(F(x+Z(c;Θz1);Θc);Θz2)单纯看公式容易让人眼花,我们借助“Stable Diffusion — ControlNet 超详细讲解”这篇博客里的插图来帮助理解
在这里插入图片描述
  从上往下, c c c是条件输入, Θ z 1 \Theta_{\mathrm{z}_1} Θz1是第一个零卷积层的参数,得到卷积后的条件 Z ( c ; Θ z 1 ) \mathcal{Z}\left(\boldsymbol{c} ; \Theta_{\mathrm{z} 1}\right) Z(c;Θz1);然后与输入 x x x相加输入到可训练模型 F \mathcal{F} F中,其权重参数表示为 Θ c \Theta_{\mathrm{c}} Θc;接着模型的输出再次经过权重为 Θ z 2 \Theta_{\mathrm{z}_2} Θz2的零卷积层,最后与原本的模型输出 y = F ( x ; Θ ) \boldsymbol{y}=\mathcal{F}(\boldsymbol{x} ; \Theta) y=F(x;Θ)相加得到最终的输出 y c \boldsymbol{y}_{\mathrm{c}} yc。值得注意的是,由于零卷积层初始的权重参数为0,因此第一次前向计算得到的 y c = y \boldsymbol{y}_{\mathrm{c}} = \boldsymbol{y} yc=y,随着梯度反向传播的过程,零卷积层上的权重参数也会不断更新。
在这里插入图片描述
  了解了单个模块中ControlNet是如何工作的,我们来看一下它是如何与StableDiffusion模型结合起来的,如上图所示SD模型是一个典型的UNet网络结构,由25个网络块构成,其中包含12个编码器、12个解码器和一个中间层。作者对12个编码器和一个中间层增加了ControlNet,即复制编码器块和中间层块的权重参数进行训练,并通过零卷积层与相应的解码器层进行连接。因为SD模型的前端有一个编码器将输入图像压缩至64*64尺寸的潜在特征,而输入的条件 c f c_f cf通常与输入图像尺寸相同,因此也需要一个额外的小模型 E \mathcal{E} E将其尺寸统一为64 *64, E \mathcal{E} E由四个卷积层构成在训练过程中与其他模块一起训练。
  模型的损失函数还是采用了扩散模型的目标函数 L = E z 0 , t , c t , c f , ϵ ∼ N ( 0 , 1 ) [ ∥ ϵ − ϵ θ ( z t , t , c t , c f ) ) ∥ 2 2 ] \left.\mathcal{L}=\mathbb{E}_{\boldsymbol{z}_{0}, \boldsymbol{t}, \boldsymbol{c}_{t}, \boldsymbol{c}_{\mathrm{f}}, \epsilon \sim \mathcal{N}(0,1)}\left[\| \epsilon-\epsilon_{\theta}\left(\boldsymbol{z}_{t}, \boldsymbol{t}, \boldsymbol{c}_{t}, \boldsymbol{c}_{\mathrm{f}}\right)\right) \|_{2}^{2}\right] L=Ez0,t,ct,cf,ϵN(0,1)[ϵϵθ(zt,t,ct,cf))22]其中 c f \boldsymbol{c}_{\mathrm{f}} cf表示输入的图像条件, c t \boldsymbol{c}_{\mathrm{t}} ct表示输入的文本条件。作者还提出了一种无分类器引导的分辨率加权技术(Classifier-free guidance resolution weighting,CFG-RW),将图像条件乘以不同的权重系数再作用于扩散模型的输出结果,权重系数根据每个网络块的分辨率来计算, w i = 64 / h i w_i=64/h_i wi=64/hi h i h_i hi为第 i i i个块的尺寸大小,如 h 1 = 8 , h 2 = 16... h_1=8,h_2=16... h1=8,h2=16...
  ControlNet在多种类型的图像条件下都取得了很好的生成效果,而且只需要10K左右的优化训练次数,目前ControlNet已经内置在SD软件中,并且提供了非常多类型的模型。最新的V1.1版本还增加了风格迁移、指令图像编辑等功能。
在这里插入图片描述

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

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

相关文章

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http测试板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http测试板块) 一、使用Http网页界面1、main.cc原码和index.html原码2、运行结果(1)测试结果1:用index.html内部的代码(2&#xf…

JSON.toJSONString() 输出 “$ref“:“$[0]“问题解决及原因分析

一、背景 在构建一个公共的批处理方法类的时候,在测试输出的时候,打印了" r e f " : " ref":" ref":"[0][0]"的内容,这让我比较疑惑。不由得继续了下去… 二、问题分析 首先,我们需要…

MySQL Binlog 闪回与分析

文章目录 前言1. 修改 event 实现闪回1.1 binlog 结构1.2 闪回案例1.3 方法总结 2. 解析文本闪回2.1 mysqlbinlog2.2 闪回案例2.3 方法总结 3. 在线订阅闪回3.1 mysql-replication3.2 binlog2sql3.3 方法总结 4. Binlog 分析方法4.1 分析场景4.2 辅助定位事务4.3 方法总结 5. 平…

性能监控之prometheus+grafana搭建

前言 Prometheus和Grafana是两个流行的开源工具,用于监控和可视化系统和应用程序的性能指标。它们通常一起使用,提供了强大的监控和数据可视化功能。 Prometheus Prometheus是一种开源的系统监控和警报工具包。它最初由SoundCloud开发,并于…

基于SSM+Jsp+Mysql的汽车租赁系统的设计与实现

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

Python爬虫(入门版)

1、爬虫是什么 简单的来说:就是用程序获取网络上数据。 2、爬虫的原理 如果要获取网络上数据,我们要给爬虫一个网址(程序中通常叫URL),爬虫发送一个HTTP请求给目标网页的服务器,服务器返回数据给客户端&am…

Linux详解:进程等待

文章目录 进程等待等待的必要性进程等待的方法waitwaitpid获取子进程status阻塞等待 与 非阻塞等待 进程等待 等待的必要性 子进程退出,父进程不进行回收的话,就可能造成僵尸进程,进而造成内存泄露 如果进程进入了僵尸状态,kill…

宝塔面板安装教程(linux)

宝塔官网地址 宝塔官网linux安装地址 针对Ubuntu系统的安装命令: wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec 安装过程中,中途会出现一个 Y&N ? 的选项&#xf…

李沐62_序列到序列学习seq2seq——自学笔记

"英-法”数据集来训练这个机器翻译模型。 !pip install --upgrade d2l0.17.5 #d2l需要更新import collections import math import torch from torch import nn from d2l import torch as d2l循环神经网络编码器。 我们使用了嵌入层(embedding l…

【笔记1】从零开始做一个男头的流程(超级详细)

目录 大体 眼窝 鼻子 脖子 耳朵 嘴巴1 颧骨 嘴巴2 眼睛 头 开始细化 大体 眼窝 嘴巴 鼻子 大体 注意!!先整体后局部,一开始不要加太多的线,尽量先用最少的线调整出一个大体的结构。 1.准备好参考图,在…

2024年的Java版本选择?java 17 安装

文章目录 2024年的Java版本选择?java 1.8 和 java17 什么区别?java 17 安装windows 11安装java 17C:\Program Files\Common Files\Oracle\Java\javapath是什么 2024年的Java版本选择? 3年前,java 1.8是市场主流(还有一…

Acrobat Pro DC 2023:专业PDF编辑软件,引领高效办公新时代

Acrobat Pro DC 2023是一款专为Mac和Windows用户设计的专业PDF编辑软件,凭借其强大的功能和卓越的性能,成为现代职场人士不可或缺的得力助手。 这款软件拥有出色的PDF编辑能力。用户不仅可以轻松地对PDF文档中的文字、图片和布局进行编辑和调整&#xf…

PyAudio安装!!解决使用pip install PyAudio安装报错问题

如果使用pip install PyAudio安装报错 一般建议选择本地安装 但是本人也是从网上找了很多资料,发现本地的wheel的网址打开没有文件了 然后我就用了这个方法,对于我的电脑是非常有效果的!! 如果指令装不上的话 PyAudio PyPI …

linux中git的使用

为什么要有git git相当于一个仓库可以让我们更好的去管理我们的代码,实现版本的控制,上传到云端仓库。有了git,就可以实现多人同时开发一个项目(每个负责一部分代码,最后都上传到同一个仓库)。 git github/gitee 的区…

Burp 指纹识别+OA弱口令爆破-BurpFingerPrint

简介 攻击过程中,我们通常会用浏览器访问一些资产,该BurpSuite插件实现被动指纹识别网站提取链接OA爆破,可帮助我们发现更多资产。 功能如下 下述功能会在2024年5月底完成,如果有更好的建议都可以提,然后再麻烦点个…

linux磁盘原理

在linux系统中,对磁盘进行管理与windows系统类似,都要先分区,格式化,创建文件系统,挂载目录,数据写入

【Unity动画系统】Animator组件的属性

介绍Animator组件的全部属性 Controller:动画控制器 Avatar:人物骨骼 Apply Root Motion:有一些动画片段自带位移,如果希望自带的位移应用在游戏对象上,那么就勾选;如果自己编写脚本,那么就不…

Milvus Cloud 向量数据库Reranker成本比较和使用场景

成本比较:向量检索 v.s. Cross-encoder Reranker v.s. 大模型生成 虽然 Reranker 的使用成本远高于单纯使用向量检索的成本,但它仍然比使用 LLM 为同等数量文档生成答案的成本要低。在 RAG 架构中,Reranker 可以筛选向量搜索的初步结果,丢弃掉与查询相关性低的文档,从而有…

使用webpack给大屏自适应插件autofit.js增加umd打包方式

最近有个大屏自适应的需求,而且想直接通过script标签来引入自适应的插件js,搜索相中了autofit.js,可惜不支持umd格式的引入,虽然也能直接copy源码,但是还是折腾下给它打包成umd格式的代码。 fork源码,克隆…

第10章 项目管理基础知识

一、项目概述 (一)项目 在既定的项目资源要求和约束下,为实现特定目标而相互联系的一次性活动(资源任务)。世界上没有两个完全相同的项目项目有资源约束,一定的目的,是一次性。 (…