<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于3D點云的多任務模型在板端實現高效部署

地平線HorizonRobotics ? 來源:地平線HorizonRobotics ? 2023-12-28 16:35 ? 次閱讀

簡介

對于自動駕駛應用來說,3D 場景感知至關重要。3D點云數據就是具有3D特征的數據。一方面,3D 點云可以直接用來獲取障礙物的距離和大小,以及場景的語義信息。另一方面,3D 點云也可以與 2D 圖像進行融合,以充分利用兩者所提供的不同信息:圖像的優勢在于語義信息更加豐富,點云的優勢在于距離和深度感知精確。隨著深度學習架構的發展,出現了很多基于3D 點云感知模型,通過提取 3D 空間的點云特征,可以構建一種更精確、高維度、高分辨率的場景表示形式,助力下游預測與規控任務的發展。對于檢測模型,相比圖像感知模型,對于 3D 感知任務,基于3D 點云的感知模型通常擁有非常明顯的精度優勢。

同時,在自動駕駛系統中,可行駛區域分割是一項重要的任務??尚旭倕^域的提取是ADAS的關鍵技術,旨在使用傳感器感知技術感知駕駛車輛周圍的道路環境,識別并分割出當前駕駛場景下可行駛的區域,防止偏離車道或違規駕駛。

在部署過程中,相比圖像模型,3D 點云的輸入處理過程更復雜,量化難度高,導致難以部署。當前常見的對點云數據處理方式包括point-based、pillar-based、voxel-based等方式??紤]到部署的實時性需求,地平線選用了基于pillar-based的 Centerpoint,同時提出了基于3D點云的多任務模型,實現可行駛區域分割的感知功能。本文即對如何在地平線征程5芯片上高效部署基于3D點云的多任務模型進行介紹。

整體框架

cdaac5fe-a55a-11ee-8b88-92fbcf53809c.png

本文介紹的多任務模型輸入為3D點云,通過感知模型可同時輸出 3D 目標檢測結果和 2D 可行駛區域的分割結果。多任務模型網絡結構可分為以下三個部分:

?點云前處理。該部分是對3D點云做基于pillar-based的處理,將點劃分到pillars中,形成偽圖像。包括以下三個部分:

a. Pillar 化:將輸入的原始點云轉換為 pillar 特征;

b. PFNLayer:提取 pillar 特征,特征通道數提升至 64;

c. Scatter:完成 pillar 特征到偽圖像化的轉換;

?特征提取和融合: 該層選用 MixVarGENet+UNET 結構,提取多層特征并加以融合,獲得高層語義特征;

?多任務輸出頭: 輸出多類別的 3D 目標檢測和二分類的可行駛區域分割結果。

部署優化

在部署優化之前,首先明確針對Centerpoint多任務模型的各部分的結構做性能和量化精度上分析,然后進一步給出優化方向和優化思路。

量化精度優化

在前面有提到,點云數據具有不均勻的特征,這種分布特點的數據使用PTQ量化方式很大可能會有量化精度問題,因此在 Centerpoint 多任務模型的量化過程中,我們使用 Calibration+QAT 的量化方式來保證點云模型的量化精度。需要提到的是地平線的calibration對于大部分模型就可以達到預期的量化精度,少量模型在較小的QAT訓練代價下可以達到量化精度。由于 Centerpoint 多任務模型中所有算子的量化在征程5上是完全支持的,得到初版的量化精度是非常簡單的。

QAT量化方式是根據數據的分布選取量化系數,將fp32的數據截斷到int8范圍,由于點云數據分布不均勻,其表現在部分數據(點云坐標)的數值范圍較大,部分(點到中心的距離)數值范圍較小,這種情況對量化是很不友好的,因此在量化訓練中,會導致精度掉點;為了使數據分布處于均勻范圍內,一般都會做歸一化處理(歸一化對浮點的精度也是有利的),因此,為了提升量化精度,我們增加了對點云特征的歸一化處理。

Python
def _voxel_feature_encoder(self, features, norm_dims, norm_range,feature,num_points_in_voxel):
    # normolize features
    for idx, dim in enumerate(norm_dims):
        start = norm_range[idx]
        norm = norm_range[idx + len(norm_range) // 2] - norm_range[idx]
        features[:, :, dim] = features[:, :, dim] - start
        features[:, :, dim] = features[:, :, dim] / norm
    ...


    return features

在nuscenes數據集上的驗證,經歸一化處理后,量化精度損失在 1% 以內。

性能優化

點云前處理優化

前處理包括Voxelization操作和特征的擴維操作-VoxelAugment。我們將分析公版的實現在征程5上部署的困難點,然后基于困難點介紹優化方式以及地平線對點云前處理的部署優化。

Voxelization:體素化,是把三維空間中的點云數據轉換到體素(voxel,即三維空間中的網格)。
Centerpoint中的 Pillars 可以看作是特殊( z 軸沒有空間限制)的 voxel,為了與社區名稱和代碼實現名稱相統一,我們下文統一稱為 Voxelization、voxel。

Voxelization部署分析

假設用 (x, y, z, r, t) 表示點云數據中的一個點,其中(x, y, z) 坐標,r 為點云的反射強度,t為時間戳。

Centerpoint中的Pillar化(一種特殊的 Voxelization 操作,是把 z 軸看作一個整體,把三維空間離散化為 x-y 平面中均勻間隔的網格),在 Voxelization 過程中,需要依次、逐個對密集點云中的每個點進行判斷,并將其劃分入對應的 voxel 中,且每個 voxel 都需要存儲點云中對應區域的信息。隨著點云密度的增加,處理的體素數量也相應增多,導致需要更多的計算和內存資源,其計算復雜度可能導致較長的部署時間。

VoxelAugment部署分析

繼voxelization 中把每個點云 point 劃分到各個 pillar 中之后,公版 Centerpoint中對點云 point 做了特征增強,即前文提到的把基于 nuscenes 數據集的5 維點云 point 數據(x, y, z, r, t)根據點到中心的距離擴充到了 11 維(x, y, z, r, t,xc, yc, zc,xp, yp, zp,)。然而,這樣的處理方式,無論是對量化精度還是部署性能方面,都存在一些不足:

?量化精度方面:前文已提到,這里不再贅述;

?部署性能方面: 在從 5 維擴充到 11 維時,對中心點距離的求解,增加了計算量和相應的耗時。而在我們的實驗中發現,增加的后 6 維數據,實際對模型的浮點精度影響很小。

針對以上兩個問題,下面介紹地平線的優化方法。

VoxelAugment優化

根據實驗,原11維的方案會導致耗時增加,精度收益不大,因此在我們的改進方法中,點云 point 僅使用前5維(x, y, z, r, t),見板端c++代碼:

Python
void QATCenterpointPreProcessMethod::GenFeatureDim5(float scale) {
  for (int i = 0; i < voxel_num_; i++) {
    int idx = i * config_->kmax_num_point_pillar * config_->kdim;
    for (int j = 0; j < config_->kmax_num_point_pillar; ++j) {
      if (config_->pillar_point_num[i] >
          config_->kmax_num_point_pillar_vec[j]) {
        int index = idx + j * config_->kdim;
        voxel_data_[index + 0] =
            (voxel_data_[index + 0] - config_->kback_border) /
            config_->kx_range / scale;
        voxel_data_[index + 1] =
            (voxel_data_[index + 1] - config_->kright_border) /
            config_->ky_range / scale;
        voxel_data_[index + 2] =
            (voxel_data_[index + 2] - config_->kbottom_border) /
            config_->kz_range / scale;
        voxel_data_[index + 3] = (voxel_data_[index + 3] - config_->kr_lower) /
                                 config_->kr_range / scale;
        if (voxel_data_[index + 4] != 0) {
          voxel_data_[index + 4] = voxel_data_[index + 4] / scale;
        }
      }
    }
  }
}

在優化后,該部分耗時減少了 4ms,精度上影響較小。

除了以上的優化外,考慮硬件對齊特性,對特征的layout也做了優化,以便模型可以高效率運行。征程5計算運算的時候有最小的對齊單位,若不滿足規則時會對Tensor自動進行padding,造成無效的算力浪費。例如conv的對齊大規則為2H16W8C/2H32W4C?;谟布卣?,采用H W維度轉換的方式,將大數據放到W維度以減少算力的浪費,因此在生成pillars特征對其做歸一化后使用permute將1x5x40000x20轉換為1x5x20x40000。

Python
features = features.unsqueeze(0).permute(0, 3, 2, 1).contiguous()

Voxelization優化

對于點云的voxelization耗時問題,地平線提供了ARMDSP部署方式??梢栽贠E包的AIBenchmerk中查看其具體實現。

DSP具有強大的并行計算能力,能夠同時處理多個數據,且具有快速讀寫內存的特點,利用 DSP 可以有效加速 Voxelization 過程,提高實時性能。例如,在 nuscenes數據集(點云數據量為30萬),經 DSP 優化后,前處理耗時由77ms 降低至20ms,性能提升3.8倍。具體數據可見實驗結果章節。

優化后,點云處理部分流程圖如下所示:

cdb90772-a55a-11ee-8b88-92fbcf53809c.png

特征提取與融合PFNLayer

Centerpoint 的PFNLayer作用是將每個包含D維特征的點(由前文可知,公版Centerpoint中 D=11,地平線參考模型中D=5)用一個Linear+BatchNorm1d+ ReLU+max 的組合來進行特征提取,生成(C,P,N) 的張量。

而地平線征程5最早針對的是以CNN為基礎的圖像處理,在編譯器內部4d-Tensor是最高效的支持方式。如果不是4d-Tensor的話,編譯器內部會主動轉成4d(某些維度為1)來做,會多了很多無效的計算。我們可以使用常規的4維算子替換原來任意維度的設置,避免不必要的冗余計算。常見的替換方式如下,中間配合任意維度的reshape,permute來完成等價替換。因此,我們將公版中的 Linear + BatchNorm1d + ReLU + max 分別做了如下替換:

N dims 4dims
nn.Linear nn.Conv2d
nn.BacthNorm1d nn.BacthNorm2d
torch.max nn.MaxPool2d

偽圖像化

PillarScatter 是實現偽圖像轉換的最后一個步驟,該部分將(1, 1, P, C) 的特征映射獲得形如(C, H, W) 的偽圖像。為了便于量化訓練和上板推理優化,我們在 horizon_plugin_pytorch 和編譯器中均實現了point_pillars_scatter 算子。該算子由編譯器內部完成,用戶不需要感知。

horizon_plugin_pytorch 中 point_pillars_scatter 算子的調用方式為:

Python
from horizon_plugin_pytorch.nn.functional import point_pillars_scatter


pseudo_image_feature = point_pillars_scatter(voxel_features, coords, out_shape)

backbone+neck

關于特征提取與融合部分,由于點云處理部分生成的偽圖像特征輸出通道數較大,原 Centerpoint 模型中的 SECOND 結構部署速度不夠快,本文選用 MixVarGENet+UNET 結構,作為模型的 backbone 與 neck。

MixVarGENet 為地平線基于征程5硬件特性自研的backbone結構,特點是性能表現優異,可以達到雙核5845FPS。該結構的基本單元為MixVarGEBlock。如下為MixVarGEBlock的結構圖:

cdd37760-a55a-11ee-8b88-92fbcf53809c.png

MixVarGENet高度秉承了“軟硬結合”的設計理念,針對征程5的算力特性做了一些定制化設計,其設計思路可以總結為:

1. 小channel時使用normal conv,發揮征程5算力優勢;

2. 大channel時引入group conv,緩解帶寬壓力;

3. Block內部擴大channel,提升網絡算法性能;

4. 縮短feature復用時間間隔,減少SRAMDDR訪存。

充分考慮征程5的帶寬和硬件屬性,小neck+大backbone的組合比較經濟,且可以提高BPU的利用率,能達到平衡精度與速度的最佳組合!

多任務輸出頭

Centerpoint多任務模型的輸出頭分為兩部分,對于 3D 目標檢測,選用 Centerpoint 模型的預測頭,2D 可行駛區域的分割結果則選用了 FCN 結構做為輸出頭。

多任務模型的分割頭為 FCNHead,其中部分卷積模塊替換為深度可分離卷積,有利于部署性能的進一步提升。同理,多任務模型的檢測頭 CenterpointHead 也將部分卷積模塊替換為深度可分離卷積。替換后,模型部署性能得到了進一步的提升,同時浮點精度不受影響。

由于公版 Centerpoint 模型的二階段在 nuscenes 數據集上并無精度提升,因此這里只選用了一階段的輸出頭。

實驗結果

1. Centerpoint 多任務模型在征程5性能數據

數據集 Nuscenes
點云量 30W(5dim)(注1)
點云范圍 [-51.2, -51.2, -5.0, 51.2, 51.2, 3.0]
Voxel size [0.2, 0.2, 8]
最大點數 20
最大pillars數 40000
FPS 106.14
前處理時長(arm/arm+dsp) 77ms/20ms
latency 23.79ms
量化精度 浮點:NDS: 0.5809, mAP: 0.4727, miou:91.29
定點:NDS: 0.5762, mAP: 0.4653, miou:91.22
檢測類別 10類(注2)
分割類別 二分類(注2)

1:維度為(x,y,z,r,t),即:3維坐標、強度和時間

2:檢測任務:["car","truck","construction_vehicle","bus","trailer","barrier","motorcycle","bicycle","pedestrian","traffic_cone"]

分割任務:["others", "driveable_surface"]

2. 基于3D點云的多任務模型高效部署通用建議

?對輸入數據做歸一化,更有利于量化。

?如在部署中使用PTQ無法解決量化精度問題,考慮使用QAT做量化部署。

?對于點云數據,pillars_num較大,將大數據放到W維度提升計算效率。

?建議選擇小neck+大backbone的組合,減小帶寬壓力,達到性能提升。

?使用地平線提供的點云前處理,若前處理存在性能瓶頸,嘗試DSP方案。

總結

本文通過對基于3D點云的多任務模型在地平線征程5上量化部署的優化,使得模型以低于1%的量化精度損失,得到 latency 為 23.79ms 的部署性能。在點云處理方面,通過針對性的優化方法,靈活支持了不同點云輸入并大幅提高點云處理的速度;在特征提取方面,選用了征程5高效結構 MixVarGENet+UNET;在輸出設置上,采用多任務輸出設計,能夠同時得到 3D 目標檢測結果和可行駛區域的分割結果。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2532

    文章

    48534

    瀏覽量

    742279
  • dsp
    dsp
    +關注

    關注

    545

    文章

    7668

    瀏覽量

    345028
  • 編譯器
    +關注

    關注

    1

    文章

    1585

    瀏覽量

    48740
  • 自動駕駛
    +關注

    關注

    774

    文章

    13205

    瀏覽量

    163712
  • ADAS系統
    +關注

    關注

    4

    文章

    226

    瀏覽量

    25587

原文標題:多維優化Centerpoint模型成果顯著!基于3D點云的多任務模型在板端實現高效部署

文章出處:【微信號:horizonrobotics,微信公眾號:地平線HorizonRobotics】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    包含具有多種類型信息的3D模型

    、安全和高效的建筑系統,讓居住者能夠擁有可持續、彈性舒適且符合人體工程學的建筑。建筑信息模型 (BIM) 是建筑工程師在建筑物和其他結構設計中使用的一種3D建模過程。BIM軟件提供了一個基于
    發表于 03-28 17:18

    老生常談---一種裸奔多任務模型

    一種裸奔多任務模型一個網友的總結:stateMachine + timerTick + queue。RTOS環境下的多任務模型任務通常阻塞在一個OS調用上(比如從消息隊列取數據)。
    發表于 12-08 10:13

    如何同時獲取2d圖像序列和相應的3d?

    如何同時獲取2d圖像序列和相應的3d?以上來自于谷歌翻譯以下為原文How to obtain the sequence of 2d im
    發表于 11-13 11:25

    PCB中3D應用相關功能詳解

    Designer 憑借其突出的 3D 設計能力,提供當今公認一流的三維 PCB 設計平臺。PCB 編輯器也支持導入機械外殼,與上所有元器件的精確3D模型一起,
    發表于 07-05 08:00

    你沒看錯,浩辰3D軟件中CAD圖紙與3D模型高效轉化這么好用!

    、角度、受力等等實現精準參數化管理。 (精準參數化管理)3、一鍵生成各類2D工程圖浩辰3D為用戶提供了多種工程圖創建方式,可以通過新建直接選擇工程圖設計,
    發表于 05-13 14:33

    浩辰3D軟件入門教程:如何比較3D模型

    。浩辰3D軟件不僅提供了完備的零件、裝配、仿真、工程圖、鈑金、焊接等數十種設計模塊,還提供了「比較模型」和「比較圖紙」功能,讓這一過程高效且精確。01「比較模型
    發表于 12-15 13:45

    PYNQ框架下如何快速完成3D數據重建

    的。為了與下一節中實現的自定義方法進行比較,使用Mesh Lab可視化三維。從下圖可以看出,渲染是準確的。使用PYNQ生成3D
    發表于 01-07 17:25

    AD的3D模型繪制功能介紹

    `  首先,封裝庫的編輯界面下,我們點擊菜單欄目的Place-》3D Body,見圖(1)?!   D(1)3D模型打開步驟  打開后就會出現信息編輯界面,見圖(2)。我們可以看到A
    發表于 01-14 16:48

    浩辰3D的「3D打印」你會用嗎?3D打印教程

    ,從而幫助設計工程師快速設計、試制復雜曲面、異形結構以及非標零部件,高效推進新產品的設計研發與設計驗證。1、模型處理浩辰3D中打開模型文件
    發表于 05-27 19:05

    3D設計軟件中怎么創建風扇葉模型?浩辰3D基礎教程

    環節。下面,小編將通過繪制生活中常見的風扇葉模型,展示如何通過浩辰3D設計軟件高效地完成日常的創新設計需求。1、葉轂繪制浩辰3D設計軟件的
    發表于 06-04 14:11

    格式主要有哪幾種

    由于數據的量非常大,cesium顯示海量數據的時候就非常的吃力,因此需要用到3dtiles。3D Tiles=lod+gltf,專門為
    發表于 07-12 07:48

    裸奔環境下的多任務模型

    對于簡單的嵌入式應用多數裸奔就能解決,但寫出來的裸奔代碼質量也由好壞之分。在網上看到了這樣一篇文字:上面說到了裸奔環境下的多任務模型 - stateMachine + timerTick
    發表于 01-21 07:41

    面向3D機器視覺應用并采用DLP技術的精確生成參考設計

    3D 。高度差異化 3D 機器視覺系統利用 DLP? LightCrafter? 4500 估模塊 (EVM)(采用 DLP? 0.45 英寸 WXGA 芯片組),能夠靈活控制工
    發表于 09-22 10:20

    基于頁的8051多任務模型

      隨著8051微控制器性能的不斷提高,使用多任務操作系統對單片機進行資源管理已成為當代開發的需要。由于受靜態鏈接的限制,8051系統的多任務開發需要處理代碼重入(reentran
    發表于 09-25 17:34 ?900次閱讀
    基于頁的8051<b class='flag-5'>多任務模型</b>

    workflow的任務模型

    主要就是想介紹下workflow的任務模型,其他的框架一般只能處理普通的網絡通信,而workflow卻特別適用于通信與計算關系很復雜的應用。其實我最感興趣的是它的內存管理機制,下面也會詳細介紹。
    的頭像 發表于 02-21 14:05 ?584次閱讀
    workflow的<b class='flag-5'>任務模型</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>