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

Adding Conditional Control to Text-to-Image Diffusion Models

安全验证 - 知乎知乎,中文互联网高质量的问答社区和创作者聚集的原创内容平台,于 2011 年 1 月正式上线,以「让人们更好的分享知识、经验和见解,找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制以及结构化和易获得的优质内容,聚集了中文互联网科技、商业、影视、时尚、文化等领域最具创造力的人群,已成为综合性、全品类、在诸多领域具有关键影响力的知识分享社区和创作者聚集的原创内容平台,建立起了以社区驱动的内容变现商业模式。https://zhuanlan.zhihu.com/p/605761756

ModelScope 魔搭社区https://modelscope.cn/models/dienstag/cv_controlnet_controllable-image-generation_nine-annotators/summarycontrolnet的核心在于给stable diffusion施加了精准控图,stable diffusion生成的图本质上是通过prompt进行引导从噪声中生成的,text是唯一的输入,controlnet输入了text之外额外的一个维度,目前论文支持canny边缘图,hough线条,hed边缘图,简笔图,pose人体姿态,分割图,深度图等。在流程上,依然是输入图片和prompt,controlnet会先从图片中提取线框图,再输入prompt和线框图即可生成新图。从技术上,controlnet对stable diffusion进行微调,核心通过两个零卷积对权重部分进行映射调整,具体来说,对于预训练好的模型(比如作者使用sd1.5-unet里encoder和middlelayer的resenet和transformer层)里的一层结构,作者固定其参数,并将该层的输入额外添加一个全连接映射后的条件c,输入到一个和该层结构一致的复制网络里,再映射一次后重新添加回原结构里的输出。在训练上,需要成对的text-线框和原图这种数据对。此外作者也提出了小规模训练和大规模训练,力争将stable diffusion的微调平民化。

1.introduction

        基于提示的大模型是否满足我们特定的要求?在图像领域已经有明确范式的任务,大模型是否可以应用促进这些特定任务?我们应该构建什么样的框架来处理大范围的条件问题和用户的控制需求?在具体任务中,大模型能否保留从数十亿张图像中获得的优势和能力?

        为了回答这些问题,我们的调查有三个发现。1.特定任务领域中的可用数据并不总是像一般图像-文本领域中那么大。许多特定问题(目标形状/normal,姿态理解等)的最大数据往往在100k以下,laion-B有5b的数据对。2.大型计算集群并不是谁都有的,预训练权重的迁移微调是可利用的。3.各种图像处理问题具有不同形式的定义,用户控制或者图像注释。尽管扩散算法可以以程序性方式来调节,这些问题本质上需要将原始输入解释为对象级别或者场景级别的理解,人工规则往往行不通,并且很多任务都是希望端到端进行的。

上图输入是canny边缘图,输出是符合控制条件的图。

        本文介绍controlnet,这是一种端到端的神经网络结构,它控制大型图像扩散模型来学习特定任务的输入条件。controlnet将大型扩散模型权重克隆为trainable copy(可训练副本)和locked copy(锁定副本),锁定副本保留从数十亿图像中学习的能力,而可训练副本在特定任务的数据集上训练,以学习条件控制。可训练和锁定的模块与zero convolution连接,其中卷积权重以学习的方式从零逐渐增长到优化的参数。由于保留了production-ready weights,因此训练在不同规模的数据集上是稳健的。由于零卷积不会向深层特征添加新的噪声,因此与从头开始训练新图层相比,训练和微调扩散模型一样快。我们用不同条件的各种数据集训练控制王,小数据集(50k,甚至1k)效果也不错,在rtx3090ti上也可以训练。

2.related work

2.1 hypernetwork and neural network structure

        hypernetwork用于训练一个小的递归网络来影响一个较大的神经网络的权重。controlnet使用一个特殊的卷积,zero convolution,在扩散模型中缩放几个卷积层的初始权重以改善训练的方法。

2.2 diffusion probabilistic model

        扩散模型对训练和采样方法进行优化,采样方式包括DDPM/DDIM/score-based diffusion。本质上使用u-net作为架构,为了降低训练扩散模型所需的计算能力,提出LDM(潜在扩散模型)。

2.3 text-to-image diffusion

        扩散模型可以用于文本到图像生成,通过使用clip将文本输入编码成潜在向量实现。

2.4 personalization,customization,and control of pretrained diffusion model

        因为图像扩散模型是文本到图像的方法主导的,所以增强对扩散的控制最直接的方式是文本引导,这种类型的控制也可以通过操作剪辑特征实现。

2.5 image-to-image translation

       尽管controlnet和图像到图像的翻译可能有一些重叠的应用,但是他们的动机本质是不同的,图像到图像的翻译旨在学习不同领域中的图像之间的映射,而控制网络旨在控制具有特定任务条件的扩散模型。

3.method

3.1 controlnet

如上图所示,我们锁定中的所有参数将其克隆到可训练副本中,复制的副本用外部条件c训练,在本文中,我们将原始参数和新参数成为锁定副本和可训练副本,制作这种副本而不是直接训练原始权重的动机是为了避免数据集较小时的过拟合,并保持从数十亿张图像中学习的大型模型的production-ready quality。神经网络块通过zero convolution的卷积层来连接,其权重和偏差都用零初始化。在一开始训练时,神经网络块中可训练和锁定副本中所有输入和输出都与不存在控制网络时情况一致。换句话说,当控制网络被应用在一些神经网络块时,在任何优化之前,它不会对深层神经网络的特征造成任何影响,任何神经网络块的能力、功能和结果质量都被保留,且任何进一步的优化将变得与微调一样快。

上述公式是零卷积的梯度计算,虽然对输入I的梯度初始为0,但是权重和偏差都不受影响,只要输入I不为0,权重将在第一次梯度下降中被优化为非0矩阵。

w※是一次梯度下降之后的,对输入I求导,获得非0梯度。以这种方式,零卷积成为一种独特类型的连接层,从零逐渐增长到优化的参数。 

3.2 controlnet in image diffusion model

        stable diffusion是在数十亿张图像上训练的大型文本到图像扩散模型。如上所示,本质上是一个u-net,有编码器、中间模块和解码器,中间进行跳跃连接,编码器和解码器都有12个,包括中间模块一共有25个模块,这些模块中,8个是上下采样的卷积层,17个主要的模块,每个包括4个resnet层和2个vision transformer,每个vit包括几个cross-attention或者self-attention。文本采用openai clip编码,扩散时间步长采用位置编码。

        stable diffusion使用和vq-gan相似的预处理方法,将512x512图像转成64x64的潜在图像,controlnet将image-based condition(就是从图像中获取线框图)转成64x64,我们使用4个4x4核和2x2strides的卷积层(后接relu,通常数分别是16,32,64,128,Guassian weights)将image-space condition转成特征图。该网络将512x512转成64x64。

        如上图所示,使用controlnet来控制u-net的每一层,锁定权重是不计算梯度的,使用controlnet训练大概只增加23%的内存和34%的一次迭代时间。具体来说,使用controlnet来创建stable diffusion的12个编码块和1个中间层的可训练副本,4个快采用4中分辨率,每个块有三个。        

        作者的安排十分有意思。笔者在做相关实验时会联想到学术界已经形成的一些共识来设计实验:比如由去年八月份论文prompt to prompt提出后,文生图里图片布局几何关系很大程度上由cross-attn时文本对不同位置的像素点的激活程度所决定。所以笔者初始时会思考是否可以直接将text embedding添加融合模块与sketch info(或其余模态的信息)交互,微调整个模型使其学会兼顾新的模态信息。笔者也会思考是否直接像GLIGEN的方式直接在attn层附近添加融合模块会取得好的效果。但论文作者没有如此安排。论文作者的思路更加类似于《Plug-and-Play Diffusion Features for Text-Driven Image-to-Image Translation》这篇论文的思路。即对于一张模型生成的图片,其UNet的decoder一定已经包含了其生成的一些空间信息,语义信息等。直接抽取decoder相关的特征,添加到当前的生成能够影响当前生成的布局语义等。这是笔者觉得非常有意思的一点。

3.3 training

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

3.4 implement

        文本-条件图-图像对。

相关文章:

Adding Conditional Control to Text-to-Image Diffusion Models

安全验证 - 知乎知乎,中文互联网高质量的问答社区和创作者聚集的原创内容平台,于 2011 年 1 月正式上线,以「让人们更好的分享知识、经验和见解,找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制…...

C++从头再来:知识点速通

1. 关于scanf 1.1 读入数字 scanf 的返回值表示成功输入的变量个数&#xff0c;当输入结束时&#xff0c;scanf将无法再次读取数据&#xff0c;返回0 # include <stdio.h> # include <math.h> # include <time.h># define M 1000000; // compute the max,…...

LearnDash Groups学习群组:您需要了解的一切

大约131k 网站使用 LearnDash。因此&#xff0c;毫无疑问&#xff0c;LearnDash是 WordPress 领域中最受欢迎的 LMS。而且&#xff0c;这是因为它具有强大的功能。但让它更受欢迎的是它与大多数第 3 方扩展很好地集成&#xff0c;并且比现有的任何其他 LMS 都更灵活。群组和群组…...

软件开发过程中遇到一个傻嘚业主能让你抓狂

背景 之前的一个网站交付了之后&#xff0c;业主一直未验收&#xff0c;今天忽然间开始了他的扯淡需求调整。 问题1 有一个问题是pdf文件上传显示问题&#xff0c;目前是pdf有一个封面要上传&#xff0c;排序字段可自动调整控制。但是就这么好用的功能&#xff0c;被他给pas…...

信创系统借力小程序应用生态的可能性

随着国内市场需求的不断增长&#xff0c;国产操作系统的应用也开始逐步发展壮大。国产操作系统在与其他操作系统的竞争中&#xff0c;越来越受到用户的青睐。国产操作系统作为一个全新的市场&#xff0c;给应用开发带来了新的机遇和挑战。本文将从国产操作系统应用的现状分析、…...

ISFP型人格的优势和劣势分析(mbti性格测试)

isfp型人格的优势分析ISFP在艺术上具有令人惊叹的天分&#xff0c;他们充沛且敏锐的情感能够轻易捕捉到那些细腻的情感变化。他们具有强大的表现力和感染力&#xff0c;能够通过自己的作品&#xff0c;将情感描绘出来并令观众感同身受&#xff0c;这使得他们在艺术和人文领域能…...

电影《断网》观后感

上周看了电影《断网》这部电影&#xff0c;题材是网络攻击与防范的故事&#xff0c;这样的题材距离我们很远&#xff0c;又离我们很近&#xff0c;我们每天都在用网络&#xff0c;生活中也离不开网络&#xff0c;所以它离我们很近&#xff0c;但是真正涉及到网络攻击时&#xf…...

查看python第三方库的依赖pkgs

课题组的服务器不给连外网&#xff0c;安装python第三方库就只能手动离线安装。但是python第三方库可能会迭代依赖&#xff0c;单纯的pip show [pkg]是看不出来的…… 参考链接&#xff1a;查看python第三方库的依赖 https://blog.csdn.net/qq_38316655/article/details/127943…...

CF756div3 vp

又被薄纱了&#xff0c;rk就不放了&#xff0c;好丢人QwQDashboard - Codeforces Round 756 (Div. 3) - CodeforcesA. Make Even小分类讨论题意&#xff1a;给定一个数&#xff0c;每次操作可以选取其前缀然后翻转其前缀&#xff0c;问你最少操作几次可以把该数变为偶数思路&am…...

Linux命令·less

less 工具也是对文件或其它输出进行分页显示的工具&#xff0c;应该说是linux正统查看文件内容的工具&#xff0c;功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候&#xff0c;我们并没有办法向前面翻&#xff0c; 只能往后面看&#xff0c;但若使用了 less …...

修改redis改key值不改过期时间

今天在做图片验证码的时候遇到一个问题。用redis的生命周期来存放&#xff0c;用户输入错误次数。 三十秒内输错三次就&#xff0c;等待三十分钟。 那么问题来了&#xff0c;如果说第一次输入错误&#xff0c;应该是 key为用户用&#xff0c;value 为 次数2 ex就为30秒 &…...

Spark的DataFrame使用

内容目录创建SparkSession对象从CSV文件中读取从JSON文件中读取从Parquet文件中读取从数据列表中创建DataFrame从字典列表中创建DataFrame选择一列选择多列过滤年龄大于30的数据过滤名字为Alice的数据可以使用and、or、not等操作符进行组合查询按照年龄分组并计算平均年龄和最大…...

【Flutter】入门Dart语言:操作符的基本用法

文章目录 一、前言二、常用的操作符1.算术操作符2.关系操作符3.逻辑操作符4.赋值操作符5.三元运算符三、总结一、前言 当我们在编写Flutter应用程序时,操作符是我们不可或缺的工具。它们是用于执行各种操作的关键字和符号,可以帮助我们简化代码并提高效率。熟练掌握各种类型…...

Linux线程概念

重新认识一下进程 在之前写过的与进程相关的博文中&#xff0c;都把进程看作是只有一个PCB的进程。如图&#xff1a; 而实际上&#xff0c;在Linux中&#xff0c;进程不止一个执行流&#xff0c;而是可能会有几个或很多个。同一个进程中&#xff0c;每一个执行流都指向同一个虚…...

C#基础教程10 方法

C#方法 方法的语法访问修饰符:返回类型:方法名称:参数列表:方法体:返回值:方法的调用参数传递按值传递按引用传递输出参数方法的重载总结方法是C#中最基本的代码结构之一。方法是一组可重复使用的代码,它接受输入,执行一些操作并返回结果。在本教程中,我们将深入了解C…...

java高性能并发计数器之巅峰对决

并发计数器各个方案介绍方案概述1. jdk5提供的原子更新长整型类 AtomicLong2. synchronized3. jdk8提供的 LongAdder 【单机推荐】4. Redisson分布式累加器【分布式推荐】方案介绍jdk5提供的原子更新长整型类 AtomicLong在JDK1.5开始就新增了并发的Integer/Long的操作工具类Ato…...

HTTPS简介

HTTPS是HTTP开启TLS传输协议&#xff0c;客户端要拿到服务端的公钥&#xff0c;用公钥加密数据后再进行传输&#xff0c;防止数据泄露后背篡改。它要解决两个问题&#xff1a;怎么保证公钥可信怎么加密数据公钥可信问题客户端从服务端获取公钥的时候&#xff0c;存在请求被拦截…...

K-means聚类

原理说明 Kmeans是一种常见的聚类算法&#xff0c;用于将相似的数据点归类到不同的群组中。Kmeans的原理如下&#xff1a; 初始化&#xff1a;Kmeans算法首先需要初始化一个用户指定数量的聚类中心点&#xff0c;通常是随机选取K个数据点作为聚类中心点。 分配&#xff1a;对…...

04-SQL基础(表管理,约束,多表连接,子查询)

本文章主要内容 1、表的管理&#xff1a;创建表&#xff0c;修改表结构&#xff0c;删除字段&#xff0c;修改字段&#xff0c;添加字段&#xff0c;删除表&#xff0c;添加表约束&#xff1b; 2、数据管理&#xff1a;新增记录&#xff0c;修改记录&#xff0c;删除记录&…...

统计学 一元线性回归

统计学 一元线性回归 回归&#xff08;Regression&#xff09;&#xff1a;假定因变量与自变量之间有某种关系&#xff0c;并把这种关系用适当的数学模型表达出来&#xff0c;利用该模型根据给定的自变量来预测因变量 线性回归&#xff1a;因变量和自变量之间是线性关系 非线…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...