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

2024-05-11 03:36

本文主要是介绍浅析扩散模型与图像生成【应用篇】(二十三)——Imagic,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

23. Imagic: Text-Based Real Image Editing with Diffusion Models

  该文提出一种基于文本的真实图像编辑方法,能够根据纯文本提示,实现复杂的图像编辑任务,如改变一个或多个物体的位姿和组成,并且保持其他特征不变。相比于其他文本-图像编辑工作,Imagic具备更丰富的编辑方式,并且能够更好的保留编辑对象原有的特征。下面先展示一波结果,秀一下肌肉。可以看到编辑的效果非常逼真,而且是对图像中目标物体直接进行编辑,而不是重新生成一个新的对象。
在这里插入图片描述
  基于扩散模型的文本-图像编辑和生成的基础理论我这里就不再赘述了,不清楚的可以参考本博客该专栏下的其他文章。笼统点来讲,我们要把输入的文本描述转化为一个嵌入式向量,并将其作为一种条件信息引入到图像生成过程中,从而实现图像的编辑。本文提出的方法包含三个步骤:文本嵌入特征的优化,扩散模型的微调,以及特征插值与图像生成,如下图所示。
在这里插入图片描述
  首先,输入的文本描述经过一个文本编码器得到一个目标文本特征 e t g t e_{tgt} etgt,并使用一个预训练好的文本-图像生成模型 f θ f_{\theta} fθ对文本特征 e t g t e_{tgt} etgt进行优化,损失函数如下 L ( x , e , θ ) = E t , ϵ [ ∥ ϵ − f θ ( x t , t , e ) ∥ 2 2 ] \mathcal{L}(\mathbf{x},\mathbf{e},\theta)=\mathbb{E}_{t,\epsilon}\left[\left\|\boldsymbol{\epsilon}-f_{\theta}(\mathbf{x}_{t},t,\mathbf{e})\right\|_{2}^{2}\right] L(x,e,θ)=Et,ϵ[ϵfθ(xt,t,e)22]其中初始的 e \mathbf{e} e就是我们上文得到的 e t g t e_{tgt} etgt,在这个过程中生成模型 f θ f_{\theta} fθ的参数是固定不变的。随着训练的过程, e t g t e_{tgt} etgt被不断地更新,使其与输入图像 x x x的特征更加对齐,最终得到优化后的文本特征 e o p t e_{opt} eopt
  然后,我们再固定输入的文本特征 e o p t e_{opt} eopt不变,还是用上面的损失函数,对生成模型 f θ f_{\theta} fθ进行微调训练;同时如果还有其他的辅助模型,如提升分辨率的模型,也在这个过程中进行微调,只不过文本条件仍使用目标文本特征 e t g t e_{tgt} etgt,而不是优化过的 e o p t e_{opt} eopt。不要问为什么,问就是实验显示 e t g t e_{tgt} etgt效果更好。
  最后,我们使用一个线性插值函数来计算 e t g t e_{tgt} etgt e o p t e_{opt} eopt之间的插值,如下式 e ˉ = η ⋅ e t g t + ( 1 − η ) ⋅ e o p t \bar{\mathbf{e}}=\eta\cdot\mathbf{e}_{tgt}+(1-\eta)\cdot\mathbf{e}_{opt} eˉ=ηetgt+(1η)eopt η \eta η是可调的超参数,将插值得到的条件 e ˉ \bar{\mathbf{e}} eˉ输入到微调后的文本-图像生成模型中,即可得到对应的编辑结果。如下图所示,通过调整 η \eta η的大小,我们可以得到有原始图像到目标图像的渐进变化过程,作者表示 η \eta η取值为0.6-0.8时编辑的效果是最好的。
在这里插入图片描述
  作者与许多现有的图像编辑方法进行了比较,结果如下图所示
在这里插入图片描述

这篇关于浅析扩散模型与图像生成【应用篇】(二十三)——Imagic的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978396

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看