ControlNet

这里从实际存在的问题出发,对代码框架不兼容、模型加载受限等问题率先提出了自研解决方案,快速帮助开发者更容易地开发。

在 ChatGPT 出圈不久,ControlNet 的横空出世很快在英文和中文互联网收获了众多开发者和普通用户,甚至有用户宣传 ControlNet 的出现将 AI 创作带入了直立行走的时代。不夸张地说,包括 ControlNet 在内,同期的 T2I-Adapter、Composer, 以及 LoRA 训练技巧,可控生成作为 AI 创作最后一道高墙,极有可能在可预见的时间内有进一步突破,从而极大地降低用户的创作成本,提高创作的可玩性。距离 ControlNet 开源仅仅过去两周,其官方 Star 就已经超过 1 万,这种热度无疑是空前的。

与此同时,开源社区也极大地降低了用户的使用门槛,如 Hugging Face 平台提供了基础模型权重以及通用的模型训练框架 diffusers,stable-diffusion-webui 开发了完善的一套 Demo 平台,Civitai 贡献了海量风格化 LoRA 权重。

尽管 webui 作为目前最受欢迎的可视化工具,已经快速地支持了近期推出的各种生成模型,并且支持众多选项供用户设置。由于其重点考虑了前端界面的易用性,背后代码结构其实十分复杂,对于开发者而言不够友好。比如 webui 尽管支持了多种类型的加载和推理,但却无法支持不同框架下的转换,也无法支持模型的灵活训练。我们在社区讨论中发现了许多现有开源代码暂未解决的痛点。

首先,代码框架不兼容,目前热门的模型,如 ControlNet、T2I-Adapter,与主流的 Stable Diffusion 训练库 diffusers 不兼容,ControlNet 预训练的模型无法直接在 diffusers 框架中被使用。

其次,模型加载受限,目前模型保存格式多样,如.bin、.ckpt、.pth、.satetensors 等,除了 webui 外,目前 diffusers 框架对于这些模型格式的支持还有限,考虑到 LoRA 大部分模型以 safetensors 保存为主,用户很难直接将 LoRA 的模型加载到已有的基于 diffusers 框架训练的模型中。

第三,基础模型受限,目前 ControlNet、T2I-Adapter 均基于 Stable-Diffusion-1.5 进行训练,且仅开源了 SD1.5 下的模型权重,考虑到特定场景,已经存在诸如 anything-v4、ChilloutMix 等优质动漫模型,即使引入了可控信息,最终生成结果仍然受限于 SD1.5 中 UNet 的能力。

最后,模型训练受限,目前 LoRA 已经被广泛验证是风格迁移、保持特定形象 IP 最有效的方法之一,但 diffusers 框架目前仅支持 UNet 的 LoRA 嵌入,无法支持 text encoder 的嵌入,会限制 LoRA 的训练。

我们和开源社区讨论后,了解到 diffusers 框架作为通用代码库,正计划同时适配近期不断推出的生成模型;由于涉及较多底层接口重写,仍然需要一段时间更新。为此,我们从以上实际存在的问题出发,率先提出了对于每一个问题的自研解决方案,快速帮助开发者更容易地开发。

LoRA、ControlNet、T2I-Adapter 到 diffusers 的全适配方案

LoRA for diffusers

本方案是为了在 diffusers 框架,即基于 diffusers 训练保存的模型中,灵活嵌入各种格式的 LoRA 权重。由于 LoRA 的训练通常冻结 base model,因此可以作为可插拔模块轻松嵌入已有模型,作为风格或 IP 条件约束。LoRA 本身是一种通用的训练技巧,它的基本原理是,通过低秩分解,可以极大地减少模块的参数量,目前在图像生成中,一般用于训练独立于 base model 外的可插拔模块,实际使用是以残差形式与 base model 的输出合并。

首先是 LoRA 权重的嵌入,目前 Civitai 平台上提供的权重主要以 ckpt 或 safetensors 格式存储,分以下两种情况。

(1)Full model(base model + LoRA 模块)

如果 full model 是 safetensors 格式,可以通过以下 diffusers 脚本转换

python ./scripts/convert_original_stable_diffusion_to_diffusers.py --checkpoint_path xxx.safetensors  --dump_path save_dir --from_safetensors

如果 full model 是 ckpt 格式,可以通过以下 diffusers 脚本转换

python ./scripts/convert_original_stable_diffusion_to_diffusers.py --checkpoint_path xxx.ckpt  --dump_path save_dir

转换完成后,可直接利用 diffusers 的 API 进行模型加载

from diffusers import StableDiffusionPipeline  pipeline = StableDiffusionPipeline.from_pretrained (save_dir,torch_dtype=torch.float32)

(2)LoRA only (仅包含 LoRA 模块)

目前 diffusers 官方无法支持仅加载 LoRA 权重,而开源平台上的 LoRA 权重基本以这种形式存储。本质上是完成 LoRA 权重中 key-value 的重新映射,使其适配到 diffusers 模型中。为此,我们自行支持这个功能,提供了转换脚本。

pipeline = StableDiffusionPipeline.from_pretrained (model_id,torch_dtype=torch.float32)model_path = "onePieceWanoSagaStyle_v2Offset.safetensors"state_dict = load_file (model_path)

只需要指定 diffusers 格式的模型,以及存储为 safetensors 格式的 LoRA 权重。我们提供了一个转换示例。​​​​​​​

# the default mergering ratio is 0.75, you can manually set it python convert_lora_safetensor_to_diffusers.py

此外,LoRA 本身由于其轻量化,可以在小数据情况下快速完成训练,并能够嵌入到其他网络中。为了不局限于已有 LoRA 权重,我们在 diffusers 框架中支持了 LoRA 的多模块(UNet+text encoder)训练,并已经在官方代码库提交 PR(https://github.com/huggingface/diffusers/pull/2479),并支持了 ColossalAI 中训练 LoRA。

代码开源在:https://github.com/haofanwang/Lora-for-Diffusers

ControlNet for diffusers

本方案是为了支持在 diffusers 框架中,使用 ControlNet。基于开源社区的部分尝试,我们提供了完整的 ControlNet+Anything-V3 使用用例,支持将 base model 从原本 SD1.5 的替换到 anything-v3 模型,使 ControlNet 具备较好动漫生成的能力。

此外,我们也支持 ControlNet+Inpainting,并提供了适配 diffusers 的 pipeline,

 以及多条件控制的 Multi-ControlNet。

代码开源在:https://github.com/haofanwang/ControlNet-for-Diffusers

T2I-Adapter for diffusers

与 ControlNet 相似,我们也同时支持了同期开源的 T2I-Adapter 到 diffusers 的适配。

代码开源在:https://github.com/haofanwang/T2I-Adapter-for-Diffusers

目前以上三种适配方案均已经向社区开源 whaosoft aiot http://143ai.com 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么安装pip

Python怎么安装pip Python是一种高级编程语言,用途广泛,常用于数据科学、机器学习和人工智能。在使用Python时,经常需要安装和使用各种第三方库,而pip就是Python的标准包管理工具,能够方便地安装和管理第三方库。在本…

chatgpt赋能python:Python中byref参数详解

Python中byref参数详解 对于使用Python编程的工程师们来说,参数传递是必不可少的一部分。在Python中有两种传递参数的方式,分别是byref和byvalue。这篇文章将着重介绍Python中的byref参数。 什么是byref参数? 在Python中,byref…

chatgpt赋能python:烧录代码过程是怎样的

烧录代码过程是怎样的 烧录代码是将编写好的程序代码烧录进内置闪存器件(Flash)或外部存储器(SD卡、EEPROM等)中的过程。本文将介绍烧录代码的具体过程和常用工具,以及一些注意事项。 烧录代码的步骤 步骤一&#x…

chatgpt赋能Python-pythonidle怎么清屏

Python IDLE 如何清屏?– 一位有10年Python编程经验的工程师教你如何快速操作! 作为一名Python工程师,无可避免会遇到大量的控制台输出。这些输出对于调试和开发项目来说非常重要,但有时候它们会令人感到困扰,而且在输…

年薪 10 万的虚拟人,网友直呼“破防”:工资比我都高啊?

整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 刚过去不久的 2023 跨年晚会,你看了吗?除了各大明星助阵,相信你也发现了,今年各大卫视的表演嘉宾中,几乎都有“虚拟数字人”的亮相&#xf…

玩转微信营销和推广的10种方法和技巧

【二维码免费微信WIFI微信公众号易企秀微官网H5应用页面凡科互动分销系统截图反馈工具分享有礼微支付微信墙/微信大屏按需的APP】 集文字、语音、视频于一体的微信,正在深刻地改变着我们的社交与生活。当自媒体迅速崛起,微信公众号广泛受宠,微…

微信营销话术

微信只是一个工具,营销的本质和传统方式并没有太大的变化,如何利用好微信为大家带来利益才是最核心最实在的。今天跟大家分享下微信营销话术。 一、顾客说考虑一下 对策:时间就是金钱。机不可失,失不再来。 1、询问法 通常在这…

Alexa 智能音箱开发智能家居

一,前期准备材料 一个亚马逊开发者账户。注册是免费的连接设备,如灯,恒温器,相机或带有云API的锁,用于控制它支持Alexa的设备,例如Amazon Echo一个AWS账户。您在AWS Lambda函数中托管您的技能代码&#xf…

美国 CS 就业,大多数公司真的不看学校吗?

来源:https://www.zhihu.com/question/57166186 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 论坛里,经常有人说:「CS 就业不看学校」。 请问除了 Oracle 之类的公司,大多数 IT 公司看不…

不想被时代淘汰?网络工程师未来的出路在这里!

在01年的时候,一名有经验的网络工程师,工资收入可以达到2W/月,和当时的薪资水平比,简直高出了一个世纪。 当时的培训机构还不像现在遍地都是,他们学习网络知识是通过几个人合伙出钱买设备死磕技术,还有人就…

相机光圈和快门

相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈(Ap…

AutoCV第二课:Python基础

目录 Python基础前言1.流程控制1.1 条件语句1.2 循环语句1.2.1 while循环语句1.2.2 for循环语句 1.3 作业1.4 拓展-try except语法 2.函数2.1 函数定义2.2 函数的参数2.2.1 位置参数2.2.2 命名参数2.2.3 默认参数2.2.4 可变参数2.2.5 参数展开 2.3 递归函数2.3.1 递归函数定义2…

Ubuntu20.04服务器接收SYN,不返回SYN+ACK

情况 Ubuntu20.04 live 服务器启动了一个Nginx服务,服务使用80端口,服务器有2个网卡。经过公司H3C路由器NAT转发,将内部服务器的80端口映射到公网5088端口。通过内网的主机可以服务Nginx服务,通过公网IP5088端口,无法…

IP编址(包括网络地址和广播地址)

1.总述 IP地址使用32位二进数表示,每一个主机或路由器的接口都有全局唯一的IP地址(NAT是个例外),它由网络号(NetID)和主机号(HostID)组成,它可以分为五类,如下: 2.地址划分 1)A…

怎样解决ip访问受限问题

现在是互联网时代。一些网络工作者需要收集一些网站的数据,收集数据需要频繁访问网站。为了有效控制网站流量,保证用户访问速度,一些目标网站会限制单个IP访问请求次数。对于爬虫工作者来说,目标网站限制访问的机制让他们头疼。那…

vcenter服务器修改ip,vcenter服务器默认ip地址

vcenter服务器默认ip地址 内容精选 换一换 安全组类似防火墙功能,是一个逻辑上的分组,用于设置网络访问控制。用户可以在安全组中定义各种访问规则,当弹性云服务器加入该安全组后,即受到这些访问规则的保护。入方向:入方向规则放通入方向网络流量,指从外部访问安全组规则…

没有计算机网络地址怎么办,教大家电脑没有ip地址mac地址怎么办

近日有关于电脑没有ip地址mac地址怎么办的问题受到了很多网友们的关注,大多数网友都想要知道电脑没有ip地址mac地址怎么办的具体情况,那么关于到电脑没有ip地址mac地址怎么办的相关信息,小编也是在网上进行了一系列的信息,那么接下来就由小编来给大家分享下小编所收集到与电…

什么是IP地址

一、IP地址概念 IP地址是一个32位的二进制数,它由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机。网络ID用来标识计算机所处的网段;主 机ID用来标识计算机在网段中的位置。IP地址通常用4组3位十进制数表示,中间用…

IP地址的规划和设计方法(一)

一,IP地址的概念和划分地址新技术的研究 (1)标准分类的IP地址 第一阶段是在IPv4协议制定的初期,时间大致在1981年左右。那时候网络的规模比较小,用户一般是通过终端, 经过大型计算机或中小型计算机接入ARPANET。 IP地址是由网络号…

IP地址划分和子网

本文主要介绍IP地址划分,子网,子网掩码相关知识。 IP地址划分历史 根据IP地址的研究和发展,暂时分为4个阶段,重要是前两个阶段。 标准分类的IP地址 最开始接入网络的计算机比较少,IP地址由网络号和主机号构成&#x…