【扩散模型】10、ControlNet | 用图像控制图像的生成(ICCV2023)

news2024/9/28 16:21:57

在这里插入图片描述

论文:Adding Conditional Control to Text-to-Image Diffusion Models

代码:https://github.com/lllyasviel/ControlNet

出处:ICCV2023 Best Paper | 斯坦福

时间:2023.02

在这里插入图片描述

一、背景

文本到图像的生成尽管已经有很好的效果,也很方便,但难以控制生成的图像中的空间分布、姿态、形状等

本文提出了可以使用空间条件来控制模型生成结果的 ControlNet 网络,例如边缘图、深度图、关键点、分割图等等都可以用作图像生成的条件

扩散模型中会需要使用text作为条件引导模型生成, 而ControlNet在引导的时候会增加一个条件实现更加可控的text-to-image生成

一般来说,为一个大型的 text-to-image 生成扩散模型学习一个条件控制模型难度也挺大的,因为:

  • 特定场景的数据量少, 在较少的数据量上很容易出现过拟合,导致模型遗忘
  • 大的计算集群很奢侈, (stable diffusion base模型需要15万个A100显卡小时)
  • end2end是必要的, 一些特定场景需要将原始的输入转为更高语义的表达, 手工处理的方式不太可行

本文提出的 ControlNet 是怎样的呢:

  • ControlNet 是一个 end-to-end 网络,为大型的 text-to-image 扩散模型学习一个条件控制

  • 具体来说,ControlNet先复制一遍扩散模型的权重,得到一个“可训练副本”。而原扩散模型经过几十亿张图片的预训练,因此参数是被“冻结”的。而这个“可训练副本”只需要在特定任务的小数据集上训练,就能学会条件控制。

  • 据作者表示,即使数据量很少,模型经过训练后条件控制生成的效果也很好。“冻结模型”和“可训练副本”通过一个1×1的卷积层连接,名叫“0卷积层”。0卷积层的权重和偏置初始化为0,这样在训练时速度会非常快,接近微调扩散模型的速度,甚至在个人设备上训练也可以。

在这里插入图片描述

二、方法

如图 2,ControlNet 会复制一个副本,然后在副本的上下都加上 1x1 卷积,然后将副本和原来的训练好的参数相加,作为最终的输出结果

假设模型参数为 Θ \Theta Θ,输入为 x x x,输出为 y y y

则:

在这里插入图片描述

当加入 ControlNet 的时候,会固定住 Θ \Theta Θ,然后制作一个副本 Θ c \Theta_c Θc,这个副本是可训练的,起输入是 conditioning vector c c c,原始的参数 Θ \Theta Θ 是固定不变的。

相当于这个副本使用的初始化是训练的很好的模型参数了,所以其训练起来也比较快

副本 Θ c \Theta_c Θc 上下的 zero convolution 层 Z ( . ; , ) Z(.;,) Z(.;,) 是 1x1 卷积,权重和偏置都初始化为 0

完整的 ControlNet 的结构如下:

在这里插入图片描述

第一个训练阶段,由于权重和偏置都是 0,所以 Z ( . ; , ) Z(.;,) Z(.;,) 是 0,即:

在这里插入图片描述

为了在训练开始时防止有害噪声对神经网络层的隐藏状态产生影响,作者采用了零卷积法。这种方法确保了在某个特定条件下(用 Z(c; Θz1) = 0 表示)神经网络的零卷积层不会对噪声做出任何响应。因为这个可训练的副本也会接收到输入图像 x,所以它是完全功能性的,并且保留了大型、预先训练过的模型的能力,这使得它可以作为进一步学习的强大支撑。零卷积通过在初始训练步骤中消除随机噪声作为梯度,来保护这个支撑。

零卷积(Zero Convolution)能够保护网络是因为它在训练的初始阶段通过强制卷积层的输出为零来防止梯度的更新,这样做有以下几个好处:

  • 防止过拟合:在训练初期,模型可能会对输入数据中的噪声过度敏感,从而学习到这些不必要的噪声特征。通过使用零卷积,可以减少这种过拟合现象,因为网络不会对这些噪声做出响应。

  • 稳定训练:在训练开始时,权重的随机初始化可能会导致网络输出极大的变化,这些变化可能会引起不稳定的梯度更新。零卷积通过限制这些初始的更新,有助于稳定训练过程。

  • 保留预训练特性:如果网络是在一个大型数据集上预训练的,它将会有一些通用的特征提取能力。零卷积确保这些能力在训练初期不会被破坏,从而网络可以在这个基础上进一步学习和微调。

  • 控制学习过程:通过逐渐放开零卷积的限制,可以更精细地控制学习过程,让网络按照预定的节奏逐步学习,而不是一开始就全面开放所有的学习能力。

  • 总的来说,零卷积是一种正则化技术,它通过在训练初期控制网络的学习,帮助网络更好地学习有用的特征,并保护网络不受初始训练阶段可能的有害噪声的影响。

ControlNet 如何为 text-to-image 扩散模型服务

作者使用 SD 为例来展示了如何将 ControlNet 添加到扩散模型中

Stable diffusion 模型结构:整个模型包括 25 个 blocks,8 个 down-sampling 或 up-sampling 卷积层,其他 17 个 block 中,每个都包含 4 个 resnet 层 + 2 个 ViTs

  • U-Net
  • encoder:包含 12 个 blocks
  • middle block:一个 blocks
  • skip-connected decoder:包含 12 个 blocks

在这里插入图片描述

如图 3a 展示了 SD Encoder Block A,x3 表示重复 3 次,文本编码使用的是 CLIP text encoder

ControlNet 结果会用于 U-Net 中的每个 encoder 层,也就是 ControlNet 会复制 12 个 encoding blocks 和 1 个 middle block,且这 12 个 encoder 是有 4 个不同的分辨率(64/32/16/8),每个 encoder 重复 3 次。输出会加到这 12 个 skip-connections 和 1 个 middle block 上

训练 ControlNet 和 SD 的显存和时间对比,A100 上(40G显存),使用 ControlNet 来微调:

  • 显存:仅需 23% 的显存占用
  • 时间:仅需 34% 的训练时间

由于 SD 使用的是潜在空间,也就是使用 VQ-GAN 将 512x512 的空间编码到 64x64 的隐空间上,所以,使用 ControlNet 时,也需要先把条件图(边缘、深度、姿态)编码到 64x64 的特征空间上。具体的方法是,作者使用了一个很小的网络 ϵ ( . ) \epsilon(.) ϵ(.) 对条件图进行了编码,小网络由 4 个卷积构成(4x4卷积+2x2步长+ReLU,channel 分别为 16/32/64/128),将编码后的特征 c f c_f cf 输入 ControlNet:

在这里插入图片描述

训练:

  • 给定输入图片 z 0 z_0 z0,扩散模型会逐步对图像加噪,得到噪声图片 z t z_t zt

  • 给定一系列条件、time step t、text prompt c t c_t ct、和 task-specific condition c f c_f cf

  • 扩散模型学习一个网络来预测每步添加的噪声如下, L L L 是整个扩散模型学习的目标函数,对于微调 ControlNet 来说 也是目标函数

    在这里插入图片描述

训练阶段,作者随机使用空的字符串来代替 50% 的 text prompt c t c_t ct,文本提示通常用于提供给模型关于图像内容的描述性信息,帮助模型理解图像应该包含什么。通过这种替换方法,ControlNet 被迫依靠图像本身的视觉信息来识别语义,而不是依赖文本提示。这意味着模型需要更加精确地理解图像中的视觉元素(如边缘、姿态、深度等),从而在没有文本提示的情况下也能识别和生成图像。

此外,作者在训练的过程中还发现了 “突然收敛” 现象:

  • 在训练时,由于使用了零卷积,所以不会为模型带来额外的干扰,模型一直都能输出高质量的图片
  • 作者观察到模型并不是逐渐学习如何根据输入的条件图像生成对应的控制条件,而是突然之间就能成功地做到这一点。这种现象通常在训练的前10,000步优化过程中发生,这种现象被称为“突然收敛现象”,即模型在较短的训练时间内突然达到了理解输入条件并据此生成图像的能力(如图 4)

在这里插入图片描述

推理:

还可以使用很多不同的方式来进一步的控制 ControlNet 对扩散过程的影响

SD 是使用 Classifier-Free Guidance (CFG) 来生成高质量的图像的,Classifier-Free Guidance 的公式如下:

在这里插入图片描述

  • prd:是模型最终的输出
  • uc:是 unconditional 输出
  • c:是 conditional 输出
  • cfg:是 user-specified weight

当使用一个 conditioning image 时,这个 conditional image 可以被加到 uc 和 c 上,也可以只加到 c 上

当不输入 prompt 时(只输入 conditioning image):

  • 将 conditioning image 同时加到 uc 和 c 上时,就会完全移除 CFG guidance 如图 5b
  • 将 conditioning image 只加到 c 上时,这个 guidance 就会非常强,如图 5c
  • 本文作者为了解决这个难题,首先将 conditioning image 加到 c 上,然后给 Stable Diffusion 和 ControlNet 的每个连接处加一个权重 wi=64/hi,hi 表示第 i 个 block 的尺寸,h1=8,h2=16,h1=64,通过逐步降低 CFG guidance 的权重,得到了如图 5d 的效果

在这里插入图片描述

当想要输入多个 conditioning images 同时作为条件时,可以直接将对应的 controlnet 的输出加起来就行,如图 6

在这里插入图片描述

三、效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

拦截器的配置

1、什么是拦截器? Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、判断用户是否登录等。 拦截器依赖于web框…

Git仓库管理笔记

问题: hint: the same ref. If you want to integrate the remote changes, use Done 解决: 解决方法: 1、先使用pull命令: git pull --rebase origin master 2、再使用push命令: git push -u origin master

关于Python —— Python教程

开始 Python 是一个易于学习、使用和高效阅读的编程语言。它具有简洁的英文语法,编写更少的代码,让程序员专注于业务逻辑而不是语言本身。 本教程将从深度、专注细节上去理解 Python 这门语言。初学者可以参考此教程理解相应的内容,本教程将…

服务异步通讯——RabbitMQ

文章目录 RabbitMQ异步通讯技术对比 安装RabbitMQ下载镜像 安装MQRabbitMQ消息模型入门案例publisher实现consumer实现总结 SpringAMQPBasic Queue 简单队列模型消息发送消息接收 WorkQueue消息发送消息接收测试总结 发布/订阅Fanout声明队列和交换机消息发送消息接收 Direct基…

数据结构学习 jz66 构建乘积数组

关键词:数学 双指针 方法一:这个题目我一开始做不知道不能用除法。我做的:[ 用时: 12 m 12 s ] 用了除法 分类讨论 方法二:后来看了提示,双指针,两边各开始乘。 方法三:然后又看了答案可以节…

特征工程-特征处理(二)

特征处理 二、时间特征处理 将原本的具体时间拆分为年月日等多个特征变量,同时可以引入在一天的某个时间段,或者是当天是否为节假日等其他条件,还可以进一步结合其他特征,进行前后一个时间段或是多个时间段时间的特征差值。 dt.…

常见的反爬虫风控 | 验证码风控

一.前言 在当今信息技术迅速发展的背景下,网站和在线服务面临着日益增长的自动化访问威胁,这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力,还可能导致敏感数据的泄露,甚至被用于不正当竞争和恶意…

【华为OD机试真题2023CD卷 JAVAJS】查找一个有向网络的头节点和尾节点

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 查找一个有向网络的头节点和尾节点 知识点图DFS搜索 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节…

ubuntu22: nvtop no gpu to monitor.

解决方法: 重新下载nvtop sudo apt update sudo apt -y install nvtop真是逆天 ,ubuntu系统的nvidia driver突然坏了,然后我重装了nvidia driver, 之后用nvtop就出现这个问题了,但是逆天的是我竟然没有搜到一篇中文的帖子讲这个问…

自己动手写一个 Arthas 在线诊断工具系列说明

相关文章: 自己动手写一个分库分表中间件(十)线上优化之数据库连接超时优化自己动手写分布式任务调度框架自己动手写 Java 虚拟机(二)-查找 Class 文件自己动手调试 JDK(CLion)Java Agent 的简…

Linux网络文件共享服务之FTP协议

目录 一、存储类型 1、直连式存储(DAS) 2、存储区域网络(SAN) 3、网络附加存储(NAS) 二、 FTP文件传输协议 1、FTP协议的工作原理 1.1 FTP协议的工作流程 1.2 FTP协议的两种工作模式 1.2.1 主动模…

6314A/B/C 稳定光源

01 6314A/B/C 稳定光源 产品综述: 6314系列稳定光源包括6314A稳定光源(1310NM单波长)、6314B稳定光源(1550NM单波长)、6314C稳定光源(1310NM &1550NM双波长)。6314系列稳定光源采用高精度自动功率控制技术和自动温度控制技术。6314系列稳定光源配备多种模块&…

Mysql中设置只允许指定ip能连接访问(可视化工具的方式)

场景 Mysql中怎样设置指定ip远程访问连接: Mysql中怎样设置指定ip远程访问连接_navicat for mysql 设置只有某个ip可以远程链接-CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式,如果通过可视化工具比如Navicat来实现。 注&#xff1a…

二叉树题目:从前序与后序遍历序列构造二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:从前序与后序遍历序列构造二叉树 出处:889. 从前序与后序遍历序列构造二叉树 难度 7 级 题目描述…

7_1 tesseract 安装及使用

1、 安装tesseract   OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字…

运筹说 第99期 | 非线性规划—最优性条件

通过上期学习,大家已经了解了非线性规划中无约束极值问题及其求解方法。本期小编将为大家介绍最优性条件,包括可行下降方向、库恩-塔克条件等内容。 1 可行下降方向 起约束作用 假定X(0)是上述问题的一个可行解,满足所有约束。对某约束条件g…

2024年,如何打造惊艳的个人博客/出版系统并且赚点小钱?

几年前,我就推荐过用Markdown写作静态博客。静态博客几乎是零托管成本,比较适合个人博客起步。Markdown便于本地搜索,也可当作是个人知识库方案。 现在有了新的进展。我不仅构建了一个视觉上相当不错的个人网站,还美化了github、…

Linux/Frolic

Enumeration nmap 还是扫描系统对外开放的端口情况,对外开放了22,139,445,还有9999端口,显示是http服务,使用了nginx 1.10.3 ┌──(kali㉿kali)-[~/HTB/Frolic] └─$ nmap -sC -sV -oA nmap -Pn 10.10.10.111 Starting Nmap 7.93 ( http…

pandas进行数据计算时如何处理空值的问题?

目录 1.数据预览: 2.解决方法 (1)问题示例 (2)方法 A.方法一 B.方法二 1.数据预览: 2.解决方法 (1)问题示例 如下图如果不理睬这些空值的话,计算总分便也会是空值…

uni-app购物车页面详细代码

效果图&#xff1a; 这里的购物车加减用的是uni-app中的sku插件 代码附下&#xff08;全&#xff09;&#xff1a; <script setup lang"ts"> import {reqMemberCartList,reqMemberdelentCart,reqMemberPutCart,putMemberCartSelectedAPI, } from /services/…