はじめまして、ティアフォーでパートタイムエンジニアをしている村松です。
今回は、AutowareのPerceptionモジュールにおけるObject Recognitionを改善するために調査した内容について紹介します。 Autowareのアーキテクチャの詳細については過去の記事をご覧ください。
論文紹介
今回は、カメラ画像のみまたはカメラ画像とLiDAR点群の両方を活用した3次元での物体検出の論文を4つ紹介します。
Pseudo-LiDAR
まず最初に紹介するのは、カメラ画像のみを使って3次元物体検出をする手法です。この手法は、CVPR2019で採択された論文*1で、現在Teslaでも使われています。Teslaの取り組みについてはScaledML 2020でも発表されていますので適宜参照いただければと思います*2。
一般的に、カメラ画像のみを使った3次元物体検出の手法はLiDAR点群を使った手法と比較してパフォーマンスが劣っています。この論文中では、その原因は画像から得られる深度推定の精度ではなくデータ表現の方法に問題があるとしています。一般的に用いられている深度マップ(Depth Map)による表現では、
- 物体の大きさが距離に依存する(例えば、遠くにあるものは小さく見える)
- 2次元空間上で隣接するピクセルが3次元空間上でも隣接しているとは限らない
という二つの問題点があることを挙げています。そこで、この論文では深度マップを点群と同様の3次元空間(xyz)で表現されるデータ形式に変換することを提案しています。
本手法の流れは次のようになります。
- 既存手法を用いて画像から深度推定を行う
- 深度マップをカメラキャリブレーションのパラメータを用いて3次元空間に投影することでxyzの点群データ(Pseudo-LiDAR)に変換する
- 得られた点群データ(Pseudo-LiDAR)について点群を入力データとする既存手法(PointPillarsなど)に与えることで3次元物体検出を行う
この手法の利点は、1ポツの深度推定と3ポツの3次元物体検出の手法を自由に変更できるというものです。そのため、既存の他の手法や将来のSotA(State of the Art)の手法に組み替えることが可能です。しかし欠点として、画像に対して深度推定と3次元物体検出の2つの手法を適用する必要があるため計算コストが大きくなること、そして点群を活用した3次元物体検出手法と比較した場合にパフォーマンスが劣っていることが挙げられます。
PointFusion
次に紹介するのは、カメラ画像とLiDAR点群の両方を活用した手法です。Zooxが公開した手法でCVPR2018で採択された論文*3で提案されています。なお、今年の1月には同社が本手法に関する米国特許を取得しています*4。
画像と点群の両方をモデルの入力とする場合、この2つのデータ形式が異なるという問題があります。そのため従来の手法では、点群の画像への射影や点群のVoxel化によりCNNを適用できるデータ形式へと変換してデータ形式を揃え、画像と点群の両方の特徴量を活用していました。しかし、このデータ変換によりデータの質が落ちてしまうという欠点がありました。そこで本手法では、点群のデータ変換を行わずに特徴量を抽出して画像と組み合わせるネットワークを提案しています。
本手法の流れは次のようになります。
- 既存手法(YOLOなど)を用いて画像から物体検出を行い、検出領域(2D Bounding Box)に対応する点群・画像領域を抽出(クロップ)する(図のA, Bの入力)
- クロップ点群・画像に対してそれぞれのネットワークを適用し特徴量を得る(図のA, B)
- 得られた特徴量を用いて、3D Bounding Boxの8つの頂点位置を推定する(図のC, D)
この手法は点群・画像に対し、一般的に使われているPointNetやResNetといったネットワークを適用して特徴量を得ています。そのうち点群から得られる特徴量に関し、点ごとの特徴量(point-wise feature)を用いるかどうかで2つのモデルを提案しています。
点ごとの特徴量を使う場合(図のC)には、図中のpoint-wise feature、global featureとblock-4の3つの特徴量を結合してMLP(Multi-Layer Perceptron)を適用することで8つの頂点位置とスコアを推定しています。その中で、一番スコアの高い点に対応する結果を最終的な出力として採用しています。また、ここでスコアの学習の仕方については2つの方法を提案しています。1つ目はsupervised scoringとして各点が3次元領域内に含まれるかのバイナリ分類によって学習を行う方法です。2つ目はunsupervised scoringとして各点が3次元領域に含まれるかに関わらず良い位置推定となるものがスコアが高くなるように学習を行う方法です。
なお、点ごとの特徴量を使わない場合(図のD)には、図中のglobal featureとblock-4という2つの特徴量を結合してMLPを適用し8つの頂点位置を推定するというシンプルなモデルになっています。
本手法は、画像から検出された個々の物体それぞれに対してモデルを適用します。そのため欠点として、検出対象の物体数が増えると全体の実行時間が長くなってしまうこと、そして各物体間の位置や向きの関係を考慮できないということがあります。
Frustum PointNets
次に紹介するものも、カメラ画像とLiDAR点群の両方を活用した手法です。CVPR2019で採択された論文*5で、現在Lyftで使われている手法のベースになっていると思われるものです*6。
点群を扱う手法として2016年にPointNetが提案されたことにより、点群のクラス分類とセマンティックセグメンテーションのパフォーマンスは大きく向上しました。しかし、この手法を点群全体に適用すると計算コストが高くついてしまいます。そこで、この論文では画像を活用することで点群を効率よく処理する手法を提案しています。
提案手法の処理の流れとしては、
- 既存手法(YOLOなど)を用いて画像から物体検出を行い、検出領域(2D Bounding Box)に対応する点群を抽出(クロップ)する(図のFrustum Proposal)
- クロップ点群にセグメンテーションを行うことで、物体に対応する点群を得る(図の3D Instance Segmentation)
- 得られた点群から3D Bounding Boxを推定する(図のAmodal 3D Box Estimation)
となります。また本手法では、点群の処理をよりロバストに行うために各処理の間で座標変換を行なっています。その中でも大きなポイントとして、T-Netにより点群の重心が原点となる座標系(下図のc)から物体の中心が原点となる座標系(下図のd)へと変換しています。
本手法についても、一つ前で紹介したPointFusionと同様に画像から検出された個々の物体に対してモデルを適用するため、物体の数に応じて実行時間が増えるという欠点があります。
PointPainting
最後に紹介するものも、カメラ画像とLiDAR点群を活用した手法です。nuTonomyが公開し、CVPR2020で採択された論文*7です。
本手法の処理の流れとしては、
- 既存手法を用いて画像のセマンティックセグメンテーションを行う(図の①)
- カメラキャリブレーションのパラメータを用いてセマンティックセグメンテーションの結果を点群に投影しクラス情報を付加する(図の②)
- クラス情報が付加された点群を用い、既存手法による3次元物体検出を行う(図の③)
となります。
この手法は、画像から得た物体のクラス情報を点群に付与するため、PointFusion等の画像と点群の特徴量をネットワークの中間層で結合するような手法と比較し、センサーデバイスを変更した場合に生じるセンサー固有のパラメータ変化の影響を受けにくいと考えられます。
また、CVPR 2020で開催された"Waymo Open Dataset Challenge"*8 で一位を取ったチームがPointPaintingを活用しています。解法のプレゼンはYoutubeで視聴できます*9。このチームは、PointPaintingの応用としてセマンティックセグメンテーションだけでなく2D Bounding Boxを用いた手法を考案しています。このチームによると、2D Bounding Boxを用いた場合でもセマンティックセグメンテーションとほぼ同様のパフォーマンスを出すことができています。
さいごに
今回は、カメラ画像のみまたはカメラ画像とLiDAR点群の両方を活用した3次元での物体検出の論文を4つ紹介しました。最新のアカデミックの論文においては、点群のみの手法の方が画像のみの手法や画像と点群を用いた手法より性能が優れています。しかし、より安心・安全な自動運転の実現に必要となる様々な環境でよりロバストな物体検出を可能とするためには、点群と画像の両方を活用する必要があると考えています。
ティアフォーではAutowareのPerceptionモジュールを更に改善するために、引き続き調査および研究開発を行なっており、Perception Algorithms Researcherやパートタイムエンジニアなどを絶賛募集していますので、もしご興味があれば是非エントリーをご検討ください。
*1:Wang, Yan, et al. "Pseudo-lidar from visual depth estimation: Bridging the gap in 3d object detection for autonomous driving." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.
*2:https://youtu.be/hx7BXih7zx8
*3:Xu, Danfei, Dragomir Anguelov, and Ashesh Jain. "Pointfusion: Deep sensor fusion for 3d bounding box estimation." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.
*4:http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PG01&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.html&r=1&f=G&l=50&s1=%2220200005485%22.PGNR.&OS=DN/20200005485&RS=DN/20200005485
*5:Qi, Charles R., et al. "Frustum pointnets for 3d object detection from rgb-d data." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
*6:https://medium.com/lyftlevel5/leveraging-early-sensor-fusion-for-safer-autonomous-vehicles-36c9f58ddd75
*7:Vora, Sourabh, et al. "Pointpainting: Sequential fusion for 3d object detection." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.