Blog2019-04-25Autowareにおける三次元物体認識アルゴリズム「PointPillars」の紹介こんにちは。ティアフォーで自動運転ソフトウェア開発を行っている村上です。Learningを使った三次元物体認識の手法を紹介していきます。Learningを用いることが多いです。画像認識アルゴリズムであるSSD*1やYOLO*2が有名なものになります。Learningは認識以外の分野にも応用されています。自動運転における判断*3や車両制御*4に応用するような論文も出てきていたりします。Learningを点群処理に応用したアルゴリズムを紹介したいと思います。Learningが必要なのでしょうか?理由は高精度の物体認識と形状推定を実現するため、です。Challengeの研究成果を取りまとめた論文*5*6では以下のような点群による認識のパイプラインが提案されました。下のグラフのように、点群に対して順番に様々な処理をしていくようなパイプラインになっています。従来のパイプラインしかし、このパイプラインでは自動運転で求められるような高精度の認識が難しいという問題がありました。従来手法での問題いくつか問題がありましたが、一つ挙げるとすれば、「クラスタリング」において、二つの物体が隣り合っている場合、区別することが難しいという問題がありました。Clusterの結果を表示しています。前方左にバイク、前方右に自動車があるような状況ですが、二つの物体を一つの物体として認識しており(同じピンクの色で認識)、それぞれの物体を区別することができていませんでした。形状推定の必要性また、自動運転におけるPerceptionの難しさの一つに隠れ(オクルージョン)の問題があります。従来のパイプラインでは一部の物体形状しか得られない状態において、物体全体の形状を推定することが困難でした。上の画像は前方の車両を様々な角度から見たものです。右の鳥瞰方向の画像では、前方の車の形状が分かりにくいことを示しています。実際の物体は下の画像のように存在します。このように物体全体の形状を推定することは、TrackingやPlanningなどの自動運転における重要なプロセスの中で非常に役に立ちます。Endで最適化されたクラス分類と形状推定をすることができます。これは従来のパイプラインにおける「地面除去」、「クラスタリング」、「クラス分類」といった処理を暗に内包していると言えます。物体の形状についても事前知識を利用することによって、従来手法では成し得なかった全体形状の高精度な推定が可能となりました。従来手法では達成できなかった「高精度の物体認識と形状推定」をするために、今回「PointPillars」*7を実装しました。Boxを生成しました。2017年にAppleの研究員が発表したVoxelNet*10では、PointNet*11をベースにしたPoint単位の特徴量抽出とVoxel単位での局所的な特徴量計算を合わせて行うことで、MV3Dを上回る性能を達成しました。Convolutionを適用することでモデルの軽量化と性能向上を達成しました。「PointPillars」SECONDとほぼ同時期に発表されたのがPointPillarsでした。VoxelNetを踏襲しながら、Voxel単位の特徴量抽出ではなくPillar(柱)単位での特徴量抽出と2D-convolution使用による軽量化された構造が特徴です。今回、なぜ数あるアルゴリズムの中からPointPillarsを選択したかというと、処理速度と予測精度のバランスが優れているからです。予測精度は他のアルゴリズムと比べてトップクラスであると同時に、処理速度は類似手法と比較し最も早く動作するアルゴリズムであり、16ms(約62Hz)で動作することが論文内で述べられています。下の画像*13ではクラス別の比較項目の中で、PP(PointPillars)が他のアルゴリズムに比べて、予測精度と処理速度の二つの点から優れていることが分かります。PointPillarsと類似手法比較ネットワーク構造はVoxelNetとくらべてPillar単位の特徴量抽出や2D-convolutionの使用により、軽量化されています。従来手法と比べた大幅な高速化は二つの要因から達成されました。一つはネットワーク構造のスリム化。Learningの推論を高速化するLibraryの使用です。TensorRTは便利ですが、対応しているレイヤーの種類が限られている、という欠点があります。実際に、PointPillarsで使用したいと考えていた"Scatter"と呼ばれるレイヤーが存在しなく、自身で実装する必要がありました。最初はCPU側でコードを書いていたのですが、メモリ転送の時間コストが高かったため、この部分をCUDAで実装しました。点群の前処理と後処理においてもCUDAによる実装をすることで、計算効率化とメモリ転送コストの削減を達成しました。Learningによる点群処理手法の問題点のうちの一つが、その処理速度が遅いことでした。類似手法で紹介したVoxelNetでは225msかかっており、LIDARのセンサー周期が100msで動いていることを考慮すると、自動運転で扱うことが難しいアルゴリズムでした。元論文では優れたネットワーク構造とTensorRTによって16msで動作することを発表しました。評価した結果になります。村松さんにはPointPillarsのネットワーク実装においてアドバイスをいただきました。ありがとうございました。[後編]こんにちは、ティアフォーエンジニアの村上です。[前編]こんにちは、ティアフォーパートタイムエンジニアの上野と、テ...2021-04-14自動運転データの検索システムを爆速で作った話みんなデータを探せなくて困ってるということがわかりました。IVにはWeb、組み込みソフト、ハードウェアといった異なるスキルセットを持ったエンジニアがおり、一緒に働いてくれる仲間を常に募集しています。BlogをMediumに移行しました。12リンク運営会社はてなブログをはじめよう!TierIVさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。