Grounding dino + segment anything + stable diffusion 实现图片编辑

目录

  • 总体介绍
    • 总体流程
  • 模块介绍
    • 目标检测: grounding dino
    • 目标分割:Segment Anything Model (SAM)
      • 整体思路
      • 模型结构:
      • 数据引擎
    • 图片绘制
  • 集成
    • 样例
  • 其他问题
  • 附录

总体介绍

总体流程

本方案用到了三个步骤,按顺序依次为:

  1. 基于语义的目标检测(使用grounding dino)
  2. 在检测到的范围内进行目标分割生成mask(使用segment anything)
  3. 图片绘制(使用stable diffusion)

模块介绍

目标检测: grounding dino

总体架构图
Grounding dino + segment anything + stable diffusion 实现图片编辑_第1张图片
从图中可以看出,本算法本质上是对图像和文本进行多模态融合,将二者映射到同一个向量空间并使用attention的思路进行匹配从而得到文本对应的图像。

模型中使用Swin Transformer作为image backbone,BERT作为text backbone,使用cross-transformer进行多模态融合。

从上面流程可以更深入地理解attention中qkv含义,即可以将attention视为一种软寻址。在网上看到过一个简单易懂的解释:

attention 机制里主要有三个向量 - key, query 和 value,其实可以将 Attention 机制看作一种软寻址(Soft Addressing):Source 可以看作一个中药铺子的储物箱,储物箱里的药品由地址 Key(药品名)和值 Value(药品)组成,当前有个 Key=Query(药方)的查询,目的是取出储物箱里对应的 Value 值(药品),即 Attention 数值。通过 Query 和储物箱内元素 Key 的地址进行相似性比较来寻址,之所以说是软寻址,指的是我们不只从储物箱里面找出一中药物,而是可能从每个 Key 地址都会取出内容,取出内容的重要性(量的多少)根据 Query 和 Key 的相似性来决定,之后对 Value 进行加权求和,这样就可以取出最终的 Value 值(一副中药),也即 Attention 值。所以不少研究人员将 Attention 机制看作软寻址的一种特例

目标分割:Segment Anything Model (SAM)

整体思路

模型的目的是构建一个用于图像分割的基础模型,即寻求开发一个可提示的(promptable)模型并将其进行预训练,预训练的数据集通过一个有强大泛化能力的任务来生成。使用这个模型就可以寻求解决在使用prompt工程生成的新数据分布上的一系列下游分割问题。
本计划能否成功主要和三个部分相关:任务(task)、模型(model)、数据(data)。为了研究这些部分,需要解决以下三个问题:

  1. 什么样的任务可以零样本泛化?

    定义一个可提示的分割任务,可以针对任何分割提示(prompt)返回有效的分割掩码。本任务有两个作用,一是作为预训练目标,二是通过prompt工程解决下游通用分割任务。

  2. 与之相应的模型架构是什么样的?

    模型必须支持灵活的prompt,且可以实时输出掩码(mask)。

  3. 什么样的数据能支持这项任务和模型?

    论文提出需要大规模多样化的数据集,为了得到这样的数据集,可以构造一个数据引擎,通过引擎可以半自动、全自动生成新数据完成模型迭代

模型结构:

Grounding dino + segment anything + stable diffusion 实现图片编辑_第2张图片

Grounding dino + segment anything + stable diffusion 实现图片编辑_第3张图片

数据引擎

互联网上目前没有适用于本任务数据量的数据集,所以必须构建一套引擎来生成数据。初始训练数据集SA-1B,总共包括1100万张图像和11亿个掩码。数据收集包含三个阶段。

  1. 人工辅助阶段。专业标注员使用浏览器上的交互式标记工具,并结合 SAM 进行手动标注。SAM 首先使用公共数据集进行训练。随着数据量的逐渐增加,SAM 图像编码器的尺寸也随之增大(ViT-B扩展为ViT-H)。在这一阶段结束时,收集了 430 万个掩码和 12 万张图像。

  2. 半自动阶段。为了增加掩码的多样性并改善模型的性能,研究人员首先预先填充了掩码,标注人员需要在此基础上补充其他未标注的对象。为了检测掩码的可信度,使用第一阶段得到掩码的数据训练一个边界检测模型,用来进行高置信度预测。在此阶段结束时,一张图像平均可以提供 72 个掩码。

  3. 全自动阶段。本阶段可以实现全自动标注。实现此步骤主要由于亮点:一,在前面两个阶段已经收集了足够的掩码;二,引入了可以在有歧义情况下也可以判断的歧义感知模型。在这一阶段结束时,最终的 SA-1B 数据集包含 1100 万张图像和 1.1B 个掩码。

图片绘制

stable diffusion(网上说这部分的文章众多,暂略)

集成

样例

(目前跑的样例均涉及到公司内部信息,暂略,后期有时间会补充脱敏版)

其他问题

grouding-dino检测到的目标是一个范围,如果此范围内有多个物体且互相之间不好区分,则会全部覆盖。
例:原图如下,src为dog,dst为tiger

原图:Grounding dino + segment anything + stable diffusion 实现图片编辑_第4张图片
生成的mask:
Grounding dino + segment anything + stable diffusion 实现图片编辑_第5张图片
结果图:
Grounding dino + segment anything + stable diffusion 实现图片编辑_第6张图片

附录

GroundingDINO开源项目地址
GroundingDino论文地址
segment anything论文地址
segment anything github
segment anything官方demo
SAM论文解读
Segment Anything(SAM)论文杂谈
SAM综述
sam数据集
SA-1B数据集
手把手教程
当前图片编辑基础代码

你可能感兴趣的:(算法,人工智能,目标检测,ai绘画,图像处理)