無所不能!無痛擁有自己的3DGS自動駕駛仿真器
本文經(jīng)自動駕駛之心公眾號授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
背景
無疑,NERF和3DGS等神經(jīng)渲染相關(guān)技術(shù)是自動駕駛仿真領(lǐng)域討論最火熱的前沿技術(shù)。NERF和3DGS使用神經(jīng)網(wǎng)絡(luò)表達(dá)空間,其在新視角合成方面的優(yōu)越表現(xiàn)直擊自動駕駛仿真的一大痛點:傳感器仿真。如果這一類深度學(xué)習(xí)技術(shù)能夠推廣應(yīng)用,就能夠很大程度上解決傳統(tǒng)計算機圖形學(xué)渲染出的圖像缺乏真實性的問題,可以廣泛應(yīng)用在自動駕駛算法的閉環(huán)測試和訓(xùn)練中。
目前已經(jīng)有一些研究項目在圍繞NERF和3DGS技術(shù)打造全新的面向閉環(huán)測試的自動駕駛仿真框架,例如以NERF為核心的OASim【1】、NeuroNCAP【2】以及更早的UniSim(在此不再貼出UniSim的論文鏈接,【1】項目中有UniSim的非官方實現(xiàn),以及另一個非官方實現(xiàn)【3】)。目前筆者還沒有發(fā)現(xiàn)圍繞3DGS展開的相關(guān)工作。完全新開發(fā)一個仿真框架,使其具有現(xiàn)行場景仿真軟件類似的功能將會有巨大的工作量。因此另一個應(yīng)用場景合成新技術(shù)的思路是:將NERF和3DGS訓(xùn)練出的模型嵌入到現(xiàn)有場景仿真軟件的框架中去,在保證實時渲染的前提下,將NERF和3DGS的渲染結(jié)果作為背景,動態(tài)物體仍然使用原有的3D數(shù)字資產(chǎn),最終合成出新的真實程度更高的圖像,整體框架如圖1所示。
圖1
目前,一個匈牙利公司的仿真軟件產(chǎn)品aiSim已經(jīng)以此為賣點展開了宣傳:效果如圖2、圖3,在NeRF和3DGS生成靜態(tài)場景后,aiSim將基于外部渲染API進一步增加動態(tài)元素,不僅可以重建原始場景,也可以根據(jù)測試需求構(gòu)建不同的交通狀態(tài)。
圖2
那么,像圖2、圖3這種仿真效果,我們普通人是不是也能擁有呢;)本文就將通過筆者的一個小實驗告訴你,這是有可能的!本文實驗全程“無痛”:完全使用開源的學(xué)術(shù)研究,且無需程序編寫。
CARLA插件
在NERF和3DGS的研究興起之初,就已經(jīng)有相關(guān)的工程工作旨在將訓(xùn)練好的模型嵌入到現(xiàn)行游戲引擎的渲染框架中去,以作為一個方便編輯的數(shù)字資產(chǎn),在運行時達(dá)到實時渲染的效果。較早的工作例如【4】,只需要花幾十美元就可以在Unreal的市場中買到這個插件。后續(xù)工作包括元象科技的【5】,應(yīng)用于windows平臺的UE5之上,以及一個高校研究項目中的NERF插件【6】,應(yīng)用于windows平臺的UE4。
那么是否有一款合適的插件可以直接應(yīng)用于基于Unreal的開源場景仿真軟件CARLA呢?筆者通過比較,最終選擇了LumaAI的3DGS插件【7】,主要是因為從網(wǎng)站中我們可以下載到源碼,方便我們和CARLA一起執(zhí)行編譯。
由于LumaAI只支持UE 5.0.0以上版本,而最新CARLA發(fā)行版0.9.15仍然使用UE4,因此本次實驗只能選擇CARLA代碼庫中仍在開發(fā)中的UE5分支進行測試。具體選擇的分支是CARLA【8】和UE-CARLA【9】(請注意,筆者測試的是以上兩個倉庫中截至24年4月8日的版本)。
安裝編譯之前,需要從【7】中下載LumaAI的源碼包,例如名為LumaAI_2023_25_12_marketplace_5.0.zip的壓縮文件,解壓縮后將內(nèi)容復(fù)制到CARLA根目錄下的Unreal/CarlaUnreal/Plugins路徑下。
在這些開發(fā)分支中,官方教程中的編譯方法不再適用,但CARLA根目錄下的Setup.sh中記載了開發(fā)分支的編譯過程。筆者的實驗環(huán)境為ubuntu 22.04。編譯過程中會提示圖4中的內(nèi)容,點擊yes就好,讓插件和CARLA一起編譯。編譯成功后,CARLA的UE editor會啟動,你此時可以在Plugins列表中看到LumaAI,如圖5。LumaAI的插件可以將任何3DGS模型輸出的點云ply文件或者專門的luma文件導(dǎo)入UE editor,成為資產(chǎn)庫中的一類Blueprint Class,比如將我們都很熟悉的狐貍頭導(dǎo)入Town10(圖6)。
圖4圖5
圖6
(根目錄下的CMakeLists.txt中顯示,通過增加BUILD_PYTHON_API編譯選項,可以對pythonAPI進行編譯,成功后可以在pythonAPI目錄下產(chǎn)生carla.so文件以供引用。)
街景重建
原版的3DGS(過于著名不再貼出鏈接)就可以完成街景重建,但3DGS項目本身不處理動態(tài)場景,也不是為街景這種開放式環(huán)境設(shè)計的。學(xué)術(shù)界一直有針對自動駕駛場景3DGS的研究項目,目前開源的有PVG【10】GaussianPro【11】S3Gaussian【12】等。本文實驗中筆者選用的是有標(biāo)注框監(jiān)督派的代表,浙大的street gaussian方法,雖然原項目并未開源,但光輪科技已經(jīng)將他們的復(fù)現(xiàn)版street-gaussians-ns發(fā)布到了github上:【13】。
street-gaussians-ns的訓(xùn)練過程不再贅述。為了在Unreal中呈現(xiàn)更好的效果,可以選擇使用waymo的全部5路攝像頭數(shù)據(jù)進行訓(xùn)練。訓(xùn)練完成后,street-gaussians-ns還提供了方法可以將場景的點云ply文件提取出來。
接下來我們就可以打開CARLA的UE editor,使用LumaAI插件,將street-gaussians-ns導(dǎo)出的ply插入仿真環(huán)境看下效果了。
安裝了LumaAI插件的UE editor打開后,在左下角的content browser中,可以看到Import功能按鈕,點擊Import,可以在本地目錄下尋找ply文件,導(dǎo)入到content browser中,如圖7。導(dǎo)入成功后,點云就成為了資產(chǎn)庫中的一個Blueprint Class,如圖8,此時把Blueprint Class拖入場景,就可以在場景里對其進行編輯操作了。
圖7
圖8
在UE editor中編輯以及Unreal場景運行起來后的效果如圖9-13(圖13使用的是方法【11】訓(xùn)練的結(jié)果)。至此你就擁有了一個自己的3DGS自動駕駛仿真器,過程是不是完全“無痛”!
圖9
圖10
圖11圖12
圖13
理論上講,接下來只要我們能夠根據(jù)以上waymo場景做出簡單的CARLA地圖,再對插入的3DGS點云模型進行一點“微調(diào)”使其貼合地圖,就可以流暢地在上面安排3D數(shù)字資產(chǎn)運行動態(tài)場景了!操作過程如圖14。
圖14
未來
如果真的想要嚴(yán)肅考慮以這個思路做神經(jīng)渲染在自動駕駛仿真中的技術(shù)落地,筆者認(rèn)為還需要解決的問題有:
- 前景動態(tài)物體的渲染:
盡管已經(jīng)有研究項目在解決虛擬前景物體和真實合成背景間的融合問題了,如ChatSim【14】中的McLight方法,但筆者認(rèn)為真實度仍然不夠。我們是否也可以用NERF和3DGS訓(xùn)練出的模型來表示前景動態(tài)物體呢?在CARLA的框架下目前這一點比較難,因為LumaAI導(dǎo)入的點云Blueprint Class和Car等actor的Blueprint Class截然不同,應(yīng)用難度較大。不過我們也看到了一些研究項目如gaustudio【15】,可以對3DGS方法訓(xùn)練出的模型提取mesh、texture等素材,也許這樣我們就可以用CARLA原本的建立車輛模型的pipeline來建立一個“點云版”的車輛actor。再輔以另外一些解決少視角重建的研究如GaussianObject【16】,也許在CARLA中導(dǎo)入神經(jīng)渲染動態(tài)物體有一天也會成為可能。
- 地圖:
仿真場景離不開地圖,除手工搭建外,也許也可以用一些諸如MapTR(過于著名不再貼出鏈接)的方法解決。
- 更多傳感器:
截止到目前為止我們只討論了相機圖像的仿真,盡管自動駕駛進入了重視覺時代,但其他一些傳感器仍然是不可或缺的,我們?nèi)匀恍枰渌緩絹砟M這些傳感器。