如何真實的模擬激光雷達

最近想通過模擬生成激光雷達數據,用來提供給無人車感知模塊訓練深度學習模型。主要原因是因為訓練深度學習模型需要大量標註好的數據,如果可以批量生成模擬數據來進行訓練模型,並且達到和真實數據一樣的效果,可以極大的節省標註成本和模型訓練效率。

數據生成方法

目前主要的方法分為3類:

  1. 基於真實數據生成。主要的思路是真實數據沒有辦法覆蓋一些天氣、光照變化,因此用GAN通過真實數據生成模擬數據,模擬出的數據會在真實場景上增加白天和夜晚的場景,以及下雨、下雪等情況。
  2. 基於模擬器生成。主要的思路是通過在遊戲引擎中建立模擬真實場景的模型,然後模擬激光雷達的物理特性,遊戲物理引擎發出射線檢測來獲取當前環境的距離信息,然後生成激光點雲。
  3. 基於結構化數據生成增強數據。這部分的方向比較多,有基於虛擬數據生成增強現實數據的方法,也有基於圖片生成三維點雲數據的方法。


生成數據只是第一步,實際上最重要的問題是如何判斷生成的數據是否滿足要求,是否能夠完全替代真實數據。

數據生成方法的評價標準

實際上如何評價數據生成的是否足夠好,以及方法是否能夠平滑遷移非常重要。

  1. 方法是否通用,功能是否可以平滑遷移。很簡單的例子,如果通過真實數據訓練好GAN模型,當遷移到另外一個城市的時候,之前訓練好的GAN模型生成的數據不太好,那麼就失去了數據生成的意義。因為花力氣訓練一個數據生成模型,然後再用生成的數據訓練模型,還不如直接去標註真實數據。
  2. 生成的數據是否足夠好。如何判斷生成的數據是否足夠好,這是個相對困難的問題,必須要有一套評價體系來證明生成的數據和真實數據的差異。

有大量的訓練任務。如果需要訓練的數據量比較小,就不需要花這麼大代價去生成數據了。


論文解讀

下面我們主要是分析"Augmented LiDAR Simulator for Autonomous Driving"這篇論文來介紹如何模擬激光雷達數據,方法比較有借鑑意義,具體的實現需要驗證。

首先,論文中提到目前標註真實數據的成本很高,如果可以通過生成數據並且提供標註好的ground truth,那麼可以極大的減少標註成本。並且不同於採用仿真器中通過3D模型來模擬生成激光點雲的方法,直接採用掃描並且仿真的方法,該方法不需要建立完善的3D模型,直接通過激光雷達掃描對應的街道,然後在街道中放入動態物體的模型,最後生成模擬好的點雲數據。

如何真實的模擬激光雷達

生成點雲的流程

下面我們主要介紹下該方法如何生成點雲。論文模擬生成點雲的方式分為3個步驟:

  • 掃描真實場景
  • 動態物體添加
  • 合成生成模擬點雲

下面我們詳細分析下這3個步驟。

1.掃描真實場景

先通過激光雷達掃描真實的街道,一般需要多次採集(5次),這樣能夠保證採集到的點雲足夠稠密。採集完點雲之後,需要把動態物體去掉,這裡採用了PointNet++模型來去掉動態物體(包括靜止的動態物體),然後把去掉的點雲根據周圍的環境填充。

如何真實的模擬激光雷達

採集點雲效果圖

2.動態物體添加

動態物體包括行人、車輛等,這裡通過統計學的方法,根據物體出現的常見程度出現的概率也不一樣,然後在靜態場景中添加動態物體,動態物體主要是一些模型,甚至包括三輪車、嬰兒車等。

如何真實的模擬激光雷達

動態模型

這裡還提到了模型的姿態對結果的影響也很大,隨機放置模型的效果和採用增強概率圖方式的效果差距還是很大,下面是動態物體放置方法差異的結果圖。

如何真實的模擬激光雷達

模型放置方法效果對比

3.合成生成模擬點雲

通過上面2個步驟,我們得到了真實環境的點雲地圖,同時還得到了動態物體模型和出現的概率模型。那麼如何根據這些生成點雲呢?

這裡的思路是通過之前掃描好的點雲通過"surface splatting"方法進行渲染,動態物體模型通過傳統方法渲染,渲染到一個立方體上。

如何真實的模擬激光雷達

點雲和動態物體渲染到立方體

因為論文中沒有詳細介紹這一步的流程,所以這裡我簡單說下自己的想法,先把之前掃描得到的點雲通過"surface splatting"方法通過點雲建立好平面,然後通過平面投影到立方體上生成深度信息。動態物體模型因為可以直接獲取點和Mesh,因此可以直接渲染,之後就得到了類似全景的深度圖信息。最後再根據激光雷達的位置和當前的深度圖相交,得到距離信息。實際上這裡會建立3種立體圖:深度圖、普通圖、材質圖。

這裡對雷達的建模也比仿真器中考慮的要素要多,通過如下的公式建模。

如何真實的模擬激光雷達

其中Eemit代表激光雷達的能量強度,Rrel代表物體表面的反射率,Ria表示激光照射角度對反射的影響比例,Ratm表示空氣對激光的衰減。

同時激光雷達建模還考慮到了角度噪音和距離測量噪音,實際上激光雷達的光束會有角度偏差噪音,並且測量距離也有一定的噪音,論文中對距離增加了0.5cm的噪音,對激光角度增加了0.05度的噪音。得到激光雷達噪音的方法也很簡單,把激光雷達固定在一個位置一段時間,然後採集數據,最後通過統計這些數據的誤差,得到上述角度噪音和距離測量噪音。


數據評判

得到了數據之後,論文采用瞭如下的方法還評判生成數據的效果。採用KITTI數據集的數據作為標準數據(KITTI是採集的真實數據集),然後把這部分數據分為2部分,一部分做為訓練集,一部分作為驗證集。

  1. 通過CARLA仿真器生成的數據訓練模型,然後拿KITTI的驗證數據集進行驗證。
  2. 通過論文中的方法生成數據然後訓練模型,拿KITTI的驗證數據集進行驗證。
  3. 通過KITTI的訓練集訓練模型,拿KITTI的驗證數據集驗證。
  4. 通過CARLA仿真器生成的數據和KITTI的數據混合訓練,拿KITTI的驗證數據集驗證。
  5. 通過論文中的方法生成數據和KITTI的數據混合訓練,拿KITTI的驗證數據集驗證。

下圖是上述方式訓練的效果。

如何真實的模擬激光雷達

不同數據訓練效果

可以看到單純通過仿真器訓練出的數據效果比較差,很多數據只有真實數據一半的效果,最差的效果不到1/4。通過論文中的方法效果基本和真實數據相當,通過混合的效果超過了在真實數據集上的效果。

那麼既然混合訓練的效果最好,那麼真實數據和模擬數據的佔比是多少呢?下面給出了數據佔比的效果圖。

如何真實的模擬激光雷達

通過上述的數據可以看出,只需要100k的模擬數據,16K的真實數據基本就達到了真實100k數據的精度,可以節省84%的真實數據標註。


最後我們總結下上述方法,上述方法只需要對需要仿真的場景進行點雲採集,然後通過框架生成對應的點雲數據,可以平滑遷移。另外檢測真實數據上,論文中也測試了在新的場景中使用得到了比較好的效果,看起來是可行的。

對上述的方法也存在一些疑問,通過點雲生成深度圖的方式是否可以重複利用,是不是每次都要重新生成深度圖,還是類似遊戲模型,生成一次之後後面一直可以使用。另外論文生成深度圖的方法和遊戲中生成的模型的方式其實比較類似,只是對激光雷達的建模比較準確,並且增加了噪音,實際上的原理非常相似。


分享到:


相關文章: