⾼位合成によるslam技術の · 2020-06-22 ·...

23
⾼位合成によるSLAM技術の FPGA実装 株式会社アイヴィス 松本茂樹 2020.6.24

Upload: others

Post on 31-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

⾼位合成によるSLAM技術のFPGA実装

株式会社アイヴィス 松本茂樹

2020.6.24

Page 2: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

目次

FPGAとは

⾼位合成とは

背景・目的

SLAM技術のFPGA実装(概要)

共同研究:株式会社アイヴィス,株式会社セック,九州工業大学 田向研究室

SLAM技術のFPGA実装(詳細)

HW化した処理

元アルゴリズムの改造

まとめ

2

Page 3: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

FPGAとは

FPGA: Field Programmable Gate Array

内部の論理回路構造を何度も再構成できる半導体チップ

エッジコンピューティング技術を中心に,近年注目を集めつつある補助演算プロセッサ

小型・省電力でランニングコストが低い

Intel(Altera)と,XILINXが市場を二分している

3

Intel Arria 10 XILINX ZYNQ

Page 4: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

FPGAのアーキティクチャ

論理ブロックの配列(Logic Block),データ入出力のための I/O pad,配線用チャンネル(Routing Channel)から構成される.

FPGA回路デザインデータを書き換えることで,回路の再現に必要な要素間を連結して回路を作り出す.

4

図の出典:https://ja.wikipedia.org/wiki/FPGA

Page 5: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

⾼位合成:回路デザインが手軽に!

5

従来のFPGA開発

HDLでコーディング

論理合成

配置・配線

FPGA回路デザインデータ(バイナリ)

OpenCLによるFPGA開発

OpenCL Cでコーディング__kernel void matrixMult( // Input and output matrices

__global float *restrict C, __global float *restrict A,__global float *restrict B, int A_width, int B_width)

{for (int a = a_start, b = b_start; a <= a_end; a += BSIZE, b += (BSIZE * B_width)){

A_local[local_y][local_x] = A[a + A_width * local_y + local_x];B_local[local_x][local_y] = B[b + B_width * local_y + local_x];for (int k = 0; k < BSIZE; ++k) {

running_sum += A_local[local_y][k] * B_local[local_x][k];}

C[get_global_id(1) * get_global_size(0) + get_global_id(0)] = running_sum;}

⾼位合成

Page 6: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

背景・目的

元来FPGAはS/W技術者には敷居が⾼かったが,C/C++で記述可能な⾼位合成技術の発達により敷居が下がっている.

SLAM(Simultaneous Localization and Mapping)に応用

オープンソースのORB-SLAMをFPGA用に⾼位合成し,ORB-SLAMの処理⾼速化にFPGAが有効であることを示す.

6

消費電力,排熱,スペースに制限がある場合に有効な補助演算プロセッサ

FPGA適用

Page 7: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

SLAM技術のFPGA実装(概要)

7

Page 8: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

ORB-SLAM

カメラ映像を用いるSLAMをvSLAM(Visual SLAM)と呼ぶ.

比較的安価にSLAMを行える.

画像の輝度を直接用いる直接法と,特徴点を用いる間接法がある.

ORB-SLAMは,代表的な間接法のvSLAM

3つのスレッドが協調的に動作

8

[1] Raul Mur-Artal, Juan D. Tardos:ORB-SLAM, "An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras",

IEEE Transactions on Robotics ( Volume: 33 , Issue: 5 , 1255—1262, Oct. 2017 )

[1] ORB-SLAMの構成

Tracking:・フレームから特徴点を抽出・フレームを照合して追跡・地図情報にキーフレーム追加

Local mapping:Trackingでキーフレームが追加されたとき,局所的に地図情報を最適化

Loop closing:周回した経路を最適化

Page 9: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

Trackingの特徴点抽出処理をFPGA化

既存の地図情報があればTrackingだけで自己位置推定可能

特徴点抽出処理に着目

画像処理が多く,並列化しやすい

Tracking全体の処理時間を,FPGA利用により約9.5倍高速化!

目標とする10FPS(100ms)以内の処理を達成

9

[1] Raul Mur-Artal, Juan D. Tardos:ORB-SLAM, "An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras",

IEEE Transactions on Robotics ( Volume: 33 , Issue: 5 , 1255—1262, Oct. 2017 )

[1] ORB-SLAMの構成

特徴点抽出処理

「高位合成によるORB-SLAMのFPGA実装と評価」 ,岩渕 甲誠,松本 茂樹,松尾 幸治,石田 裕太郎,廣瀬 尚三,長瀬 雅之,田向 権,ロボティクス・メカトロニクス講演会2019 in

Hiroshima,1AI-F06,2019年6月5-8日(6),広島,広島国際会議場.

※1

※1

Page 10: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

次のステップ: Local Mapping

Tracking⾼速化に伴い,他のスレッドも⾼速化させる

Local Mappingは、曲がり角などでは,ほぼ毎フレーム動作し,地図を作成することになる.

Tracking⾼速化に対してLocal Mappingの処理が追い付かず,ロストする可能性がある

10

[1] Raul Mur-Artal, Juan D. Tardos:ORB-SLAM, "An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras",

IEEE Transactions on Robotics ( Volume: 33 , Issue: 5 , 1255—1262, Oct. 2017 )

[1] ORB-SLAMの構成

Local mapping

Tracking:ORB-SLAMで想定している、10FPSの処理をクリア

Page 11: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

Local Mappingの⾼速化の検討

SearchInNeighborsはソフトウェア側の改造で⾼速化可能

FPGA化の候補:CreateNewMapPoints,LocalBundleAdjustment

11

No 処理名 処理時間割合(ms)

処理概要

改造前 改造後

1 ProcessNewKeyFrame 13.8 10.6 KeyFrameのBoWやMapPointの法線を計算

2 MapPointCulling 0.1 0.2 最近追加された不要なMapPointの削除

3 CreateNewMapPoints 58.3 62.2 近隣のKeyFrameと新しいMapPointの作成

4 SearchInNeighbors 58.2 17.1 近隣のKeyFrameを用いてMapPointの統合

5 LocalBundleAdjustment 102.2 114.7 周辺KeyFrameとMapPointで最適化

6 KeyFrameCulling 4.9 7.7 不要なKeyFrameの削除

合計 237.5 212.5

Local Mappingの処理一覧(ソフトウェア側での改造を実施)

Page 12: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

SLAM技術のFPGA実装(詳細)

12

Page 13: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

FPGA開発環境

XILINX社製Zynq-UltraScale+ MPSoC ZCU102を用いる.

FPGAとARMが同梱されたSoC (System on Chip)形式

CPU :Arm Cortex-A53 クアッドコア,最大クロック 1.5GHz

FPGA :ロジックセル600KブロックRAM 32.1Mbit

⾼位合成ツールとしてXILINX社製SDSoC を用いる.

CPUで動作するソフトウェアとFPGAに生成する回路を同時に開発する事が可能

13

Page 14: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

ORB-SLAMに沿ったFPGAデータフロー

14

画像データがパイプライン処理されるよう処理を並べる.

内部メモリに画像データを保存しないため,前段・後段それぞれに画像データ転送

8個の同じ回路を作成し,ピラミッド画像を並列に処理

以下の箇所で,line bufferを設ける

4 line buffer: ピラミッド画像作成

7 line buffer: FASTでの特徴点検出

31 line buffer: 特徴量計算画像データ

4 line buffer

Page 15: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

補足:ラインバッファによる⾼速化

FPGAから専用メモリへのアクセス回数は少ないほど良い

画像データの場合、FPGA内にラインバッファを構成するとストリーム化できる場合がある(アクセス回数削減)

Burst Read/Writeという機能を用いれば,順次アクセスに限り,データ転送はより効率的になる

15

FPGA用メモリ

FPGA回路

メモリアクセス:多 ⇒ 処理時間:大

画像データ

画像データは、ストリーム化してFPGA回路に送りたい

畳込みカーネルサイズ: 3×3(シフトレジスタ)

2行のラインバッファ (横:画像の横サイズ)

出力画像

入力画像

入力画素のストリーム

出力画素のストリーム

例:畳込み演算への適用

Page 16: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

FASTでの特徴点検出の改造

16

FASTでは,画像に写る構造物のコーナーを特徴点として検出する.

パイプライン化のためにランダムアクセスを排除

元実装より多く検出されるが,次の処理で間引く

画像の一部に

ランダムアクセス

が発生!

元実装:画像を等分割し,異なる閾値で最大2回検出

改造:画像全体に対して低い閾値で1回検出

Page 17: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

特徴点削減処理の改造

17

FASTの特徴点検出の結果は,細かい構造部分に特徴点が集中するので,それを間引く

ループ依存性排除,固定ループ化するよう改造

元実装:画像を4分木構造で分割 改造:画像を固定サイズで分割

Page 18: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

実験

18

実施内容

ARMとFPGAの処理時間を比較

改造ORB-SLAMの処理をすべてARM上で動作

改造部分をFPGAで動作

KITTI00データセット(右図)を利用

縦376ピクセル,横1241ピクセル,4541フレーム,10fps

測定する処理

(1)フレーム読み込み間隔の実時間(Tracking処理全体を含む)

(2)Tracking処理全体

(3)ピラミッド画像作成

(4)ピラミッド画像作成

+Gaussian Blur

(5)8並列部分前段

(6)8並列部分後段

(3)

(4)

(5)

(6)

FPGA化

Page 19: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

実験結果(4541フレームでの平均)

19

FPGA化した個別の処理(3)~(6)の処理時間は,(6)を除いて約10数倍⾼速化

ARM上での処理も含むTracking全体は約9.5倍⾼速化

フレーム読込み間隔は105.34 msで,10FPSの実時間処理をほぼ達成

処理内容 処理時間 ms 高速化倍率ARM FPGA

+ARM

(1)フレーム読込み間隔の実時間 634.42 105.34 6.0

(2)Tracking全体 579.38 61.21 9.5

(3)ピラミッド画像作成 114.23 9.56 11.9

(4)ピラミッド画像作成+ GaussianBlur 143.64 9.59 15.0

(5)8並列部分前段 196.20 12.87 15.2

(6)8並列部分後段 120.51 24.78 4.8

Page 20: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

KITTI00データセットでの移動軌跡

軌跡のスケールに問題はあるが,軌跡の形状はほぼ同じ

改造版のARM,FPGA+ARMともに1060フレームでロスト

⇒アルゴリズム簡約化部分の見直し

⇒変数のbit長の検討(消費リソース量を下げるために小さくした)

SLAMの精度改善が課題

20

(フレーム1~1000)

元の軌跡 ground truthのスケールに合わせた軌跡

改造ORB-SLAMでロスト

Page 21: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

Local MappingのS/W⾼速化に関して

⾼速化の検討(S/W側の工夫)Eigenライブラリ用データ型への統一

Eigen(行列計算ライブラリ)は,g2oのグラフ最適化で利用

g2o処理の前に、OpenCV形式⇒ Eigen形式などのデータ変換が行われている.

⇒ 形式を統一すれば,変換処理の負荷が減らせる.

⇒ Eigenの行列計算処理は精錬されたS/Wである.

⇒ データ形式統一は,FPGA化を視野に入れた処置でもある.

変更箇所(Local Mapping以外も含む)最適化対象のCameraPose、MapPoint及び関連パラメータ

範囲:Trackingスレッド,LocalMappingスレッド,LoopClosingスレッド

ORB特徴点のDescriptor (BRIEF記述子)の処理 範囲:Trackingスレッド,LocalMappingスレッド

DBoW2の処理 範囲:Trackingスレッド,LocalMappingスレッド

21

Page 22: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

Local Mappingの⾼速化の検討(※スライド11の再掲)

FPGA化の候補:CreateNewMapPoints,LocalBundleAdjustment

22

No 処理名 処理時間割合(ms)

処理概要

改造前 改造後

1 ProcessNewKeyFrame 13.8 10.6 KeyFrameのBoWやMapPointの法線を計算

2 MapPointCulling 0.1 0.2 最近追加された不要なMapPointの削除

3 CreateNewMapPoints 58.3 62.2 近隣のKeyFrameと新しいMapPointの作成

4 SearchInNeighbors 58.2 17.1 近隣のKeyFrameを用いてMapPointの統合

5 LocalBundleAdjustment 102.2 114.7 周辺KeyFrameとMapPointで最適化

6 KeyFrameCulling 4.9 7.7 不要なKeyFrameの削除

合計 237.5 212.5

Local Mappingの処理一覧(ソフトウェア側での改造を実施)

計算量が大きな部分でFPGA化で⾼速化できれば効果は大きいアルゴリズムの大きな改造が必要になるため,今回FPGA化は見送り(今後の課題)

Page 23: ⾼位合成によるSLAM技術の · 2020-06-22 · ARM上での処理も含むTracking全体は約9.5倍⾼速化 フレーム読込み間隔は105.34 msで,10FPSの実時間処理

まとめ

23

OSSを元にしたORB-SLAMのFPGA実装を行った.

FPGAに効率的な処理をさせるには,以下の改造が重要

既存ソフトウェアの処理フローを整理した上で,FPGAで効率的に処理できるよう再設計する.

メモリのランダムアクセス,ループ依存性,可変ループを排除し,パイプライン処理できるようにアルゴリズムを変更する.

ORB-SLAMのTracking処理を約10倍⾼速化!

Local MappingのFPGA化対象の候補を絞った.⇒CreateNewMapPoints,LocalBundleAdjustment