图像编辑大一统?多功能图像编辑框架Dedit:可基于图像、文本和掩码进行图像编辑。

ops/2024/10/22 6:29:05/

今天给大家介绍一个基于图像和文本的编辑的框架D-Edit,它是第一个可以通过掩码编辑实现图像编辑的项目,近期已经在HuggingFace开放使用,并一度冲到了热门项目Top5。

使用 D-Edit 的编辑流程。用户首先上传一张分割成多个项目的图像。微调 DPM 后,用户可以进行各种类型的控制,包括

(a) 使用文本提示替换模型;

(b) 细化分割造成的不完美细节;

(c) 将包移到地面;

(d) 将手提包替换为参考图另一个手提包;

(e) 重塑手提包;

(f) 调整模型和手提包的大小;

(g) 去除背景。

相关链接

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

代码链接:https://github.com/collovlabs/d-edit

试用地址:https://huggingface.co/spaces/Collov-Labs/d-edit

论文介绍

基于文本到图像扩散模型 (DPM) 的成功,图像编辑是实现人类与 AI 生成内容交互的重要应用。在各种编辑方法中,提示空间内的编辑因其容量大和控制语义的简单性而受到更多关注。然而,由于扩散模型通常是在描述性文本标题上进行预训练的,直接编辑文本提示中的单词通常会导致完全不同的生成图像,违反了图像编辑的要求。另一方面,现有的编辑方法通常考虑引入空间掩码来保留未编辑区域的身份,而这些区域通常会被 DPM 忽略,因此导致不和谐的编辑结果。

针对这两个挑战,在这项工作中,我们建议将综合图像提示交互分解为几个项目提示交互,每个项目都链接到一个特殊的学习提示。由此产生的框架名为 D-Edit,基于预训练的扩散模型,交叉注意层已解开,并采用两步优化来构建项目提示关联。然后,可以通过操作相应的提示将多功能图像编辑应用于特定项目。我们展示了四种编辑操作的最新结果,包括基于图像、基于文本、基于掩码的编辑和项目删除,涵盖了大多数类型的编辑应用程序,所有这些都在一个统一的框架内。值得注意的是,D-Edit 是第一个可以 (1) 通过掩码编辑实现项目编辑和 (2) 结合基于图像和文本的编辑的框架。我们通过定性和定量评估展示了各种图像集合的编辑结果的质量和多功能性。

方法

传统全交叉注意和分组交叉注意的比较。查询、键和值显示为一维向量。对于分组交叉注意,每个项目(对应于某些像素/块)仅关注分配给它的 文本提示(两个标记)。

嵌入层在文本编码器。新令牌 插入随机初始化。

不同类型的图像所需的操作 编辑。每个彩色道具都有一个独特的提示符p。

实验

文本引导编辑。D-Edit允许选择 任何项目分割和编辑使用文本提示。

图像引导编辑的定性比较。在项目替换和面部交换方面,D-Edit 与 Anydoor、Paint-by-Example 和 TF-ICON 进行了比较。

图像引导编辑:图像中的任何项目都可以被来自相同或不同图像的另一个项目所替换

结论

这项工作提出了基于扩散模型的多功能图像编辑框架 D-Edit。D-Edit 将给定图像分割成多个项目,每个项目都分配有一个提示来控制其在提示空间中的表示。图像提示交叉注意力被解开为一组项目提示交互。通过调整扩散模型来建立项目提示关联,该模型学习使用给定的一组项目提示来重建原始图像。定性和定量评估展示了在收集的各种图像中编辑结果的质量和多功能性。


http://www.ppmy.cn/ops/127491.html

相关文章

Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析

目录 写在前面 1. 什么是 dynamic 类型? 示例 2. dynamic 与其他类型的转换 2.1 强制类型转换 示例 2.2 使用 is 操作符 示例 2.3 从 List 转换 示例 3. dynamic 类型的最佳实践 3.1 避免过度使用 dynamic 3.2 使用 Null Safety 示例 3.3 异常处理 示…

Linux LCD 驱动实验

LCD 是很常用的一个外设,在裸机篇中我们讲解了如何编写 LCD 裸机驱动,在 Linux 下LCD 的使用更加广泛,再搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。本章我们就来学习一下如何在 Linux 下驱动 LCD 屏幕。 Framebuffer 设备 先来…

go中阶乘实现时递归及迭代方式的比较

package mainimport ("fmt""time""math/big" )// 使用递归和 big.Int 计算阶乘 func FactorialRecursive(n *big.Int) *big.Int {if n.Cmp(big.NewInt(0)) 0 {return big.NewInt(1)}return new(big.Int).Mul(n, FactorialRecursive(new(big.Int…

C++基础与实用技巧第三课:内存管理与性能优化

第二章:C基础与实用技巧 第三课:内存管理与性能优化 1. 动态内存的管理策略与技巧 动态内存管理是C编程的核心部分之一,合理管理内存可以极大提高程序的性能和稳定性。在C中,动态内存的分配和释放通常使用new和delete运算符&am…

Python 网络爬虫教程

在大数据时代,获取数据是至关重要的一步。而网络爬虫是获取网络上公开数据的有效工具之一。本文将介绍如何使用 Python 来编写一个基本的网络爬虫,并通过具体的案例来展示如何抓取和处理网页数据。 1. 什么是网络爬虫? 网络爬虫是一种自动化…

区块链术语

区块链术语 从区块链技术衍生出的术语 从区块链技术衍生出的术语 1.区块链: 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的应用模式。是一个共享的分布式账本,其中的交易通过附加区块永久记录,记录一旦上链&#x…

iOS 大数相乘

首先说清楚2个概念: 概念1.一个M位数 与一个N位数 相乘,乘积的位数一定小于等于(NM). 如.2数99 乘以 4位数 9999, 其结果为 989901 ,为24 6位数. 上面的概念很重要,因为我们要创建一个初始值都为0, 元素个数为(MN) 的数组, 例如:99x918,我们需要创建23的元素的resultArray[0,…

【学习笔记】网络设备(华为交换机)基础知识 9 —— 堆叠配置

提示:学习华为交换机堆叠配置,含堆叠的概念、功能、角色、ID和优先级;堆叠的建立过程以及注意事项;包含堆叠的配置命令,以及堆叠的配置案例 一、前期准备 1.已经可以正常访问交换机的命令行接口 Console口本地访问教…