Textual Inversion、DreamBooth、LoRA、InstantID:从低成本进化到零成本实现IP专属的AI绘画模型

news2024/10/4 23:47:58

2023年7月份国内有一款定制写真AI工具爆火。一款名为妙鸭相机的AI写真小程序,成功在C端消费者群体中出圈,并在微信、微博和小红书等平台迅速走红,小红书上的话题Tag获得了330多万的浏览量,相关微信指数飙升到了1800万以上。

其他能够提供类似功能例如:LensaAI,Midjourney,DALL-E3,Stable Diffusion,Tiamat。只不过LensaAI和妙鸭相机对于定制图像生成更加专精一些。

这背后用到技术演化,就是Textual Inversion、DreamBooth、LoRA、InstantID这四类,从一开始需要样本数据微调,到2024年1月发布InstantID不需要样本数据微调。

本文跟朋友们分享相关技术。

欢迎关注留言!

Stable Diffusion 简称 SD。

Textual Inversion

为了更好理解Textual Inversion算法,我先回顾下SD词嵌入向量的使用方式。
也可以看我以前的文章。

当我在SD AI上画画时,我会先输入一个提示。这个提示会被一个叫做“tokenizer”的工具拆分成很多小部分,每个小部分都有一个独特的标识,叫做“token_id”。接着,这些“token_id”会在一个已经准备好的词库里找到对应的词嵌入向量。这些词嵌入向量就像是我们提示的“翻译”,让机器能更好地理解。

然后,我会把这些词嵌入向量放在一起,传给CLIP的文本编码器。这个编码器会帮我把这些向量变成一种更容易理解的形式,也就是文本表征。有了这个文本表征,我就可以用一个叫做“交叉注意力机制”的工具来控制我的图像生成了。简单来说,就是我想画什么,机器就能帮我画出什么。
在这里插入图片描述
理解了 SD 词嵌入向量的使用,再来学习 Textual Inversion 这个算法就会非常简单。

Textual Inversion 算法的本质是学习一个全新的词嵌入向量,用于指代定制化的内容。其核心思想便是,对于一个给定的物体或者风格,去学习一个全新的词嵌入向量,并绑定一个符号比如 S*,为其分配一个新的 token_id。这样,每次文生图的时候只需要带上 S*,就能生成我们想要定制化的物体或者风格。

**重点在于,这个过程不需要对整个AI模型进行调整或重新训练,只是在它的词汇库中添加了一个新的词汇而已。**这样做的好处是可以保留AI模型原有的理解能力和创造力,同时又增加了一些个性化的元素。

需要3到5张展示特定概念(比如你的猫)的图片来训练AI。

论文地址:https://arxiv.org/pdf/2208.01618.pdf
https://arxiv.org/pdf/2208.01618.pdf
https://arxiv.org/pdf/2208.01618.pdf
https://arxiv.org/pdf/2208.01618.pdf

Textual Inversion 的训练其实挺简单的,分两步走。

首先,你得给你想要的关键词,比如 S*,配一个新的“身份证”,我们叫它 token_id。然后,给这个新“身份证”初始化一个词嵌入向量。举个例子,如果原来的词库里已经有 20000 个词了,那 S* 的“身份证”就是第 20001 号。

接下来,找个已经训练好的 AI 画画模型,比如 Stable Diffusion 或者 DALL-E 3。在训练的时候,CLIP 文本编码器和 UNet 这些模型的“技能”都不变,就固定在那里。然后,用你提供的 3-5 张图片,按照模型的标准训练方法来训练。这个过程中,只有你给 S* 新初始化的那个词嵌入向量在“学习”。

训练完了,你就得到了一个定制化的词嵌入向量,它能帮你表达出训练图片里的物体或者风格。

这里有两点要注意:
一是这个词嵌入向量是和你选的 AI 绘画模型绑在一起的;
二是 Textual Inversion 还可以同时优化好几个新增的词嵌入向量。

如果你想更深入了解,可以点击链接去看看 Textual Inversion 的训练代码。

https://github.com/huggingface/diffusers/blob/main/examples/textual_inversion/textual_inversion.py

DreamBooth

DreamBooth 论文:https://arxiv.org/abs/2208.12242

Textual Inversion 在训练时,能学习的参数并不多,大概只有512或768个浮点数那么点儿。所以,它在定制化生成方面的能力就有点儿局限。在市场上,如果你想要更个性化的生成效果,大家通常更喜欢用 DreamBooth。

说到 DreamBooth 这个名字,其实挺有意思的。Google 团队打了个比方,说它就像一个摄影棚,你进去拍照后,不仅仅是一张公开可用的图片,还能把你拍的东西放到你梦想的任何场景里。用 DreamBooth 的时候,你上传3~5张图,再加个新的描述词,就能定制一个物体或者一种风格了。后面我放了些图片,你可以看看 DreamBooth 的生成效果有多酷。
https://arxiv.org/abs/2208.12242
https://arxiv.org/abs/2208.12242

在这里插入图片描述

我来给你讲讲这个方案是怎么一回事吧。其实步骤很简单,就两步。

首先,你得挑个不常见的词作为关键词,比如说“CSS”。这个和Textual Inversion有点儿不同,那里的词得绑定全新的词嵌入向量,但这里不用。

然后呢,你得找个已经训练好的AI绘画模型,比如Stable Diffusion或者DALL-E 3。在训练过程中,UNet模型的权重是要打开的。接下来,就按照对应的AI绘画模型的标准训练方法,在你给的3-5张图片上训练一下。

你可能会有个疑问:就用这么几张图去调整UNet那么多参数,模型会不会变得太“偏执”了?比如说,如果你用了3-5张自己小狗的照片去训练,那模型是不是就只会画这一种样式的小狗了?没错,确实会有这个问题。这样训练出来的模型,不管你的prompt是“a CSS dog”还是“a dog”,它都只会画出你训练用的那种小狗。

不过别担心,论文作者已经想到了解决办法,那就是保留损失(preservation loss)。具体操作就是,先用AI绘画模型生成一批小狗的图片,然后在训练DreamBooth的时候,也把这批图像加进去一起训练。这样一来,模型就不会那么“偏执”了。

哦对了,训练DreamBooth的时候,CLIP文本编码器也是可以打开的。实践证明,这样做可以让定制化图像生成的效果更好。

总的来说,Textual Inversion和DreamBooth的区别就在于:前者只是优化一两个词嵌入向量,而后者则是对整个AI绘画模型进行微调。

如果你想更深入了解,可以点击链接去看看 DreamBooth 的训练代码。

https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py

更多内容关注这个用户,以后大部分内容都迁移到这里:欢迎关注

每天学点新技术,生活工作更自如!

我是 李孟聊AI,独立开源软件开发者,SolidUI作者,对于新技术非常感兴趣,专注AI和数据领域,如果对我的文章内容感兴趣,请帮忙关注点赞收藏,谢谢!

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

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

相关文章

【RT-DETR有效改进】2023.12月份最新成果TransNeXt像素聚焦注意力主干(全网首发)

前言 大家好,我是Snu77,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持Re…

检查字符串数组中的每个字符串是否全为“不显示元素”(如空格、制表符、换行符等)numpy.char.isspace()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 检查字符串数组中的每个字符串 是否全为“不显示元素” (如空格、制表符、换行符等) numpy.char.isspace() [太阳]选择题 请问以下代码最终输出结果是? i…

RabbitMQ中交换机的应用及原理,案例的实现

目录 一、介绍 1. 概述 2. 作用及优势 3. 工作原理 二、交换机Exchange 1. Direct 2. Topic 3. Fanout 三、代码案例 消费者代码 1. 直连direct 生产者代码 测试 2. 主题topic 生产者代码 测试 3. 扇形fanout 生产者代码 测试 每篇一获 一、介绍 1. …

【前端小点】Vue3中的IP输入框组件

本文章记录,如何在vue3项目开发中,使用ip输入框组件. 之前写过vue2版本的ip组件,为了更好的适应vue3,此次进行vue3代码重写 先上效果图: 禁用效果图: 主要是组件的开发,代码如下,可直接拷贝使用. 大概思路就是: 使用四个输入框拼接,然后给输入内容添加校验操作,添加光标移动,…

05 双向链表

目录 1.双向链表 2.实现 3.OJ题 4.链表和顺序表对比 1. 双向链表 前面写了单向链表,复习一下 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多作为其他数据结构的子结构,如哈希桶、图的邻接等。另外这种结构在…

你知道Mysql的架构吗?

msyql分为server曾和存储引擎层 server层包括了连接器(管理连接,权限验证)、查询缓存(命中直接返回结果)、分析器(词法分析,语法分析)、优化器(执行计划生成,索引选择)、…

浪花 - 查询队伍列表

一、接口设计 1. 请求参数:封装 TeamQuery package com.example.usercenter.model.dto;import com.example.usercenter.common.PageRequest; import lombok.Data;/*** author 乐小鑫* version 1.0* Date 2024-01-22-20:14*/ Data public class TeamQuery extends …

使用Unity创建VisionPro应用

1、下载特定Unity版本 Unity账号需要是Pro账号,普通账号不行,目前只支持这1个Unity版本,不要下载任何其它版本:unityhub://2022.3.11f1/d00248457e15) 其它条件:使用Mac电脑M系列芯片,XCode15 Beta2及以上 参考资料: 苹果官网:苹果官网 Unity官网:Unity官网 官方教程…

C#,生成图片的指定尺寸缩略图的源代码

编程的时候经常用到图像的缩略图。 本文发布一个用于生成指定尺寸的缩略图的简单方法。 1 文本格式 private void button1_Click(object sender, EventArgs e) { CreateThumbnail("demo.jpg", "demo_thumb.jpg", 128, 128); } private void CreateTh…

MySQL函数—日期函数

MySQL函数—日期函数 函数功能CURDATE()返回当前日期,只有年月日CURTIME()返回当前时间,只有时分秒NOW()返回当前日期和时间 年月日时分秒YEAR(date)获取指定date的年份MONTH(date)获取指定date的月份DAY(date)获取指定date的日期DATE_ADD(date,INTERVAL…

项目解决方案: 视频融合(实时监控视频和三维建模进行融合)设计方案

目 录 一、需求描述 1、视频接入和控制要求 2、视频播放需求 3、提供其他应用的调用 二、方案设计 (一)系统设计图 (二)产品实现方案 三、产品和功能描述 (一)总体描述 &#xf…

2024问题汇总

2024问题汇总 Linux1.df-h / df -i 命令2.为多网卡Linux云服务器配置策略路由 Windows1.快速进入控制面板 网络连接指令 Linux 1.df-h / df -i 命令 df -h / df -i 都表示查看磁盘空间使用信息 如果遇到磁盘快满的情况,用这两个命令区别如下 df -h 是去删除比较大 …

Java的异常 Exception

从继承关系可知:Throwable 是异常体系的根,它继承自Object 。Throwable 有两个体系: Error 和Exception. Error表示严重的错误,程序对此一般无能为力,例如: OutOfMemoryError :内存耗尽NoClassDefFoundError :无法加载某个ClassStackOverflowError :虚…

web安全学习笔记【05】——反弹Shell、正反向连接

思维导图 #知识点: 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&H5&am…

软件安全测试的重要性简析,专业安全测试报告如何申请?

在当今数字化时代,软件在我们的日常生活中扮演着至关重要的角色,但也带来了各种潜在的安全威胁。为了保障用户的信息安全和维护软件的可靠性,软件安全测试显得尤为重要。 软件安全测试是指通过一系列的方法和技术,对软件系统中的…

BACnet转Modbus协议转换网关BA111

随着通讯技术和控制技术的发展,为了实现楼宇的高效、智能化管理,集中监控管理已成为楼宇智能管理发展的必然趋势。在此背景下,高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生,广泛应用于楼宇自控和暖通空调系统应用中…

Webpack5 基本使用 - 2

常用 loader loader 是辅助打包工具。webpack 默认只能打包 js 文件,打包其它模块就需要配置 loader 来告诉 webpack 该怎么去打包其它文件。loader 可以将文件从不同的语言转换为 JavaScript。一类文件如果需要多个 loader 处理,loader 的执行顺序是从…

数据采集与预处理01: 项目1 数据采集与预处理准备

数据采集与预处理01: 项目1 数据采集与预处理准备 任务1 认识数据采集技术,熟悉数据采集平台 数据采集:足够的数据量是企业大数据战略建设的基础,因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环&#…

《WebKit 技术内幕》学习之十二(2):安全机制

2 沙箱模型 2.1 原理 一般而言,对于网络上的网页中的JavaScript代码和插件是不受信的(除非是经过认证的网站),特别是一些故意设计侵入浏览器运行的主机代码更是非常危险,通过一些手段或者浏览器中的漏洞&#xff0c…