【三維編輯】Seal-3D:基于NeRF的交互式像素級編輯

在這里插入圖片描述

文章目錄

  • 摘要
  • 一、引言
  • 二、方法
    • 2.1.基于nerf的編輯問題概述
    • 2.2.編輯指導生成
    • 2.3.即時預覽的兩階段學生訓練
  • 三、實驗
  • 四、代碼
  • 總結


項目主頁: https://windingwind.github.io/seal-3d/
代碼:https://github.com/windingwind/seal-3d/
論文: https://arxiv.org/pdf/2307.15131

摘要

隨著隱式神經表征(即NeRF)的流行,迫切需要編輯方法與隱式3D模型交互,如后處理重建場景和3D內容創建。之前的工作在編輯的靈活性、質量和速度方面都受到了限制,為了能夠直接響應編輯指令立即更新。提出的Seal-3D 它允許用戶以像素級和自由的方式使用各種NeRF類主干來編輯NeRF模型,并立即預覽編輯效果。為了實現這些效果,我們 提出的代理函數將編輯指令映射到NeRF模型的原始空間,以及采用 局部預訓練和全局微調的師生訓練策略,解決了這些挑戰。建立了一個NeRF編輯系統來展示各種編輯類型,可以以大約1秒的交互速度實現引人注目的編輯效果。


一、引言

得益于高重建精度和相對低的內存消耗,NeRF及其變體在許多3D應用中顯示出了巨大的潛力,如3D重建、新視圖合成和虛擬/增強現實。當前迫切需要人類友好的編輯工具來與這些3D模型交互。由于捕獲數據的噪聲和重建算法的局限性,從現實世界中重建的對象很可能包含偽影

之前的作品曾嘗試編輯由NeRF表示的3D場景,包括對象分割[19,41Edit NeRF]、對象去除[18 Nerf-in]、外觀編輯[Palettenerf 13,Nerf-editing25]、對象混合[Template nerf7]等,主要集中在粗粒度的對象級編輯上,其收斂速度不能滿足交互式編輯的要求。最近的一些方法[Neumesh 45,Nerf-editing 5]通過引入網格作為編輯代理,將NeRF的編輯轉換為網格編輯。這需要用戶操作一個額外的網格劃分工具,這限制了交互性和用戶友好性。

點云、紋理網格和occupancy volume等 顯式3D表示,存儲對象和場景的顯式幾何結構;隱式表示使用神經網絡來查詢3D場景的特征,包括幾何和顏色。現有的三維編輯方法,以基于網格的表示為例,可以通過替換與目標對象的表面面積和對象紋理對應的頂點來改變對象的幾何圖形。如果視覺效果和潛在表征之間沒有明確可解釋的對應關系,編輯隱式3D模型是間接的和具有挑戰性的。此外,很難在場景的局部區域找到隱式的網絡參數,這意味著網絡參數的適應可能會導致不希望發生的全局變化。這給細粒度編輯帶來了更多的挑戰。

本文提出了一種交互式像素級編輯的三維場景隱式神經表示方法和系統,Seal-3D(借用了軟件Adobe PhotoShop )。如圖1所示,編輯系統的密封工具包括四種編輯:1)邊界箱工具。它可以轉換和縮放邊界框內的東西,就像復制-粘貼操作一樣。2)刷子工具。它在選定的區域上油漆指定的顏色,并可以增加或減少表面高度,就像油漆刷或擦傷器一樣。3)固定工具。它允許用戶自由地移動一個控制點,并根據用戶的輸入影響其鄰居空間。4)使用顏色的工具。它會編輯對象表面的顏色

首先,為了建立顯式編輯指令與隱式網絡參數更新之間的對應關系,我們提出了將目標三維空間(由用戶從交互式GUI編輯指令決定)映射到原始三維場景空間的代理功能,以及師生精餾策略,利用代理功能從原始場景獲得的相應內容監督來更新參數。其次,為了實現局部編輯,即減輕局部編輯效應對非局部隱式表示下全局三維場景的影響,我們提出了一個兩階段的訓練過程:預訓練階段只更新編輯區域,同時凍結后續MLP解碼器以防止全局退化,微調階段更新嵌入網格和MLP解碼器的全局光度損失。通過這種設計,預訓練階段更新了局部編輯特性(預訓練可以非常快速地收斂,并且只在大約1秒內呈現局部編輯效果),而微調階段將局部編輯區域與未編輯空間的全局結構和未編輯空間的顏色混合起來,以實現視圖的一致性。

二、方法

交互式像素級編輯的Seal-3D,框架如圖2所示,它包括一個像素級的代理映射函數、一個師生訓練框架和一個在該框架下的學生NeRF網絡的兩階段訓練策略。我們的編輯工作流從 代理函數 開始,它根據用戶指定的編輯規則映射查詢點和射線方向。然后是一個NeRF-to-NeRF教師-學生蒸餾框架,其中一個具有編輯幾何和顏色映射規則的教師模型監督學生模型的訓練(3.2節)。交互式細粒度編輯的關鍵是對學生模型的兩階段訓練(3.3節)。額外的預訓練階段,對教師模型中編輯空間內的點、射線方向和推斷的GT進行采樣、計算和緩存;只有具有局部性的參數被更新,導致全局變化的參數被凍結。預訓練之后,全局訓練階段 finetune 學生模型。
在這里插入圖片描述

2.1.基于nerf的編輯問題概述

2.1.1 NeRF 基礎知識,請見我的博客:【三維重建】NeRF原理+代碼講解

2.1.2 基于nerf編輯的挑戰

三維場景由網絡參數隱式表示,缺乏可解釋性,難以操縱。在場景編輯方面,很難在顯式編輯指令和網絡參數的隱式更新之間找到一個映射。以前的工作試圖通過幾種受限的方法來解決這個問題:

NeRF-Editing和NeuMesh引入了一個網格支架作為幾何代理來輔助編輯,這將NeRF編輯任務簡化為網格修改。雖然符合現有的基于網格的編輯,但編輯過程需要提取一個額外的網格,這很麻煩。此外,編輯后的幾何圖形高度依賴于網格代理結構,使得在表示這些空間時很難編輯不容易或不能用網格表示的空間是隱式表示的一個關鍵特征。Liu等人[ Editing conditional radiance fields] 設計了額外的顏色和形狀損失來監督編輯。然而,它們的設計loss 僅發生在二維光度空間中,這限制了三維NeRF模型的編輯能力。

2.2.編輯指導生成

我們的設計將 NeRF編輯看作一個知識蒸餾的過程。給定一個預先訓練的NeRF網絡擬合一個特定的場景作為教師網絡,我們用預先訓練的權值初始化一個額外的NeRF網絡作為學生網絡。教師網絡 fθT 根據用戶輸入的編輯指令生成編輯指導,而學生網絡 fθS 通過從教師網絡輸出的編輯指導中提取編輯知識進行優化

首先,從交互式NeRF編輯器中讀取用戶編輯指令作為像素級信息。源空間S?R3 為原始NeRF模型的三維空間,目標空間T?R3 為編輯后的NeRF模型的三維空間。目標空間T通過Fm 扭曲到原始空間S:T→S。Fm 根據以下編輯規則對目標空間內的點及其相關方向進行變換:函數中,每個三維點和觀察方向的“偽”期望編輯效果cT,σT ,可以通過查詢教師NeRF模型 fθT 。過程可表示為:
在這里插入圖片描述
其中,xs、ds 表示源空間點的位置和方向,xt、dt 表示目標空間點的位置和方向。簡單起見,此過程可定義為教師模型的預測:Ft := fθT ? Fm:(xt,dt)→(cT,σT

推理結果cT,σT 模擬編輯后的場景,作為網絡優化階段由學生網絡提取信息的教師標簽。Fm 的映射規則可以根據任意的編輯目標進行設計(本文為4種類型的編輯)

  1. 邊界形狀工具(Bounding shape tool)

3D編輯軟件常見功能,包括 復制粘貼、旋轉和調整大小。用戶提供一個邊界形狀來指示要編輯的原始空間S,并旋轉、翻轉和縮放邊界框,以指示目標效果。然后,目標空間 T 和映射函數 Fm 由接口進行解析:

在這里插入圖片描述

其中R是旋轉,S是尺度,cs,ct 分別是S,T的中心.。該工具甚至支持跨場景對象轉移,這可以通過引入轉移對象的NeRF作為一個額外的教師網絡,負責目標區域內的部分教師推理過程。圖7是效果圖

  1. 刷子工具(Brushing tool)

類似于造型刷,提升或下降繪制的表面。用戶使用筆刷畫出草圖,通過將射線投影在刷過的像素上生成 S。筆刷標準值 n 和壓力值 p(·)∈[0,1] 由用戶定義,它決定了映射:
在這里插入圖片描述

  1. 錨工具(Anchor tool)

用戶定義一個控制點xc和一個平移向量t。xc 周圍的區域將被平移函數拉伸(·;xc、t)拉伸。那么這個映射是它的倒數:

在這里插入圖片描述
拉伸的顯式表達式(·;xc、t)請參考補充材料。

  1. 顏色工具(Color tool)

通過顏色空間映射(單一顏色或紋理)編輯顏色(空間映射相同)。我們直接在HSL空間中映射網絡輸出的顏色,這有助于提高顏色的一致性。該方法能夠在修改后的表面上保留陰影細節(例如陰影)。我們通過將原始表面顏色上的亮度(在HSL空間中)偏移量轉移到目標表面顏色來實現這一點。這個陰影保存策略的實現細節在補充中提出。

2.3.即時預覽的兩階段學生訓練

蒸餾訓練策略,直接應用等式累積的像素值 C ^ \hat{C} C^ D ^ \hat{D} D^之間的photometric 損失,教師模型為學生模型提供 編輯指導。該訓練過程收斂速度較慢(≈30s或更長)因而采用兩階段的訓練策略:第一階段的目標是立即收斂(在1秒內),這樣一個粗編輯結果就可以立即作為預覽呈現給用戶;第二階段進一步細化粗預覽以獲得最終的細化。

1. 即時預覽的局部預訓練。通常,編輯空間相對較小,對全局光度損失的訓練導致收斂慢。為實現編輯即時預覽,我們在全局訓練開始前采用了局部預訓練

1)均勻采樣目標空間內一組點 X?T 和單位球上的方向D,將其輸入教師推理過程Ft ,得到教師標簽cT、σT,并提前緩存;
2)通過局部預訓練損失對學生網絡進行訓練:

在這里插入圖片描述

其中,cS,σS是學生網絡預測的采樣點(x∈X)的顏色和密度,cT,σT 是緩存的教師標簽。預訓練只需1秒,學生網絡會顯示出與編輯說明一致的合理的顏色和形狀

然而,由于非局部隱式神經網絡,只對編輯區域的局部點進行訓練,可能會導致其他與編輯無關的全局區域的退化。我們觀察到,在混合隱式表示(如Intant NGP)中,局部信息主要存儲在位置嵌入網格中,而后續的MLP對全局信息進行解碼。因此,在這個階段,MLP解碼器的所有參數都被凍結,以防止全局退化。見實驗插圖12

在這里插入圖片描述
2. 全局微調

經過預訓練后,我們繼續微調 fθS,將粗預覽細化為完全收斂的結果。這個階段類似于標準的NeRF訓練,除了監督標簽是由教師推理過程而不是圖像像素生成的。

在這里插入圖片描述

其中R表示小批中采樣的射線集合。

值得一提的是,學生網絡能夠產生比它所學習的教師網絡質量更好的結果。這是因為教師推理過程中的映射操作可能會在偽GT中產生一些視圖不一致的artifacts。然而,在蒸餾過程中,由于加強視圖一致性穩健性的多視圖訓練,學生網絡可以自動消除這些偽影,如圖6所示。

在這里插入圖片描述

三、實驗

  1. 實驗設置

實驗采用 Instant-NGP作為編輯框架的NeRF骨干。設置λ1 = λ2 = 1,學習速率固定為0.05。在微調階段,我們設置了λ3 = λ4 = 1,初始學習率為0.01。

訓練數據選合成 NeRF Blender Dataset,以及真實世界捕獲的 Tanks 和
Temples [12] and DTU [10] 數據集。

  1. 效果

邊界形狀(圖4和6)效果:
在這里插入圖片描述
brushing 效果:
在這里插入圖片描述

錨點(圖5)和顏色(圖1)效果:
在這里插入圖片描述

與NueMesh的對比:
在這里插入圖片描述

四、代碼

渲染代碼:nerf/rendering.py line256 函數run_cuda,得到射線的顏色和深度:

xyzs, dirs, deltas = raymarching.march_rays(n_alive, n_step, rays_alive, rays_t, rays_o, rays_d, self.bound, self.density_bitfield, self.cascade, self.grid_size, nears, fars, 128, perturb if step == 0 else False, dt_gamma, max_steps)

raymarching.march_rays調用了raymarching/raymarching.py 中line297的類: _march_rays(Function)的forward




總結

提示:這里對文章進行總結:

例如:以上就是今天要講的內容,本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數據的函數和方法。

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

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

相關文章

創建一個Spring Boot項目

安裝所需軟件:首先確保你的計算機上已經安裝了Java JDK和Maven構建工具。你可以從官方網站下載并按照說明進行安裝。 創建一個新的Spring Boot項目:在命令行或終端中使用Maven命令創建一個新的Spring Boot項目。執行以下命令:mvn archetype:…

阿里云輕量應用服務器_2核4G4M_2核2G3M_性能測評

阿里云輕量應用服務器2核2G3M帶寬108元一年,系統盤為50GB高效云盤;輕量服務器2核4G4M帶寬,60GB高效云盤297.98元12個月。目前輕量應用服務器只有2核2G和2核4G有活動,阿里云百科分享阿里云輕量應用服務器入口: 目錄 阿…

【Qt高階】老Qt都不一定清楚的“QObject線程親和性”【2023.08.13】

老Qt都不一定清楚的“線程親和性” 與題目無關 感覺自己還挺2,有粉絲點了那個契約者會給up發個鼓勵的話,我還以為是人私信發的,都挨個感謝了,后來才意識到是系統自動發的😣😣😣。 自上上期視頻對…

Three.js陰影

目錄 Three.js入門 Three.js光源 Three.js陰影 Three.js紋理貼圖 使用燈光后,場景中就會產生陰影。物體的背面確實在黑暗中,這稱為核心陰影(core shadow)。我們缺少的是落下的陰影(drop shadow)&#…

【數據結構】——棧、隊列的相關習題

目錄 題型一(棧與隊列的基本概念)題型二(棧與隊列的綜合)題型三(循環隊列的判空與判滿)題型四(循環鏈表表示隊列)題型五(循環隊列的存儲)題型六(循…

一文揭秘餓了么跨端技術的演進、實踐與落地

跨端技術背景與演進歷程 跨端,究竟跨的是哪些端? 自 90 年的萬維網出現,而后的三十多年,我們依次經歷了 PC 時代、移動時代,以及現在的萬物互聯(的 IoT )時代,繁榮的背后&#xff…

【Apollo】Apollo-ros版本架構學習與源碼分析

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 這篇文章主要介紹Apollo-ros版本架構學習與源碼分析。 無專精則不能成,無涉獵則不能通。——梁啟超 歡迎來到我的博客,一起學習,共同進步。 喜歡的朋友可以關注一下&a…

微信小程序如何自定義分享卡片文案和圖片

微信小程序提供了onShareAppMessage方法,專門用來監聽用戶點擊頁面內轉發按鈕(button 組件 open-type"share")或右上角菜單“轉發”按鈕的行為,并自定義轉發內容。 > 注意:只有定義了此事件處理函數&…

Android studio 設置安卓手機

參考這個鏈接 ghttps://developer.android.com/studio/debug/dev-options 列出常用手機的設置,但是我的手機不在此列 Google Pixel Settings > About phone > Build number Samsung Galaxy S8 and later Settings > About phone > Software informa…

git: ‘lfs‘ is not a git command. see ‘git --help‘

在克隆hugging face里面的項目文件的時候,需要用到git lfs,本文介紹安裝git lfs方法 在Ubuntu下 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs在Windows下 到這個鏈…

解決GitHub的速度很慢的幾種方式

1. GitHub 鏡像訪問 這里提供兩個最常用的鏡像地址: https://hub.njuu.cf/search https://www.gitclone.com/gogs/search/clonesearch 也就是說上面的鏡像就是一個克隆版的 GitHub,你可以訪問上面的鏡像網站,網站的內容跟 GitHub 是完整同步…

期權定價模型系列【4】—期權組合的Delta-Gamma-Vega中性

期權組合的Delta-Gamma-Vega中性 期權組合構建時往往會進行delta中性對沖,在進行中性對沖后,期權組合的delta敞口為0,此時期權組合仍然存在gamma與vega敞口。因此研究期權組合的delta-gamma-vega敞口中性是有必要的。 本文旨在對delta-gamma-…

關于新手學習STM32開發應該如何入門?

對于新手來說,學習STM32開發可能會感到困惑,尤其是在拿到開發板后該如何入門。在這里有嵌入式學習路線,畢設,各種項目,需要留個6。以下是部分內容概述:硬件介紹:了解STM32開發板的基本硬件組成和…

Springboot 默認路徑說明

Spring Boot基本上是Spring框架的擴展,它消除了設置Spring應用程序所需的樣板配置,極大的方便了開發者,其默認識別路徑如下: Spring Boot 作為Spring默認將 /** 所有訪問映射到以下目錄: 1、classpath:/static 用于加…

【密碼學】穴居人密碼

穴居人密碼 文字記載中,有時會把來自古希臘文化之前的各種記錄作為密碼學的例子,但稱它們為密碼學一定太不嚴格了,這是因為那些方法都太原始了。密碼學的起源能追溯到多早,取決于你把密碼學的相關定義確定得有多寬泛。大多數作者都…

每日后端面試5題 第四天

1. 線程池的核心參數(高薪常問) (1)corePoolSize:核心線程個數 (2)maximumPoolSize:最大線程個數 (3)keepAliveTime:最大存活時間 &#xff0…

如何在Vue中進行單元測試?什么是Vue的模塊化開發?

1、如何在Vue中進行單元測試? 在Vue中進行單元測試可以提高代碼的可維護性和可讀性,同時也能夠幫助開發者更快地找到代碼中的問題和潛在的錯誤。下面是一些在Vue中進行單元測試的步驟: 安裝單元測試工具 首先需要安裝一個單元測試工具&…

第8章 【C語言】善于利用指針

8.1 指針是什么 由于通過地址能找到所需的變量單元,可以說,地址指向該變量單元。將地址形象化稱為“指針”。 直接按變量名進行的訪問,稱為“直接訪問”方式。 還可以采用另一種稱為“間接訪問”的方式,即將變量i的地址存放在另…

如何讓你的圖片服務也有類似OSS的圖片處理功能

原文鏈接 前言 有自己機房的公司一般都有一套存儲系統用于存儲公司的圖片、視頻、音頻、文件等數據,常見的存儲系統有以NAS、FASTDFS為代表的傳統文件存儲,和以Minio為代表的對象存儲系統,隨著云服務的興起很多公司逐漸將數據遷移到以阿里云…

二叉樹的性質和完全二叉樹的性質

二叉樹的性質: 在二叉樹的第i層至多有 2 i 1 ( i > 1 ) 2^{i1}(i>1) 2i1(i>1) 深度為k的二叉樹最多有 2 k ? 1 2^k-1 2k?1個結點 對于任意一棵二叉樹T,如果其終端結點數為 n 0 n_0 n0?,度為2的結點數為 n 2 n_2 n2?,則 n 0 …