当前位置: 首页 > news >正文

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

目录

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

总体介绍

总体流程

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

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

模块介绍

目标检测: grounding dino

总体架构图
模型架构图
从图中可以看出,本算法本质上是对图像和文本进行多模态融合,将二者映射到同一个向量空间并使用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. 什么样的数据能支持这项任务和模型?

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

模型结构:

提示

模型结构

数据引擎

互联网上目前没有适用于本任务数据量的数据集,所以必须构建一套引擎来生成数据。初始训练数据集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

原图:原图
生成的mask:
在这里插入图片描述
结果图:
在这里插入图片描述

附录

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

http://www.lryc.cn/news/122029.html

相关文章:

  • 如何选择更快更稳定的存储服务器
  • 此芯科技加入 openKylin 开源社区
  • 开发一个RISC-V上的操作系统(七)—— 硬件定时器(Hardware Timer)
  • 电池的正极是带正电?
  • Go 协程为什么比进程和线程占用的系统资源低?
  • 性能测试—Jmeter工具
  • 【分布式系统】聊聊高性能设计
  • 自动驾驶数据集汇总
  • 面向对象的基本原则
  • C语言开发基础知识(一)
  • ​API网关类型与区别​
  • linux:nginx网站升级至http2
  • Flutter:屏幕适配
  • 中科亿海微ROM使用
  • Python接口自动化测试之UnitTest详解
  • python——案例17:判断某年是否是闰年
  • allure测试报告
  • Vue 路由懒加载
  • 软件设计师(七)面向对象技术
  • Qt中将信号封装在一个继承类中的方法
  • Docker介绍
  • C++红黑树
  • LangChain与大模型的学习ing
  • Go把Map转成对象
  • Java-网络编程
  • [数据集][目标检测]道路坑洼目标检测数据集VOC格式1510张2类别
  • 全网最详细,Pytest自动化测试框架-Fixture固件实战,你要的都有...
  • React 入门学习
  • VMware vCenter 6.5 断电后无法启动修复方案
  • c++ STL--算法,迭代器,容器适配器,仿函数