Uni-ControlNet: All-in-One Control toText-to-Image Diffusion Models——【论文笔记】

news2024/11/26 2:14:15

本文发表于NeurIPS 2023

项目官网:Uni-ControlNet: All-in-One Control to Text-to-Image Diffusion Models

一、Introduction

        近两年来,扩散模型在图像合成任务中表现优异,尤其是文本到图像(T2I)扩散模型已成为合成高质量图像的流行选择。这些模型通过大规模数据集上的训练,能够创建与文本描述内容相似的图像,推动了文本和视觉领域之间的联系。这些模型在捕捉纹理细节和对象之间复杂关系方面表现出色,适用于各种现实应用,如内容创建、时装设计和室内装饰。然而,文本描述通常无法准确传达对生成结果的详细控制,因此需要结合更多控制模式,如用户绘制的草图或语义掩码。学术界和工业界纷纷表现出兴趣,将多种控制信号与文本描述集成进T2I扩散模型,以扩展生成范围。一些研究尝试探索可控T2I扩散模型的方法,如Composer,其需要大量GPU资源和巨大训练成本。为降低成本,一些方法通过引入轻量级适配器或额外模块,将条件信号纳入冻结的T2I扩散模型中,实现微调。然而,当前方法存在一些缺点,如每个条件需要一个独立适配器,导致微调成本和模型大小线性增加,不同条件之间的可组合性仍是挑战。

        本文提示了Uni-ControlNet,这是一个新的框架,利用轻量级适配器来精确控制预训练的T2I扩散模型。与现有方法相比,Uni-ControlNet可以在一个模型中处理不同条件,支持组合控制,并具有较好的可组合性。Uni-ControlNet将条件分为局部和全局两个组,只需添加两个额外适配器即可,这降低了微调成本和模型大小。针对本地控件,我们引入了多尺度条件注入策略;对于全局控件,使用全局条件编码器将其转换为条件标记,并与传入特征进行交互。这两个适配器可以单独训练,提高了Uni-ControlNet的灵活性和易用性。Uni-ControlNet展示了良好的保真度和可控性,通过深入的消融分析和与其他方法的比较,我们证明了适配器设计的优越性。这些成果为文本到图像生成领域带来了新的可能性和进展。

二、Related Work

        这部分首先介绍了Text to Image最近的一些发展情况,然后讲述了可控的图像生成的一些发展。

        可控扩散模型旨在为T2I扩散模型提供更多用户控制,以指导生成结果,并近年来受到越来越多关注。实现可控扩散模型通常采用两种策略:从头开始训练和在冻结的预训练T2I模型上微调轻量级适配器。从头开始训练的方法如Composer通过训练大型模型实现高度可控性,但伴随着巨大训练成本。相比之下,ControlNet、GLIGEN和T2I-Adapter等方法将轻量级适配器引入预训练模型中,通过微调适配器降低训练成本。然而,这些方法通常为每个条件使用独立适配器,导致处理更多条件时的成本和模型尺寸增加。同时,某些方法如GLIGEN不支持复合控制,影响了可组合性。我们的Uni-ControlNet方法采用微调适配器策略,解决了上述限制。Uni-ControlNet将条件分为本地控件和全局控件两组,并仅需两个额外适配器。由于论文所提出的新设计的适配器结构,Uni-ControlNet在训练成本、模型大小、可控性和生成质量方面均优于ControlNet、GLIGEN和T2I-Adapter。

三、Method

        这幅图展示了整个Uni-ControlNet的框架,主要被分为三个部分,基础扩散模型(论文所用的是Stable diffusion),以及两个适配器:全局适配器和局部适配器。局部控制适配用于将一些简单的控制条件输入,比如:Canny边缘,MLSD边缘,HED边界,草图,Openpose ,Midas深度和分割掩码等,这些都是通过辅助图像来对图像生成实现控制的方法。对于全局适配器,它主要用于将全局控制信息添加到生成过程中去,比如利用CLIP图像编码器提取的一个参考内容图像的全局图像嵌入,它提供了对条件图像的语义内容的更细致入微的理解。

首先我们来回顾一下ControlNet的核心思想,为了将额外的控制条件输入到SD模型中去,ControlNet的想法是将神经网络块复制一个可训练的副本,然后利用这些可训练的副本将额外的控制条件添加到SD模型中去,如此我们只需要训练可训练副本模块即可,为了更好的将额外的条件添加进去,它这里用了一个零卷积来将可训练的神经网络块连接到原SD模型对应的神经网络块中去。这就是ControlNet的核心思想。

上图主要展示的是全局控制适配器和局部控制适配器的结构, 首先我们来看局部控制适配器,这里主要是借鉴了ControlNet的思想,它将原本的SD的编码器模块和中间块复制了一个副本,用于将局部条件输入,我们只需要训练这个可训练的副本,然后通过零卷积将这个复制的模块连接到基础SD模型,但与ControlNet不同的点在于,它并没有直接将特征信息传入基础SD模型,而是在零卷积后选择了多尺度条件注入策略(FDN)。通过FDN可以在所有分辨率下注入条件信息。

这个FDN实现了不同分辨率下注入条件信息。FDN将条件特征用于条件噪声特征,文中这个噪声特征就是逐步添加高斯噪声的潜在张量Z,通过这种方式以实现对图像生成更加精细的控制。

然后我们来看全局控制适配器,这个全局控制适配器实际上就是要给条件编码器,主要是由一组堆叠的前馈网络构成,通过全局控制适配器,将全局条件转换成全局控制信号并与原来的文本嵌入相连。输入到基础的Stable diffusion以及复制模块的交叉注意力层中。(也就是上一页PPT中的Extended Prompt)

训练策略:

        论文提到,直接联合微调局部控制信号和全局控制信号的适配器会导致较差的可控性能。因此,选择分别对这两种类型的适配器进行微调,以确保它们都可以得到充分的训练,并有效地为最终生成结果做出贡献。在微调每个适配器时,采用预定义的概率来随机丢弃或保留每个条件信息,以促进模型学习基于一个或多个条件生成结果。通过在推理过程中直接集成这两个单独训练的适配器,Uni-ControlNet已经能够以可组合的方式很好地结合全局和局部条件,而无需进一步的联合微调。

四、Experiments

上面的图表展示的是将Uni-ControlNet与其他方法在添加不同的辅助控制方式后所生成的图像的效果进行比较,Style\Content来表示全局条件。所用的指标是FID。

下面的图是将Uni-ControlNet与其他方法在可控性方面进行的比较,由于所用的辅助控制方式不同,所用的评价指标也不相同。 所用的指标包括:SSIM(结构相似性)、mAP(目标关键点相似性)、MSE(均方误差)、mIOU(平均交并比)、CLIP Score

来看消融实验,图片部分展示的是不同的方法生成的图像效果之间的比较,上半部分是将论文所提的方法与其他通过直接注入方式添加控制的方法进行比较;下半部分,是将论文所提方法与微调训练方式的方法进行比较。而图表则表现了他们的性能。

Injection-S1,Injection-S2是使用了其他研究所提出的条件注入方法实现的效果。

对于Injection-S3,这里将论文所提出的方法与只将全局条件添加到控制适配器而不添加到基础SD模型中进行比较。

对于“Train-S1”,实际上就是同时微调全局控制适配器和局部控制适配器;  对于Train-S2,则是指先分别微调两个控制适配器然后再进行联合微调的方式。而论文所提出的Uni-ControlNet方法只需要将两个控制适配器进行分别的微调,而不需要进一步的联合微调。从实验结果看,Uni-ControlNe在大部分情况下的效果是比较好的。

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

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

相关文章

腾达路由器检测环境功能破解MISP基础

在虚拟机上用qemu运行腾达路由器的网站固件会遇到无法识别网络的问题,这篇主要是破解这个功能,使腾达路由器成功在虚拟机上运行,方便漏洞复现 本次用到的腾达路由器版本: https://www.tenda.com.cn/download/detail-3683.html下…

Python 开发图形界面程序

用 Python 语言开发图形界面的程序,有2种选择: Tkinter 基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…

玩家至上:竞技游戏设计如何满足现代玩家的需求?

文章目录 一、现代玩家需求分析二、以玩家体验为核心的游戏设计三、个性化与定制化服务四、强化社交互动与社区建设五、持续更新与优化《游戏力:竞技游戏设计实战教程》亮点编辑推荐内容简介目录获取方式 随着科技的飞速发展和游戏产业的不断壮大,现代玩…

软件测试之Web自动化测试

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、自动化测试基本介绍 1、自动化测试概述: 什么…

Android布局优化之include、merge、ViewStub的使用,7年老Android一次坑爹的面试经历

前言 开发10年,老码农,曾经是爱奇艺架构 点击领取完整开源项目《安卓学习笔记总结最新移动架构视频大厂安卓面试真题项目实战源码讲义》 师,东芝集团高级工程师,三星架构师。5年之内频繁被辞退。内心拔凉拔凉的,在这五…

Android大厂高级面试题灵魂100问,带你彻底弄明白

“2020年技术没有成长,我今年一定要好好努力学习!” “在现在这个公司都工作了3年了,一毛钱工资都没有涨…” “年前真倒霉,老板嫌我工资高,被优化了,年后又遇到了疫情,现在都还没有找到合适的工…

141.乐理基础-男声女声音域、模唱、记谱与实际音高等若干问题说明

上一个内容:140.乐理基础-音程的转位-CSDN博客 上一个内容练习的答案:红色箭头指向的是转为,比如第一个只要写成c低g高都是正确的,不一定非要和图中一样 首先在 12.音域、1C到底是那一组的C 里面写了人声的音域,大致默…

最强照片AI无损放大工具

使用人工智能的能力来放大图像,同时为惊人的结果添加自然的细节。 使用深度学习技术,A.I.GigaPixEL可以放大图像并填满其他调整大小的产品所遗漏的细节。 下载地址:最强照片AI无损放大工具.zip

dolphinscheduler试用(一)(边用边修bug。。。。create tenant error)

(作者:陈玓玏) 前提:部署好了dolphinscheduler,部署篇见https://blog.csdn.net/weixin_39750084/article/details/136306890?spm1001.2014.3001.5501 官方文档见:https://dolphinscheduler.apache.org/…

MyBatis操作数据库(SQL注入)

本文主要来讲解6大标签&#xff0c;以便更好的MyBatis操作数据库&#xff01; <if>标签<trim>标签<where>标签<set>标签<foreach>标签<include>标签 前提需求&#xff1a; MyBatis是一个持久层框架&#xff0c;和Spring没有任何关系&…

【LeetCode】升级打怪之路 Day 14:二叉树的遍历

今日题目&#xff1a; 144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102. 二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右视图637. 二叉树的层平均值429. N 叉树的层序遍历515. 在每个树行中找最大值116. 填充每个节点的下一个右侧节点指针117. …

Fiddler入门:下载、安装、配置、抓包、customize rules

一、fiddler下载安装 安装包下载链接&#xff1a;https://www.telerik.com/download/fiddler 随便选个用途&#xff0c;填写邮箱&#xff0c;地区选择China&#xff0c;勾选“I accept the Fiddler End User License Agreement”&#xff0c;点击“DownLoad for windows”&…

⭐每天一道leetcode:28.找出字符串中第一个匹配项的下标(简单;暴力解;KMP算法,有难度)

⭐今日份题目 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例1 输入&#xff1a;haystack &q…

3.6作业

作业要求&#xff1a;数据库操作的增、删、改 程序代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//定义数据库句柄指针sqlite3 * ppDb NULL;//打开数据库&#xff0c;如果数据库不存在&#xff0c;则创建数据库//将数据库句柄由参数…

移动开发:图像查看器

一、新建ImageViewer模块&#xff0c;添加p1-p9图片(注意mdpi后缀) 二、相关代码 1.MainActivity.java文件代码 package com.example.imageviewer;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.MotionEvent; import and…

Jacob使用教程--通过宏来寻找变量名

说明: 这里做个随比,参考资料请见前面的系列文章 问题展示: 对于一个操作,当我们不知道怎么利用jacob写代码时,而且网上也找不到,可以按照如下操作: 比如,我们要删除 word中的文本框 我们根本不知道文本框,这个变量叫什么,在Microsoft文档哪个父目录下面, 可以通过…

【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制

目录 1.先理清一下概念 2.锁 2.1.分类 2.2.表锁 2.3.行锁&#xff08;MVCC&#xff09; 2.4.间隙锁 2.5.行锁变表锁 2.6.强制锁行 1.先理清一下概念 所谓并发控制指的是在对数据库进行并发操作时如何保证数据的一致性和正确性。在数据库中与并发控制相关的概念有如下几…

测试遍历1e5,1e8数组耗时

1e8大概0.38秒&#xff0c;即380ms 1e5耗时1ms左右&#xff1a; 代码使用方式来自&#xff1a;clock - C Reference (cplusplus.com)

MicroPython ADX51x读取ID和ADC值

from machine import Pin, SoftSPI import timedef ID(agreement):#txbuf 需要将16进制转换为10进制rxbuf bytearray(3) # create a bufferspi SoftSPI(baudrate200000, polarity1, phase0, mosiPin(16), misoPin(4), sckPin(2))spi.init(baudrate125000) # set the bau…

【前端系列】vue

这里写目录标题 一、Vue简介1.1 主流前端框架/库简介 二、下载和安装Vue2.1 下载2.2 安装完成后&#xff0c;检查2.3创建全局安装目录和缓存日志目录2.4 为了下载包快速&#xff0c;改源为淘宝镜像2.5 查看npm配置修改是否成功 三、配置环境变量环境变量—用户变量—选中Path—…