【三維分割】LangSplat: 3D Language Gaussian Splatting(CVPR 2024 highlight)

論文:https://arxiv.org/pdf/2312.16084
代碼:https://github.com/minghanqin/LangSplat


文章目錄

  • 一、3D language field
  • 二、回顧 Language Fields的挑戰
  • 三、使用SAM學習層次結構語義
  • 四、Language Fields 的 3DGS
  • 五、開放詞匯查詢(Open-vocabulary Querying)
  • 六、實驗
  • 代碼實現


一、3D language field

??早期構建三維特征場的嘗試包括蒸餾特征場[20]和神經特征融合場[43]。他們通過跨多個視圖將LSeg [21]或DINO [4]特征提煉為一個NeRF,學習了3D一致特征。Shen等人[39]通過將clip征提取成NeRF,進一步提取特征場進行few-shot 語言引導的自動操作。[Panoptic lifting for 3d scene understanding with neural fields. CVPR 2023][In-place scene labelling and understanding with implicit scene representation. ICCV 2021]將語義信息嵌入到NeRF中,例如,Semantic NeRF [54]在NeRF中聯合編碼外觀和幾何語義,用于新的語義視圖合成。LERF [18] 是第一個將CLIP特性嵌入到NeRF中的公司,它利用強大的CLIP表示方式實現了開放詞匯表的3D查詢。DINO特性也被用于監督LERF,以提高其性能。Liu等人[Weakly supervised 3d open-vocabulary segmentation.NeurIPS 2023]還利用CLIP和DINO特征訓練NeRF模型用于3D開放詞匯分割。

??

二、回顧 Language Fields的挑戰

??輸入圖像 I ∈ R 3 × H × W I∈R^{3×H×W} IR3×H×W;取一組校準圖像{ I t ∣ t = 1 , 2 , . . . , T I_t|t=1,2,...,T It?t=1,2,...,T}作為輸入,用其訓練一個3D Language Fields Φ Φ Φ。大多數現有的方法使用CLIP編碼器 V V V 提取圖像特征,監督3D語言字段 Φ Φ Φ,利用CLIP對齊的文本圖像潛在空間,促進開放詞匯表查詢。然而, CLIP嵌入是由圖像對齊的,而不是由像素對齊的 。即 V ( I t ) ∈ R D V(I_t)∈R^D V(It?)RD是一個圖像級的特征,而我們需要一個像素對齊的語言嵌入 L t ∈ R D × H × W L_t∈R^{D×H×W} Lt?RD×H×W。同時,像素對齊的語言特征具有點模糊性 ,對象上的單個點有助于影響區域的多個語義層次(例如,貓耳朵上的一個點,同時指向貓的耳朵、貓頭和整個貓,應該被三種類型的文本查詢激活)

??為了解決問題,現有方法[18,24]從裁剪后的圖像patch中提取出CLIP特征的層次結構,即對坐標為 v = ( w , h ) v=(w,h) v=(w,h)的像素,在不同物理尺度下,以v為中心patch中獲得相應的CLIP特征,patch可以完全包含對象。多尺度patch方法有兩個局限性首先,patch特征是不精確的,因為它們經常包含額外的上下文對象信息,導致過度平滑的語言域,對象邊界模糊。為了緩解不穩定的問題,大多數方法[18,24]利用額外的像素對齊的DINO特性來監督網絡。但是,學習到的三維語言特征仍然不精確,如圖1所示。其次,推理需要在多個尺度上同時渲染,才能找到最優尺度。隨著尺度的數量可能高達30 [18],大大降低了推理速度。

??除了渲染目標,三維建模方法的選擇也很重要。大多數現有的方法[2,43]都使用NeRF來進行3D表示,它們在每個3D點上學習一個語言特征,然后將該語言特征渲染到圖像上,類似于彩色渲染。然而,基于NeRF的方法受到其耗時的渲染過程的限制;同時,在實際應用中,特別是在智能機器人等領域,對高效開放詞匯查詢的需求也很高。

三、使用SAM學習層次結構語義

在這里插入圖片描述

??SAM 可以準確地將一個像素與周圍屬于同一對象的像素進行分組,從而將圖像分割成多個邊界清晰的對象掩模。利用SAM,我們可以捕獲三維場景中對象的語義層次,為每個輸入圖像提供準確和多尺度的分割map。

??具體來說,使用32×32的規則網格進行point 提示,獲得三個不同語義級別 mask: M 0 s 、 M 0 p 、 M 0 w M_0^s、M_0^p、M_0^w M0s?M0p?M0w?,分別代表子部分、部分和整個物體。然后根據IoU評分、stability評分和mask之間的重疊率,去除集合的冗余mask。過濾后的mask 集合為: M s 、 M p 、 M w M^s、M^p、M^w MsMpMw,將場景劃分為語義上有意義的區域,用于提取區域CLIP特征。在數學上,所獲得的像素對齊的語言嵌入為( M l ( v ) M^l (v) Ml(v)表示在語義級別 l l l上,像素 v v v屬于的mask):

在這里插入圖片描述

??從3D語言場景中渲染的每個像素,現在都擁有一個與精確的語義上下文相一致的CLIP特性。這種對齊減少了模糊性,并提高了基于語言的查詢的準確性。我們可以學習一個準確的三維語言場,即使沒有常用的DINO正則化。我們基于SAMs的方法的另一個優點是預定義的 語義尺度。由于我們對“整體”、“部分”和“子部分”級別有不同的分割映射,因此我們可以在這些預定義的尺度上直接查詢三維語言字段。這就消除了跨多個絕對尺度進行密集搜索的需要,從而使查詢過程更加高效

四、Language Fields 的 3DGS

??在獲得了一組二維圖像{ L t l ∣ t = 1 , . . . , T L^l_t|t=1,...,T Ltl?t=1,...,T}上的語言嵌入后,我們可以通過建模三維點和二維像素之間的關系來學習三維語言場景。3DGS明確地將三維場景表示為各向異性三維高斯分布的集合,每個高斯 G ( x ) G (x) G(x) 由均值 μ ∈ R 3 μ∈R^3 μR3和協方差矩陣Σ參數化:

在這里插入圖片描述

其中 c i c_i ci?是第 i i i個高斯值的顏色,N表示tile中的高斯值, C ( v ) C(v) C(v)是像素v處的渲染顏色, α i = o i G i 2 D ( ? ) α_i = o_iG_i^{2D}(·) αi?=oi?Gi2D?(?) o i o_i oi?是第 i i i個高斯的不透明度, G i 2 D ( ? ) G_i^{2D}(·) Gi2D?(?)表示投影到二維上的第i個高斯的函數。

??本文提出了3D language GS,它用三個language embedding { f s , f p , f w f^s,f^p,f^w fs,fp,fw}來增強每個3DGS。這些嵌入來自于CLIP特征。增強的高斯函數被稱為三維語言高斯,采用基于tile的光柵化器來保持渲染效率:

在這里插入圖片描述

F l ( v ) F^l(v) Fl(v)表示語義級別 l l l在像素 v v v處渲染的語言嵌入。通過將語言信息直接合并到3DGS中,3DLanguage Fields 能夠響應基于語言的查詢。

?? 由于CLIP嵌入是高維特征,直接在CLIP潛在空間上學習 f l f^l fl顯著增加了內存和時間成本。與學習沒有球諧系數的RGB顏色相比,學習512維CLIP特征使存儲3D高斯數據的內存需求增加了35倍以上,很容易導致L1 cache內存耗盡。為了降低內存成本和提高效率,我們 引入了一種場景級別的 language autoencoder,將場景中的CLIP嵌入映射到一個較低維的潛在空間,從而減少了內存需求。CLIP模型使用4億對(圖像、文本)對進行訓練,它的d維潛在空間可能非常緊湊,因為它需要在這個空間中對齊任意的文本和圖像。然而,Language Fields Φ Φ Φ 是特定于場景的,可以利用場景先驗來壓縮CLIP特征。事實上,對于每個輸入圖像,我們將得到數百個被SAM mask,明顯小于CLIP訓練中使用的圖像數量。因此,一個場景中所有的mask都稀疏地分布在CLIP潛在空間中,允許我們使用一個場景特定的 Autoencoder進一步壓縮這些CLIP特征

??編碼器 E E E D D D維CLIP特征 L t l ( v ) ∈ R D L^l_t(v)∈R^D Ltl?(v)RD映射到 H t l ( v ) = E ( L t l ( v ) ) ∈ R D H_t^l(v) = E(L^l_t (v))∈R^D Htl?(v)=E(Ltl?(v))RD,其中d?D。解碼器 Ψ Ψ Ψ從壓縮表示重構原始CLIP嵌入。Autoencoder 在CLIP嵌入上重建目標為 ( d a e d_{ae} dae?表示距離函數,具體采用 l 1 l_1 l1?和余弦距離損失):

在這里插入圖片描述

??Language Gaussian 在特定場景的latent space 中學習 language embedding,而不是CLIP潛在空間,有 f l ∈ R d f^l∈R^d flRd。實驗取d = 3(模型效率和準確性的均衡)。與直接建模D維CLIP嵌入相比,我們的方法通過合并場景先驗顯著降低了內存成本。語言嵌入的優化目標:

在這里插入圖片描述
??推理遵循等式(4),將language embedding 從3D渲染到2D,并使用場景特定解碼器 Ψ Ψ Ψ恢復CLIP圖像嵌入 Ψ ( F t l ) ∈ R D × H × W Ψ(F_t^l)∈R^{D×H×W} Ψ(Ftl?)RD×H×W這允許使用CLIP文本編碼器進行開放詞匯表查詢

??

五、開放詞匯查詢(Open-vocabulary Querying)

??由于CLIP模型提供的圖像和文本之間的對齊空間,學到的3D language field 支持開放詞匯表3D查詢,包括開放詞匯表3D對象定位和開放詞匯表3D語義分割。許多現有的開放詞匯表三維語義分割方法[24]通常從一個類別列表中選擇類別,其中包括圖像中出現的類別。然而,獲得一個全面的野外場景類別列表是具有挑戰性的。與它們不同的是,我們的方法在給定任意文本查詢時生成精確的對象mask。

??按照LERF計算language embeddinig ? i m g ?_{img} ?img? 與每個文本查詢 ? q r y ?_{qry} ?qry?的相關性得分(其中, ? c a n o n i ?^i_{canon} ?canoni?是從“object”, “things”, “stuff”,
和“texture”中選擇的預定義規范短語的CLIP嵌入):

在這里插入圖片描述
每個文本查詢可以得到三個相關性映射,表示在特定的語義級別上的結果。遵循在LERF 的策略,選擇產生最高相關性得分的語義level。對于三維對象定位任務,我們直接選擇相關性得分最高的點。對于三維語義分割任務,我們過濾出相關性分數低于所選閾值的點,并預測剩余區域的對象mask。

六、實驗

??數據集。LERF數據集[18]是使用iPhone的app多攝像頭捕獲的,由復雜的野外場景組成,為三維對象定位任務設計的, 這里我們通過注釋文本查詢的地面真相掩碼來擴展LERF數據集,允許在LERF數據集上評估開放詞匯表的三維語義分割。由于用于三維對象定位的原始LERF注釋相對簡單,因此在某些場景下的性能已經接近飽和。因此,我們進一步手動注釋了其他具有挑戰性的定位樣本,以更好地評估方法的性能。我們報告了在LERF [18]后的三維對象定位任務的定位精度,并報告了三維語義分割任務的IoU結果。 我們還使用了3DOVS數據集[24],包含了不同pose和背景下捕獲的長尾對象的集合。這個數據集是為開放詞匯表三維語義分割開發的,其中提供了完整的類別列表。 其他方法使用完整的列表來生成預測的掩碼,而我們只使用查詢類別來生成相應的掩碼。mIoU度量用于這個數據集

??實驗細節。圖像語言特征提取,使用OpenCLIP ViT-B/16模型;SAM使用ViT-H模型來分割二維mask;每個場景先使用3DGS來訓練一個RGB,訓練3萬次迭代,每個場景都包含大約250萬個點;然后固定三維高斯的所有其他參數,如均值和不透明度來訓練我們的三維language gaussian。在這個階段,只有語言特征是可學習的。語言特性訓練3萬次迭代,Autoencoder由一個MLP實現512維的CLIP特征壓縮;1440×1080分辨率的場景,模型在NVIDIA RTX-3090 GPU上進行了25分鐘訓練,大約需要4GB的內存。

??LERF數據集上算法對比。表1:算法達到84.3%的總體準確率,優于LERF;表2顯示了三維語義分割的IoU結果,比LERF好14.0%

在這里插入圖片描述

??可視化分析圖1按照[20]PCA成分分析,可視化了學習到的三維language field。可以看到,LERF學習到的特征不能生成物體之間的清晰的邊界,而我們的方法僅使用CLIP特征給出精確的物體形狀。圖3和圖4中展示了對象定位和語義分割的可視化結果。我們觀察到,LERF產生的激活區域更分散,而我們的激活區域更集中,與LERF產生的激活區域相比,我們的激活區域可以更好地符合真實形狀

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

??

??

??消融實驗

在這里插入圖片描述

代碼實現

  1. 安裝環境
# 1.克隆項目到本地
git clone https://github.com/minghanqin/LangSplat.git --recursive# 2.安裝依賴包
conda env create --file environment.yml
conda activate langsplat# 3.安裝 sam
pip install git+https://github.com/facebookresearch/segment-anything.git
# 4.克隆并安裝 segment-anything-langsplat
git clone https://github.com/minghanqin/segment-anything-langsplat.git
cd segment-anything-langsplat
pip install .
  1. 準備數據(數據應為以下格式)
<dataset_name>
|---images
|   |---<image 0>
|   |---<image 1>
|   |---...
|---input
|   |---<image 0>
|   |---<image 1>
|   |---...
|---output
|   |---<dataset_name>
|   |   |---point_cloud/iteration_30000/point_cloud.ply
|   |   |---cameras.json
|   |   |---cfg_args
|   |   |---chkpnt30000.pth
|   |   |---input.ply
|---sparse|---0|---cameras.bin|---images.bin|---points3D.bin
  1. 開始訓練(分為5步執行,可直接執行process.sh)
# 1: 生成場景的 Language Feature。圖片需要放在 <dataset_name>中的"input" 文件夾
python preprocess.py --dataset_path  data/lego(這是我自己的路徑) # 2.訓練 Autoencoder,得到低維的 3-dims Language Feature
cd autoencoder
python train.py --dataset_path /home/xzz/LangSplat/data/lego(這是我自己的路徑) --dataset_name lego --encoder_dims 256 128 64 32 3 --decoder_dims 16 32 64 128 256 256 512 --lr 0.0007python test.py --dataset_name $dataset_path --output
# 3.最終訓練語言場for level in 1 2 3
dopython train.py -s $dataset_path -m output/${casename} --start_checkpoint $dataset_path/$casename/chkpnt30000.pth --feature_level ${level}# e.g. python train.py -s data/sofa -m output/sofa --start_checkpoint data/sofa/sofa/chkpnt30000.pth --feature_level 3
done# 4.對不同level分割結果的渲染
for level in 1 2 3
do# render rgbpython render.py -m output/${casename}_${level}# render language featurespython render.py -m output/${casename}_${level} --include_feature# e.g. python render.py -m output/sofa_3 --include_feature
done

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71006.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71006.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71006.shtml

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

相關文章

haclon固定相機位標定

什么是標定&#xff1f; 工業應用中相機拍到一個mark點的坐標為C1&#xff08;Cx,Cy&#xff09;&#xff0c;C1點對應的龍門架/機械手等執行端對應的坐標是多少&#xff1f; 標定就是解決這個問題&#xff0c;如相機拍到一個點坐標C1&#xff08;Cx,Cy&#xff09;&#xff0c…

# 代碼寫作風格:優雅編程的藝術

在編程的世界里&#xff0c;代碼不僅僅是實現功能的工具&#xff0c;更是一種表達思想和藝術的方式。良好的代碼寫作風格不僅能夠提高代碼的可讀性和可維護性&#xff0c;還能讓其他開發者更容易理解和協作。本文將探討代碼寫作風格的重要性以及如何培養優雅的編程風格。 ## 一…

【通俗講解電子電路】——從零開始理解生活中的電路(二)

電路分析&#xff1a;看懂簡單的“電路圖” ——從“路線圖”到“工具箱”&#xff0c;掌握電路的底層邏輯 1. 歐姆定律&#xff1a;電的“交通規則” 公式解析&#xff1a;V I R 電壓&#xff08;V&#xff09;&#xff1a;推動電流的動力&#xff08;如電池電壓&#xff…

Linux 第三次腳本作業

源碼編譯安裝httpd 2.4&#xff0c;提供系統服務管理腳本并測試&#xff08;建議兩種方法實現&#xff09; 一、第一種方法 1、把 httpd-2.4.63.tar.gz 這個安裝包上傳到你的試驗機上 2、 安裝編譯工具 (俺之前已經裝好了&#xff09; 3、解壓httpd包 4、解壓后的httpd包的文…

IDEA-插件開發踩坑記錄-第六坑-UAST依賴問題

背景 簡要說明&#xff1a; UAST – Unified Abstract Syntax Tree UAST (Unified Abstract Syntax Tree) is an abstraction layer on the PSI of different programming languages targeting the JVM (Java Virtual Machine). It provides a unified API for working with co…

小米火龍CPU和其他幾代溫度太高的CPU是由誰代工的

小米火龍CPU”并非小米自研芯片&#xff0c;而是指搭載在小米手機上的部分高通驍龍處理器因發熱問題被調侃為“火龍”。以下是幾款被稱為“火龍”的高通CPU及其代工情況&#xff1a; 驍龍810 驍龍810是高通歷史上最著名的“火龍”之一&#xff0c;采用臺積電20nm工藝代工。由于…

CSS3 圓角:實現與優化指南

CSS3 圓角&#xff1a;實現與優化指南 隨著網頁設計的發展&#xff0c;CSS3 圓角已經成為了現代網頁設計中不可或缺的元素之一。本文將詳細講解 CSS3 圓角的基本用法、實現方式以及優化技巧&#xff0c;幫助您在網頁設計中更好地運用這一功能。 一、CSS3 圓角基本用法 1.1 基…

windows服務器更新jar包腳本

【需求】Java每次發布新的版本都需要先kill掉原來的服務&#xff0c;然后再啟動新的包 有了這個腳本只需要把包替換掉&#xff0c;服務會自動kill 以6001 為例 完整的腳本如下 echo off REM 檢查端口 6001 是否被占用 netstat -ano | findstr :6001 > nul IF %ERRORLE…

視頻推拉流EasyDSS點播平臺云端錄像播放異常問題的排查與解決

EasyDSS視頻直播點播平臺是一個功能全面的系統&#xff0c;提供視頻轉碼、點播、直播、視頻推拉流以及H.265視頻播放等一站式服務。該平臺與RTMP高清攝像頭配合使用&#xff0c;能夠接收無人機設備的實時視頻流&#xff0c;實現無人機視頻推流直播和巡檢等多種應用。 最近&…

SpringBoot新聞推薦系統設計與實現

隨著信息時代的快速發展&#xff0c;新聞推薦系統成為用戶獲取個性化內容的重要工具。本文將介紹一個幽絡源的基于SpringBoot開發的新聞推薦系統&#xff0c;該系統功能全面&#xff0c;操作簡便&#xff0c;能夠滿足管理員和用戶的多種需求。 管理員模塊 管理員模塊為系統管…

【系統穩定性】1.11 QVM穩定性問題分析(一)

目錄 寫在前面 一,qvm進程異常 1.1 進程崩潰(Coredump) 1.2 進程卡死 1.3 進程重啟 二,qvm進程異常分析過程 寫在前面 在QVM(Quantum Virtual Machine)作為HOST QNX的Guest,同樣會遇到重啟、Watchdog(看門狗)等穩定性問題。 這里我們把qvm的異常歸類為兩類問題…

一次現網問題定位-線程池設置不當,導致流量上去后接口變慢

背景 公司大促活動流量上升&#xff0c;突然一線用戶反饋發消息特別慢&#xff0c;運維已經初步通過監控發現B服務接口大量超時&#xff0c;調用鏈如下圖。 發消息接口以前只經過A服務&#xff0c;后面為了防止客服罵人&#xff08;我們是客服系統&#xff09;&#xff0c;接…

【JavaWeb13】了解ES6的核心特性,對于提高JavaScript編程效率有哪些潛在影響?

文章目錄 &#x1f30d;一. ES6 新特性??1. ES6 基本介紹??2. 基本使用2.1 let 聲明變量2.2 const 聲明常量/只讀變量2.3 解構賦值2.4 模板字符串2.5 對象拓展運算符2.6 箭頭函數 &#x1f30d;二. Promise??1. 基本使用??2. 如何解決回調地獄問題2.1回調地獄問題2.2 使…

《幾何原本》命題I.2

《幾何原本》命題I.2 從一個給定的點可以引一條線段等于已知的線段。 設 A A A 為給定點&#xff0c; B C BC BC 為給定線段 連接 A B AB AB&#xff0c;作等邊 △ A B D \triangle ABD △ABD 以 B B B 為圓心&#xff0c; B C BC BC 為半徑作小圓 延長 D B DB DB 交小圓…

java數據結構_Map和Set_9.1

1. 搜索樹 1.1 概念 二叉搜索樹又稱二叉排序樹&#xff0c;它或者是一棵空樹&#xff0c;或者是具有以下性質的二叉樹&#xff1a; 若它的左子樹不為空&#xff0c;則左子樹上所有的結點都小于根結點的值若它的右子樹不為空&#xff0c;則右子樹上所有的結點都大于根結點的值…

Rust Async 并發編程:處理任意數量的 Future 與 Stream

1. Streams&#xff1a;異步數據流 1.1 Streams 與 Iterator 的異同 Rust 的 Iterator 是同步的&#xff0c;通過 next() 方法逐個獲取數據。而 Stream 是 async 版本的 Iterator&#xff0c;它使用 next().await 來獲取數據項。 示例&#xff1a;將 Iterator 轉換為 Stream…

藍橋杯 路徑之謎

路徑之謎 題目描述 小明冒充 XX 星球的騎士&#xff0c;進入了一個奇怪的城堡。 城堡里邊什么都沒有&#xff0c;只有方形石頭鋪成的地面。 假設城堡地面是 nnnn 個方格。如下圖所示。 按習俗&#xff0c;騎士要從西北角走到東南角。可以橫向或縱向移動&#xff0c;但不能斜著走…

3-5 WPS JS宏 工作表的移動與復制學習筆記

************************************************************************************************************** 點擊進入 -我要自學網-國內領先的專業視頻教程學習網站 *******************************************************************************************…

聊聊Java的SPI機制

個人自建博客地址 什么是SPI呢&#xff1f; SPI全稱Service Provider Interface&#xff0c;翻譯過來就是服務提供者接口。調用方提供接口聲明&#xff0c;服務提供方對接口進行實現&#xff0c;提供服務的一種機制&#xff0c;服務提供方往往是第三方或者是外部擴展。 下面…

langchain4j+local-ai小試牛刀

序 本文主要研究一下如何本地運行local-ai并通過langchain4j集成調用。 步驟 curl安裝 curl https://localai.io/install.sh | sh% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed 100 21509 …