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