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.pswp.cn/news/42150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42150.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Tomcat 部署優化

Tomcat Tomcat 開放源代碼web應用服務器,是由java代碼開發的 tomcat就是處理動態請求和基于java代碼的頁面開發 可以在html當中寫入java代碼,tomcat可以解析html頁面當中的iava,執行動態請求 動態頁面機制有問題:不對tomcat進行優…

vue 使用indexDB 簡單完整邏輯

1 npm npm install idb 2 代碼 <template><div><p>Data: {{ data }}</p><button click"fetchData">Fetch Data</button></div> </template><script> import { openDB } from idb;export default {data() {…

eqtl-GWAS和GWAS-GWAS

目前教程中有eqtl-GWAS和GWAS-GWAS兩種模式&#xff0c;其他模式比較少見&#xff0c;還未進行開發 數據類型cc為分類變量即case/control&#xff0c;quant為連續變量&#xff0c;eqtl數據默認quant coloc.abf有兩個比較需要注意的點&#xff0c;就是數據集中N是代表樣本量&am…

解決Windows系統遠程登陸后vscdoe無法輸入字符,鍵盤沒有反應,鼠標可以點擊,沒有反應

文章目錄 前言操作過程 前言 使用vscode編譯器時&#xff0c;通過遠程登錄或者屏幕鎖屏解鎖后&#xff0c;vscode出現無法輸入字符內容&#xff0c;但vscode沒有死機&#xff0c;切換到其他軟件的窗口再切換回來后&#xff0c;可以使用鼠標點擊&#xff0c;但是只要使用鍵盤輸…

【壓測】wg/wrk 輕量級壓測

wg/wrk 輕量級壓測 說明&#xff1a;環境是 centos&#xff0c;不過現在 centos 免費版本不再更新和維護了&#xff0c;所以大家可以用阿里云的或者用 ubuntu 內核 用的 https://github.com/wg/wrk.git 有 35k star 然后據我了解&#xff0c;windows 用 wrk 壓測有點麻煩&…

[Docker精進篇] Docker鏡像構建和實踐 (三)

前言&#xff1a; Docker鏡像構建的作用是將應用程序及其依賴打包到一個可移植、自包含的鏡像中&#xff0c;以便在不同環境中快速、可靠地部署和運行應用程序。 文章目錄 Docker鏡像構建1??是什么&#xff1f;2??為什么&#xff1f;3??鏡像構建一、用現有容器構建新鏡像…

【IMX6ULL驅動開發學習】08.馬達驅動實戰:驅動編寫、手動注冊平臺設備和設備樹添加節點信息

目錄 一、使用設備樹 1.1 修改設備樹流程 二、手動創建平臺設備 三、總結&#xff08;附驅動程序&#xff09; 前情提要&#xff1a;???????【IMX6ULL驅動開發學習】07.驅動程序分離的思想之平臺總線設備驅動模型和設備樹_阿龍還在寫代碼的博客-CSDN博客 手動注冊…

Android中如何不編譯源生模塊

如果想讓自己的app 替換系統的app 比如使用閃電瀏覽器替換系統的Browser 首先把閃電瀏覽器放到 vendor/rockchip/common/apps Android.mk LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE : Lightning LOCAL_SRC_FILES : $(LOCAL_MODULE).apk LOCAL_MODULE_C…

英語詞法——冠詞

冠詞是一種虛詞,與名詞連用,放在名詞的前面,說明或限制該名詞所表示的人或物是泛指的還是特指的。冠詞是最主要、最典型的限定詞。冠詞可以分為不定冠詞a,an,定冠詞the和零冠詞(即不用任何冠詞的場合)三種。 第一節 定冠詞 定冠詞the用于各類名詞(單數可數名詞、復數可…

linux 命令- systemctl

systemctl 參數說明 1、使用語法 用法&#xff1a;systemctl [OPTIONS…] {COMMAND} … 2 、參數說明 參數參數說明start立刻啟動后面接的unitstop立刻關閉后面接的unitrestart立刻關閉后啟動后面接的unit&#xff0c;亦即執行stop再start的意思reload不關閉后面接的unit的…

Elasticsearch查詢之Disjunction Max Query

前言 Disjunction Max Query 又稱最佳 best_fields 匹配策略&#xff0c;用來優化當查詢關鍵詞出現在多個字段中&#xff0c;以單個字段的最大評分作為文檔的最終評分&#xff0c;從而使得匹配結果更加合理 寫入數據 如下的兩條例子數據&#xff1a; docId: 1 title: java …

基于 Redis 實現分布式限流

基于 Redis 實現分布式限流 一、 簡介二、分布式限流1 數據結構1.1 Redis List1.2 Redis Set1.3 Redis Sorted Set 2 實現分布式限流3 實現原理分析 三、分布式限流算法1. 計數器算法2. 漏斗算法3. 令牌桶算法 四、分布式限流實戰1. 單機限流實現2. 基于Redis Clusters的分布式…

常見程序搜索關鍵字轉碼

個別搜索類的網站因為用戶惡意搜索出現誤攔截情況&#xff0c;這類網站本身沒有非法信息&#xff0c;只是因為把搜索關鍵字顯示在網頁中&#xff08;如下圖&#xff09;&#xff0c;可以參考下面方法對輸出的關鍵字進行轉碼 DEDECMS程序 本文針對Dedecms程序進行搜索轉碼&…

優先級隊列【C++】

文章目錄 priority_queuepriority_queue 使用priority_queue的模擬實現向上調整算法向下調整算法pushpoptopsizeempty 仿函數完整代碼 priority_queue 優先隊列&#xff08;priority_queue&#xff09;也是隊列的一種&#xff0c;priority_queue的接口是和queue的接口是相同的…

快速上手Vue開發:在項目中如何配置 tsconfig.json 文件?

文章目錄 一、簡介二、配置1、示例2、編譯器選項列表 一、簡介 tsconfig.json文件中指定了用來編譯這個項目的根文件和編譯選項。 二、配置 1、示例 {"compilerOptions": {"baseUrl": ".","paths": {"/*": ["src/*&…

C#__基本特性和使用

// 特性&#xff08;attribute&#xff09;: // 一種允許我們向程序集添加元數據的語言結構 // 用于保存程序結構信息的某種特殊類型的類 // 類似“批注”&#xff0c;用于解釋說明 #define IsShowMessage // 宏定義&#xff0c;在開頭定義&#xff0…

uni-app彈窗列表滾動, 彈框下面的內容也跟隨滾動解決方案

滑動彈窗里的列表&#xff0c;彈框下面的內容也會跟著滑動&#xff0c;導致彈窗中的列表不能正常滾動 1.彈窗組件代碼&#xff0c;需要在最外層的view中加入touchmove.stop.prevent"moveHandle"&#xff0c;且彈窗中需要滾動的列表要使用scroll-view標簽包裹起來&…

Python爬蟲——requests_post請求

import requests import jsonurl https://fanyi.baidu.com/sugheaders {User-Agent: ,Cookie: }data {kw: hello }response requests.post(url, data, headersheaders)content response.textobj json.loads(content.encode(utf-8)) print(obj)總結&#xff1a; post請求…

五分鐘搭建生鮮蔬果小程序

如今&#xff0c;隨著移動互聯網的快速發展&#xff0c;小程序已經成為眾多企業和商家推廣產品和服務的重要工具。而生鮮蔬果行業作為一個常見的消費領域&#xff0c;也開始逐漸轉向小程序商城來進行銷售和服務。那么&#xff0c;如何從零開始搭建一個生鮮蔬果小程序商城呢&…

Hlang--用Python寫個解釋器

文章目錄 前言流程數學解釋器結果封裝數的操作運行時異常運行解釋實現總結前言 沒錯今天提前來做這個東西,昨天晚上干這個玩意差不多干了兩個多小時才搞定,導致凌晨2點才睡覺,最要命的是,寫著寫著突然想到有一道線代理解錯了,一個晚上,做夢全是這兩個東西。尤其是晚上效…