浅析扩散模型与图像生成【应用篇】(二十二)——DreamBooth

21. DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

  本文提出一种根据少量样例图片来对文生图模型进行微调的方法,从而可以生成包含样例物体,但风格、姿态、背景都可以任意修改的图片。现有的文生图模型都是需要给出特别详细的描述,然后生成对应的图片,但即使描述得再具体,再详细,生成的图片可能也不能满足使用者的要求。比如,我就想生成与自己家狗一样的狗狗照片,但是姿势、背景都可以自由设定,而不是任意生成一张狗的图片。为了解决这个问题,本文通过输入少量样例图片(例如几张自己家狗的照片),并给定一个包含特殊标记符的文字描述(“a [V] dog”),来对一个文生图模型(如SD、Imagen)进行微调训练,使模型将样例中狗的特征与特殊标记符"[V]“关联起来。在推理时,只要在文字描述中加入特殊标记符”[V]“就能个性化的生成自己家狗狗的图片,如“a [V] dog is swimming”。这一特性无疑是非常有价值的,因此在各大图像生成软件中也都包含了DreamBooth工具。
在这里插入图片描述
  那么这么惊艳的效果是如何实现的呢?首先,我们简单回顾一下当前的文生图模型是如何工作的。目前流行的文生图模型,普遍采用基于扩散模型的架构,给定一个文字提示 P P P,由文本编码器 Γ \Gamma Γ进行编码后得到对应的文本条件 c = Γ ( P ) c=\Gamma(P) c=Γ(P),将一个随机噪声 ϵ \epsilon ϵ和条件 c c c一起输入到生成模型 x ^ θ \hat{x}_{\theta} x^θ中,可得生成的图像 x g e n = x ^ θ ( ϵ , c ) x_{gen}=\hat{x}_{\theta}(\epsilon, c) xgen=x^θ(ϵ,c)。生成模型 x ^ θ \hat{x}_{\theta} x^θ的训练过程如下 E x , c , ϵ , t [ w t ∥ x ^ θ ( α t x + σ t ϵ , c ) − x ∥ 2 2 ] \mathbb{E}_{\mathbf{x},\mathbf{c},\boldsymbol{\epsilon},t}\big[w_t\|\hat{\mathbf{x}}_\theta(\alpha_t\mathbf{x}+\sigma_t\boldsymbol{\epsilon},\mathbf{c})-\mathbf{x}\|_2^2\big] Ex,c,ϵ,t[wtx^θ(αtx+σtϵ,c)x22]其中 x \mathbf{x} x表示真实的图像, α t \alpha_t αt可以理解为是噪声和原图之间的比例系数, σ t \sigma_t σt是噪声的方差, w t w_t wt是损失权重, t t t是时间步数。通过对原始图像逐步添加噪声得到时刻 t t t时的有噪声图像 z t = α t x + σ t ϵ \mathbf{z}_t=\alpha_t\mathbf{x}+\sigma_t\boldsymbol{\epsilon} zt=αtx+σtϵ,然后利用生成模型在文本条件的引导下对噪声图像逐步去噪得到生成图像。当然基于扩散的文生图方法还是有很多细节和实现方式了,具体可参考本博其他的文生图模型介绍,如DALLE·2,LDM和GLIDE。
  了解了文生图模型的大体流程,下面就是要考虑如何让其根据我们提供的样例生成个性化图片了。最直接的方法,当然是使用样例图片对预训练好的文生图模型进行微调训练,但经过微调训练之后,模型可能具备了生成样例图片的能力,但它本质上是个随机采样的过程,无法保证每次生成的都是指定的样例图片。当然我也可以反复的训练,直到模型过拟合,只能输出特定样例的图片,但同时模型也丧失了生成其他图片的能力了,这肯定也不是我们希望看到的。那么如何告诉模型,我现在希望生成的就是我给你这几个样例图片里的对象呢?作者想到可以用一个特殊的标记符”[V]“来描述它,当模型看到输入文本里带有描述符”[V]“时,就知道我要生成样例图片中的对象了,如果没有特殊标记符,则生成其他的对象。基于这个想法,作者提出一种微调训练方法,给定几张样例图片(通常3-5张),并给定一个带有特殊标记符的文本描述“a [identifier] [class noun]”,其中”[identifier]“就是上文提到的特殊标记符,”[class noun]"是样例图片中对象的类别。利用这些文本-图像对对模型进行微调训练,使模型将样例对象的特征与特殊标记符绑定在一起,再看到这个标记符时就知道要生成样例对象了。
  那么这个特殊标记符如何设定呢?作者尝试使用了“unique”或“special”这类现成的英文单词,但这些词汇本身是具备一定含义的,在原有的文本编码器中也有相应的理解先验,因此需要模型先将这些词与原本的意思解绑,再与样例对象绑定,这就给模型训练带来很大的困难。此外,作者还尝试了使用随机的字母和数字组合,如“xxy5syt00”,但编码器是逐个字母来编码的,这些字母也会包含较强的先验与前面使用单词的方式存在同样的问题。最终,作者选择使用一些“罕见词”,就是利用文本库中的一些出现概率极低的词汇作为特殊标记符,如“sys”。实际中作者发现使用T5-XXL模型的文本库中{5000,…10000}范围里的字符数小于3的词汇可以取得较好的效果。
  在训练过程中,作者发现存在两个问题:1.语言漂移(Language drift),就是我们前文提到的随着训练,模型逐渐忘记了如何生成同类别的其他物体,如只能生成你家狗狗的照片,而不能生成其他狗的照片;2. 多样性损失,作者发现随着训练,模型输出图像中对象的姿态基本都保持不变。为了解决这个问题作者提出一种特定类别先验保持的损失函数(Class-specific Prior Preservation Loss),其思想也很简单,不是担心的在微调过程中忘记如何生成其他同类别的对象吗,我就把特殊标记符去掉,让模型同时生成一个其他类别的对象,和带有特殊标记符的生成过程一起进行微调,并计算损失,损失函数如下 E x , c , ϵ , ϵ ′ , t [ w t ∥ x ^ θ ( α t x + σ t ϵ , c ) − x ∥ 2 2 + λ w t ′ ∥ x ^ θ ( α t ′ x p r + σ t ′ ϵ ′ , c p r ) − x p r ∥ 2 2 ] \mathbb{E}_{\mathbf{x},\mathbf{c},\boldsymbol{\epsilon},\boldsymbol{\epsilon}^{\prime},t}[w_{t}\|\hat{\mathbf{x}}_{\theta}(\alpha_{t}\mathbf{x}+\sigma_{t}\boldsymbol{\epsilon},\mathbf{c})-\mathbf{x}\|_{2}^{2}+\lambda w_{t^{\prime}}\|\hat{\mathbf{x}}_{\theta}(\alpha_{t^{\prime}}\mathbf{x}_{\mathrm{pr}}+\sigma_{t^{\prime}}\boldsymbol{\epsilon}^{\prime},\mathbf{c}_{\mathrm{pr}})-\mathbf{x}_{\mathrm{pr}}\|_{2}^{2}] Ex,c,ϵ,ϵ,t[wtx^θ(αtx+σtϵ,c)x22+λwtx^θ(αtxpr+σtϵ,cpr)xpr22]可以看到是在原本的损失函数基础上又加了一项,其中 x p r \mathbf{x}_{\mathrm{pr}} xpr是由一个参数冻结的预训练好的扩散模型生成的图像, c p r \mathbf{c}_{\mathrm{pr}} cpr是文本条件,其对应的文本输入为“a [class noun]”,即去掉了特殊标记符, λ \lambda λ是一个权重系数。整个过程如下图所示
在这里插入图片描述
  作者表示在TPUv4上只需要5分钟就能对Imagen模型完成微调,在A100上也只需要五分钟就能完成SD模型的微调。经过微调训练,模型可以根据样例图片生成非常多样的图片,并保持样例对象的主要特征不变,如下图所示
在这里插入图片描述
  并且对于视角合成,艺术风格渲染和属性修改等复杂任务也不在话下
在这里插入图片描述

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

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

相关文章

CCF-Csp算法能力认证, 202303-1重复局面(C++)含解析

前言 推荐书目,在这里推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下 「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷…

QT:核心控件-QWidget

文章目录 控件enableobjectNamegeometrysetWindowTitleopacitycursorFonttooltipstyleSheet 控件 什么是控件? 如上所示,就是控件,而本篇要做的就是对于这些控件挑选一些比较有用的常用的进行讲解分析 在QT的右侧,会有对应的空间…

asp.net朱勇项目个人博客(3)

引文:按照书上的项目,我们最后实现管理端的三个增删改查的功能即可,相对与三个增删改查,文章,分类和留言,这里我们所需要用的的关联的一个表就是文章表,因为文章表每一个文章的增加显示和修改都需要对应的一个分类&…

【C++11新特性】lambda表达式和应用场景

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

汽车电子零部件(13):BMS电池管理系统

前言: 电池管理系统(BMS)确保电动汽车(EV)的能量分配安全高效。目前流行电动汽车中使用的有四种主要BMS架构,BMS与充电基础设施互为集成关系。BMS主要管理 的是电池组,电池组由很多电芯组成,比如下图是H/EV电池组的主要部件,显示了电池、连接、控制电路和包装的总体布…

毕业设计:《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》

前言 《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》&#xff0c;这是我在本科阶段的毕业设计&#xff0c;通过引入 Prometheus 和 ELK 架构实现企业对指标与日志的全方位监控。并且基于云原生&#xff0c;使用容器化持续集成部署的开发方式&#xff0c;通过 Sprin…

如何通过wifi网络将串口数据发送到多个设备

摘要&#xff1a;当lora电台的速率无法满足高速传输时&#xff0c;可以考虑用“串口服务器”。本文介绍一下如何使用TP-LINK的TL-CPE300D实现一对多的数据发送。 当前也有使用lora电台的&#xff0c;但是lora电台支持的速率有限&#xff0c;可能最大支持到9600&#xff0c;甚至…

【VTKExamples::Rendering】第一期 TestAmbientSpheres(环境照明系数)

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TestAmbientShperes,介绍环境照明系数对Actor颜色的影响,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动…

部署 Sentinel 控制台:实现流量管理和监控

序言 Sentinel 是阿里巴巴开源的一款流量防护与监控平台&#xff0c;它可以帮助开发者有效地管理微服务的流量&#xff0c;实现流量控制、熔断降级、系统负载保护等功能。本文将介绍如何在项目中部署和配置 Sentinel 控制台&#xff0c;实现微服务的流量防护和监控。 一、Sen…

《Python机器学习 》书籍分享

文章目录 前言内容介绍作者简介书籍目录 前言 随着计算能力的快速增长&#xff0c;大量任务都可在台式机上完成&#xff1b;在这样的背景下&#xff0c;机器学习应运而生&#xff0c;成为当今炙手可热的话题。但初出茅庐的新手常对机器学习感到十分畏惧&#xff1b;为给这些新…

RabbitMQ 是如何做延迟消息的 ?——Java全栈知识(15)

RabbitMQ 是如何做延迟消息的 &#xff1f; 1、什么是死信&#xff1f; 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dead letter&#xff09;&#xff1a; 消费者使用 basic.reject 或 basic.nack 声明消费失败&#xff0c;并且消息的 reque…

推荐5个免费的国内平替版GPT

提起AI&#xff0c;大家第一个想到的就是GPT。 虽然它确实很厉害&#xff0c;但奈何于我们水土不服&#xff0c;使用门槛有些高。 不过随着GPT的爆火&#xff0c;现在AI智能工具已经遍布到各行各业了&#xff0c;随着时间的推移&#xff0c;国内的AI工具也已经“百花盛放”了…

如何添加、编辑、调整WordPress菜单

我们最近在使用WordPress建站建设公司网站。我们是使用的hostease的主机产品建设的WordPress网站。在建设网站使用遇到了一些WordPress菜单使用方面的问题。好在hostease提供了不少帮助。 下面把WordPress菜单使用心得分享一下。 本文将详细介绍WordPress菜单的各种功能&#x…

智能家居|基于SprinBoot+vue的智能家居系统(源码+数据库+文档)

智能家居目录 基于SprinBootvue的智能家居系统 一、前言 二、系统设计 三、系统功能设计 1管理员&#xff1a;个人中心管理功能的详细实现 2管理员&#xff1a;用户信息管理功能的详细实现 3管理员&#xff1a;家具管理功能的详细实现 4管理员&#xff1a;任务管理功能…

QT+串口调试助手+扩展版

前言&#xff1a;此文章是这篇文章的拓展 QT串口调试助手基本版-CSDN博客&#xff0c;如果需要独立完成串口调试助手直接看基本版文章即可&#xff0c;如果需要完成串口调试助手的其他功能&#xff0c;参考拓展版。 一、更新QT串口调试助手UI界面 1、ui串口设置界面 2、ui串口…

【win10 文件夹数量和看到不一致查看隐藏文件已经打开,Thumb文件作妖】

目录 任务介绍&#xff1a;重命名规则修改前修改后 实现思路VB代码实现BUG犯罪现场&#xff08;眼见不一定为实&#xff09;破案1&#xff1a;抓顶风作案的反贼&#xff01;&#xff01;&#xff01;破案2&#xff1a;破隐身抓刺客&#xff01;&#xff01;&#xff01;杀器&am…

[1726]java试飞任务规划管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java试飞任务规划管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

【LLM 论文】Least-to-Most Prompting 让 LLM 实现复杂推理

论文&#xff1a;Least-to-Most Prompting Enables Complex Reasoning in Large Language Models ⭐⭐⭐ Google Research, ICLR 2023 论文速读 Chain-of-Thought&#xff08;CoT&#xff09; prompting 的方法通过结合 few-show prompt 的思路&#xff0c;让 LLM 能够挑战更具…

我的Transformer专栏来啦

五一节前吹的牛&#xff0c;五一期间没完成&#xff0c;今天忙里偷闲&#xff0c;给完成了。 那就是初步拟定了一个《Transformer最后一公里》的写作大纲。 之前一直想写一系列Transformer架构的算法解析文章&#xff0c;但因为一直在忙&#xff08;虽然不知道在忙啥&#xf…

Linux0.11中MINIX 文件系统

阅读linux 的源码的时候对minix 文件系统有很多的疑惑&#xff0c;根据自己的认识将这些做一个总结。 MINIX 文件系统由六个部分组成&#xff0c;分别是引导块&#xff0c;超级块&#xff0c;i结点位图&#xff0c;逻辑块位图&#xff0c;i结点&#xff0c;数据块。 引导块&am…