圖1:封面
生成三維模型可能很耗時,亦或需要大量參考圖像。解決這個問題的一種方法是借助神經輻射場(neural radiance field,簡稱“NeRF”),這是一種生成圖像的AI方法。NERF的主要思想是:先獲取一小組您拍攝的對象或場景的2D圖像,然后使用這些2D圖像來有效地構建3D表示。這是通過學習在已有圖像之間的轉換來實現(xiàn)的?,F(xiàn)在,這種跳躍(也稱作“插值”)技術能夠幫助您創(chuàng)建物體新視角下的圖像!
聽起來不錯,對嗎?借助于一小組圖像,你就可以制作一個3D模型!這比標準攝影測量效果要好,因為標準攝影測量需要一個巨大的圖像庫來生成一些圖片(你需要每個角度的鏡頭)。然則,NVIDIA公司一開始確實承諾說NeRFs速度很快;不過,直到近期情況還不是這樣。以前,NeRFs往往會花費很長時間來學習怎樣將一組圖像集轉換為3D模型。
但眼下,情況不再如此。近期,NVIDIA公司開發(fā)出了一種即時NeRF軟件,該軟件能夠運用GPU硬件運行必要的復雜計算。這種方法將創(chuàng)建模型所需的時間從幾天減少到幾秒鐘!NVIDIA對instant-ngp軟件的可用性和速度提出了很多令人興奮的主張。而且,他們提供的結果和示例也給人留下深刻的印象:
圖2:NeRF圖像展示——NVIDIA擁有一個酷炫的機器人實驗室
我覺得很難不被這個演示打動——它看起來太棒了!于是,我想看看把它轉移到我自己的圖像上并生成我自己的NeRF模型有多么容易。所以,我決定自己安裝并使用一下這款軟件。在本文中,我將介紹我的試驗體驗,并詳細介紹我制作的模型!
主要任務劃分
那我們該怎么辦?大致階段性任務劃分如下:
首先,我們需要引用一些連續(xù)鏡頭。讓我們去錄制一些我們想要3D化的視頻!
然后,我們開始場景拍攝,并將拍攝的視頻轉換成多幅靜止圖像。
我們將上面獲取的連續(xù)圖像數(shù)據傳遞到instant-ngp。然后,訓練AI來理解我們生成的圖像之間的空間。這實際上與制作三維模型相同。
最后,我們想創(chuàng)建一個展示我們的創(chuàng)作成果的視頻!在NVIDIA開發(fā)的軟件中,我們將繪制一條路徑,讓攝像機帶我們參觀我們制作的模型,然后渲染視頻。
我不會深入討論這一切是怎樣運作的,但我會提供我發(fā)現(xiàn)有用的許多資源的鏈接。所以,接下來,我將致力于我制作的視頻,以及我在旅途中偶然發(fā)現(xiàn)的一些小知識。
開始我的試驗
NVIDIA公司的即時NeRF軟件并不容易安裝。雖說軟件的說明很清楚,但我覺得當涉及到個人需要的特定軟件版本時,說明中要求的部分所提供的回旋余地并不大。對我而言,使用CUDA 11.7或VS2022似乎是不可能的,但我認為正是切換回CUDA 11.6版本和VS2019才最終促進了安裝成功。其中,我遇到許多錯誤,比如“CUDA_ARCHITECTURES is empty for target”,等等。這是因為CUDA與Visual Studio配合并不友好所招致。故此,我真誠地推薦有興趣的讀者參考視頻以及Github上的倉庫資源,便于進一步幫助你順利地做好一切設置工作!
除此之外,這一過程算是進展順利。官方還提供了Python腳本,用于幫助指導將拍攝的視頻轉換為圖像,以及隨后將其轉換為模型和視頻的步驟。
試驗1:樂高小汽車
起初,我試圖在辦公室里把一輛小樂高汽車NeRF化。我覺得我的攝影技巧遠遠不夠,因為我根本無法創(chuàng)作出任何有意義的圖像。只是一個奇怪的3D污點而已。算了,還是讓我們看一看NVIDIA提供給我們的一個例子吧。請注意圖中攝像機的位置:
圖3:NVIDIA提供的挖掘機默認NeRF模型的“攝像頭”位置
一個能夠很好地進行訓練的準備設置之一就是在場景中放置如上圖所述的“攝像機”。這些攝像機是軟件認為你在拍攝視頻時所面對的角度。它應該是一個漂亮的圓圈。當然,我的第一輛樂高車根本不是這個樣子的,而是一個被壓扁的半圓。
試驗2:稍大點的樂高小汽車
為了從第一次試驗中學習,我找到了一張可以完全走動的桌子,并找到了一輛更大的樂高車。我試著確保我抓拍的時間也比以前長。最后,我從各個角度拍攝了1分鐘流暢的視頻。我訓練模型的時間總共不到30秒。在720p下渲染4小時后,下圖是我制作的視頻:
圖4:我的第二個NeRF模型——一部樂高技術車!
試驗3:植物
結果證明上面的試驗2更好一些了,至少在技術上可行。然則,還是存在一團奇怪的霧,當然這還不算是超級麻煩。在我的下一次試驗中,我也試著從更遠的背面拍攝(我假設霧是由AI對那里的東西感到“困惑”引起的)。我試圖更多地控制aabc_scale參數(shù)(該參數(shù)用于衡量場景有多大),然后對其進行幾分鐘的訓練。渲染最后,得到如下所示的視頻結果:
圖5:我用客廳桌子上的一棵植物做成的一個NeRF模型
好多了!令人印象深刻的是,它是怎樣將鉤針植物盆子、木頭上的凹槽以及樹葉的復雜性表現(xiàn)得如此精確的??纯磾z像機在樹葉上做的俯沖動作吧!
試驗4:
現(xiàn)在,我們的試驗效果愈來愈好了!然則,我想要一個室外的視頻。我在公寓外拍攝了不到2分鐘的視頻,并開始處理。這對于渲染/訓練而言尤其笨重。我在這里的猜測是,我的aabc_scale值相當高(8),故此渲染“光線”必須走得很遠(即,我想要渲染的東西數(shù)量更多)。于是,我不得不切換到480p,并將渲染FPS從30降低到10。事實表明,設置參數(shù)的選擇確實會影響渲染時間。經過8個小時的渲染,我完成了以下操作:
圖6:一個我在公寓外面使用的NeRF模型
不過,我認為第三次試驗仍然是我最喜歡的。我想我可以把第四次試驗做得更好一點。不過,當渲染時間變得很長時,很難遍歷各個版本并試驗不同的渲染和訓練設置?,F(xiàn)在甚至設置渲染的攝像機角度都很困難了,這招致我的程序變得極其緩慢。
不過,這真正是一個相當驚人的輸出,因為單單使用了一兩分鐘的視頻數(shù)據。最后,我終于有了一個詳細的逼真的三維模型!
利弊分析
我認為最令人印象深刻的是,在1-2分鐘的拍攝時間內,完全沒有受過攝影測量訓練的人(我)可以創(chuàng)建一個可行的3D模型。該過程的確需要一些技術訣竅,但一旦你把所有設備都安裝好了,也就很容易使用了。使用Python腳本將視頻轉換為圖像效果很好。一旦這些都做了,輸入到AI就會順利進行。
然則,盡管很難因這一方面而指責英偉達,但我覺得我還是應該提出來:這件事需要一個相當強大的GPU。我的筆記本電腦里有一個T500,這項任務簡直把它推到了絕對極限。訓練時間確實比宣傳的5秒鐘時間長得多,嘗試在1080p情況下渲染時會招致程序崩潰(我是選擇在135*74指標左右動態(tài)渲染的)?,F(xiàn)在,這仍然算是一個巨大的改進,因為以前的NeRF模型實驗花費了好幾天時間。
我不認為每個人都會有一個3090p設備用于這樣的項目,所以值得簡要說明一下。低性能配置的電腦使程序難以使用,特別是當我試圖讓攝像機“飛起來”便于更有利于設置渲染視頻時。盡管如此,這一過程的成果還是讓人印象深刻。
還有,我面臨的另一個問題是無法尋找渲染文件render.py(正如您可能猜測的那樣,它對于渲染視頻至關重要)。非常奇怪的是,它不在官方提供的開源代碼倉庫中,盡管在大多數(shù)廣告文章和其他文件中都有大量提及。故此,我必須從鏈接處https://github.com/bycloudai/instant-ngp-Windows挖出這個寶貝。
最后,我也希望能夠把上面的3D模型轉換成.obj文件。也許現(xiàn)在,這已經成為可能的事了。
圖7:一只狐貍的gif動畫——這不是我做的,是英偉達做的。效果不錯,對不?
總結和下一步的想法
上面的實驗過程讓我一下聯(lián)想到OpenAI公司開發(fā)的DALL-E,這也是一種能夠產生圖像的AI技術?,F(xiàn)在,這種技術已經變得非常流行,部分原因在于它非常容易訪問。另外,DALL-E展示給人們一個非??岬睦樱f明AI模型可以做什么,以及它們的局限性。它眼下甚至已經成為了一種流行的文化現(xiàn)象(亦或至少在我的推特上就體現(xiàn)了許多特色內容)——人們制作自己各自奇怪的DALL-E圖片并相互分享。我可以想象這種技術也會發(fā)生類似這樣的事情:一個可以讓任何人上傳視頻并創(chuàng)建一個可以與朋友分享的3D模型的網站,其病毒傳播的潛力是巨大的。最終有人肯定會做到這一點!
就我個人而言,我期待著這方面更多的實驗成果。我希望能夠生成超逼真的模型,然后將它們轉儲到AR/VR中?;谶@些技術,你甚至可以主持網絡會議——那不是很有趣嗎?因為你僅需要借助手機上的攝像頭即可實現(xiàn)這一目標,而眼下大部分用戶手機中已經擁有了這種硬件配置。
總而言之,我印象深刻。能夠在手機上錄制1分鐘的視頻,并將其轉換為一個你可以逐步通過的模型,這真是太棒了。雖說渲染需要一段時間,而且安裝有點困難,但效果很好。經過幾次試驗,我已經得到了非常酷的輸出!我期待著更多的實驗!