---
# System prepended metadata

title: '[ChipNet: Real-Time LiDAR Processing for Drivable Region Segmentation on an FPGA](https://arxiv.org/pdf/1808.03506.pdf)'

---

# [ChipNet: Real-Time LiDAR Processing for Drivable Region Segmentation on an FPGA](https://arxiv.org/pdf/1808.03506.pdf)
## [Github](https://github.com/hashi0203/ChipNet-LiDAR-Segmentation)
## Algorithm Design
### A. LiDAR data preparation
KITTI使用的是64線的光達。通常，database裡面會包含x、y、z座標，以及物體反射強度r，如圖一(a)。從點雲投影至相機視角，如圖一(b)，或是原始光達視角，如圖一(c\)，在空間分佈的密度都不同。因此需要針對光達所掃出來的點進行重新修改座標、採樣。
![](https://i.imgur.com/pxGpvXf.png)
> 反射強度 -> 會受物體、角度等影響

如表一所示，並沒有統一的點雲座標與視角形式。又由於，大量的LiDAR點，容易散佈在ROI。因此，非ROI區域，稀疏性是較高的。需要耗費大量運算資源來處理”0”。
> 座標 -> sampling view
> 視角 -> space subdivision
> ROI -> Region of interesting

![](https://i.imgur.com/q9kxKfX.png)
因此，本文使用球座標系。在角方位\[-45º, 45º)為ROI區域，並將64線分別進行切割。在每一行上，每0.5º進行切割。因此，ROI的所有點，會散佈在180*64的網格當中。會使用0.5º，是因為他為角分辨率的3倍，因此每個網格中，會存在至少兩個點。然而實際上，可能會受強度影響，造成空洞現象。根據採樣，會存留14個特徵點，分別為7個較近的掃描點，與7個較遠的掃描點。這7個又可分為笛卡爾坐標x、y、z、球坐標θ、φ、ρ和激光反射強度r。

如表一所示，球座標系具有較高的ROI點雲使用率，稀疏度也較為密集。
### B. ChipNet: a hardware friendly and extendable CNN architecture
#### 1) ChipNet convolutional block:
![](https://i.imgur.com/knQTF6m.png)
ChipNet的block如圖四所示，它包括三個分支。第一個分支使用殘差方式，將Input直接連接至output，減少梯度消失及爆炸。第二個分支使用一般的3*3卷積。第三個分支為一個3*3的擴張卷積，用於處理更多資料，但是減少參數及運算量。使用此block，能夠有更穩定的梯度及更少的參數。ChipNet的block僅有73856個參數、8.02億次乘法。傳統的5x5卷積，需要102464個參數，11.8億次乘法。ChipNet的block減少28%的參數量、32%的乘法量。

#### 2) ChipNet network architecture:
![](https://i.imgur.com/fKKTjJL.png)
架構如表二所示，ConvEncoder會將張量從14提升至64。隨後經過10次的ChipNetBlock。最後輸出透過channel-wise mapping將輸出改為180*64*1。
#### 3) Simulated quantization:
使用Fixed point在FPGA領域中，優於浮點數。他能夠減少硬體資源、內存、Clock。

然而，並不能直接將float轉成fixed point，這可能會丟失一些訊息。因此，本文提出一種量化的方式，來訓練神經網路。
##### Simulated quantization of weights and variables:
在[[21]](https://arxiv.org/pdf/1712.05877.pdf)的reference中，在反向傳播的權重與梯度會被存成float，正向傳播會將數值量化成fixed point。優點是權重和梯度在連續空間中更新，因此可以避免由於量化引起的局部最優。缺點為在tensorflow中，需要修改一些特定函數。
![](https://i.imgur.com/CT1XSYc.png)
本文提出一個權重調節器。如Algorithm 1.所示。其實就是將數值左移F位，進行四捨五入，最後在右移F位，將數值轉為N位元的小數。在過程中，不使用tensorflow的BP，因此使用StopGradient。
![](https://i.imgur.com/6lufw5X.png)
##### Evaluation of quantization:
本文使用ford的dataset進行chipnet的訓練、量化、微調。如表三所示，將數值精度降低，並不會造成精度下降。
![](https://i.imgur.com/MwVTR8M.png)

### C. View of drivable region
網路輸出後的結果為車輛前20m寬40m的俯視，會進行後處理，將輸出投影至頂視圖。因為他與KITTI的格式相同，容易進行比較。
![](https://i.imgur.com/OZCGaN5.png)
如Algorithm 2.所示。1, 2, 3主要針對模型輸出進行輪廓提取，4, 5主要針對輪廓進行填充，將區域內的點逐格標記。
後處理使用[GridMap](https://github.com/ANYbotics/grid_map)在CPU上實現。內部包含iterator，能夠將區域內的點逐格標記。
![](https://i.imgur.com/6epPdlS.gif)![](https://i.imgur.com/O1s5tOR.gif)![](https://i.imgur.com/zoU1e04.gif)![](https://i.imgur.com/d33c8xI.gif)![](https://i.imgur.com/vgm133u.gif)![](https://i.imgur.com/kl0pVbl.gif)![](https://i.imgur.com/Fu92gqy.gif)
在CPU處理上，能狗以每幀5ms處理。

後處理會造成精度下降可分為兩部分。1. 投影至鳥瞰圖時，LiDAR在較遠處的點雲較為稀疏，轉換時可能會造成失真。2. 在Algorithm 2. 時，假設外部區域為不可駕駛，內部區域為可駕駛，因此，如果可駕駛區域包含空洞時，可能會造成誤差。最後使用KITTI進行頻估，將結果與KITTI的鳥瞰圖進行比較，F1-Score為95.5%。
### D. Network training and evaluation
ChipNet在Xeon 2.4 GHz CPU 和 NVidia K20 GPU的平台，並使用Keras進行訓練。輸入為180*64*14的tensor輸出為180*64*1的tensor。每幀為256ms。使用Ford與KITTI的資料集進行頻估。

Ford的資料集3871筆資料。LiDAR使用10Hz進行採樣。由於資料集本身沒進行Label，因此本文手動標記ROI區域。為減少連續幀數重複性，因此每5幀為一個單位。實際上，1秒內能被採用2幀。在數據集中，刪除一些off-road的的樣本。因此，在Ford的資料集中，總共包含600筆資料。
![](https://i.imgur.com/yH32pU2.png)
原圖會從1243*1616剪裁至與LiDAR大小相同的800*600。Algorithm 4.表示LiDAR轉至camera view的演算法。本文使用400筆資料進行訓練/驗證，200筆進行測試。在400筆中，使用(-10, -5, 0, 5, 10)º進行旋轉，增加訓練樣本。因此總共有2000筆訓練資料。

本文使用Cross entropy當作loss function，adam當作optimizer。首先在沒使用量化的方式對網路進行30次迭代(4.5hr)，隨後使用量化方式進行10次迭代(1.5hr)，以獲得fixed point權重。

在測試階段，使用F1 score (F1)、average precision (AP)、precision (PRE)、recall (REC)、false positive rate (FPR)、false negative rate (FNR)當作評估指標。表三為不同bit情況下的評估結果。本文最終選擇18bit當作FPGA實現目標。

本文也在KITTI進行評估。包括289筆train data與290筆test data。圖片會被剪裁至375*1242，與Ford不同，KITTI是在鳥瞰圖進行評估。

在訓練時，將資料進行(–10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10)º旋轉，來擴增資料集。總共包括3179筆資料，其中3000筆進行訓練，179筆進行測試。訓練時，使用Ford前30次的迭代當作pretrain，隨後僅用KITTI的dataset進行10次的迭代(2.05hr)。
![](https://i.imgur.com/irZokw0.png)![](https://i.imgur.com/wHC9vYk.png)

表4為KITTI的實驗結果，並與其他學者進行比較。紅色區域為假駕駛區、藍色區域為缺失駕駛區、綠色區域為正確駕駛區、其餘部分為正確非駕駛區。
## Hardware Architecture
![](https://i.imgur.com/HgItCku.png)![](https://i.imgur.com/RLBcsli.png)
![](https://i.imgur.com/cSVcEuh.png)![](https://i.imgur.com/Hyy7Pl8.png)
![](https://i.imgur.com/vQblPIf.png)![](https://i.imgur.com/uhgy6W7.png)
Clock 350MHz
Xilinx UltraScale XCKU115 FPGA-> 12.59ms
NVidia K20 GPU-> 162ms
Intel Core i5-5200U CPU-> 549ms
FPGA 實現的速度比 CPU 快 43 倍，比 GPU 快 13 倍。
以FPGA進行LiDAR運算文章較少，無法比較。
所提出的 FPGA 解決方案的功耗僅為 NVidia K20 GPU 的 11.8%，即 107 W。