PointNet

今日は、自動運転やAR等の技術で注目を浴びる点群に対する深層学習(Point Cloud Deep Learning)の元祖といえる、PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation (2017 CVPR)について解説したいと思います。

点群とは

点群は、3次元のオブジェクトの表し方の一つです。具体的には物体を(X,Y,Z)の座標を持つ点が集まったものとしてオブジェクトを表します。

point\_cloud

Figure 1. 点群データ(画像元: Chales, et al. 2017)

美術館が好きな人だと、ジョルジュ・スーラさんの点描画を3次元に拡張したものをイメージするとわかりやすいです。

3次元のオブジェクトは以下のようにも表す事ができます。

3d\_object\_rep

Figure 2. 3次元オブジェクトの表し方(画像元: Chales, et al. 2017)

これらの表し方の中で最も(幾何学的に)重要なのが点群(Point Cloud)です。 それは、LiDARやDepth Sensorで得られる生データに最も近く、また、他の3通りの方法は全てロスなく点群に変換する(Canonial)ことが可能です。

背景とPointNetの凄さ

今までは、点群が3次元上に散らばっているため、直接CNNに入れる事ができず、imageの集合やピクセルを3次元に拡張したVoxelで表すことが一般的でした。

しかし、その方法の課題として物体が存在しないところにも点を割り当てるため、実際のオブジェクトより圧倒的な範囲をカバーする事が必要で、計算量が膨大になってしまうという課題がありました。

これを解決する手法として、PointNetでは点群をそのまま入力として用いる事で、この課題を解決しました。

しかし、点群を入力として用いる事で生じる課題として、

- 点群の入力の順番を変えても結果が変わらないこと

- 近い点同士の関係を保存すること

- 回転移動、並行移動、鏡像変換をしても結果が変わらないこと

の3つの課題をクリアする必要があります。

これらの課題を克服するモデルを提案したことが革新的でした。

モデル

今回の問題設定は、2つのタスクに対応しています。

- 物体分類

- 3D物体のパーツ分類

- Semantic Segmentation(点群に対してオブジェクトのカテゴリーごとに分類)

物体分類は出力として、物体の種類kを、Semantic Segmentationは点の数(N) x カテゴリー数(m)を出力させます。

それでは、上記であげた3つの課題を克服したモデルの中身について説明します。

1つ目の課題: 点群の入力の順番を変えても結果が変わらないこと

これは、点群をモデルに入力する順番には任意性があるため、N個の点群では入力はN!個通りとなります。しかし、入力の方法が変わっても点群が表す物体は全く同じなので、同じ結果を出力する必要(Order Invariant)があります。

これを解決する手法を筆者は3通り考え、最も良い対称性を持つ関数をモデルとして選びました。

それぞれを簡単に述べると、

1. 最初に点群をソートして入力を同じものにする

ソートはデータ数が多くなると、計算が重くなるので却下

2. 点群を点の列とみなして、モデルをRNNにする

しかし、これも点の順番という情報を欠落してしまっている。

3. 対称性を持つ関数を層の最後に入れる

点ごとに操作を行い、さらに順番が変わっても同じ出力を出すMax Poolingを入れる。 また、Max前後の操作は全結合層を用いており、Max Pooling前の全結合は共通の重みを用いています。

symmetry\_func

Figure 3. モデルの基本構造1(画像元: Chales, et al. 2017

3つ目の課題: 回転・並行、鏡像変換に対して不変

まず、点群データを幾何学的な変換後の共通データに変換することを考えます。 幾何学的な変換は全てアフィン変換であらわせ、行列の積で表すことが可能です。

そこでこの変換を行う行列をT-Netの出力として予測しています。得られた行列を元となる点群データにかけることで、幾何学的な変換に対してロバストなモデルを構築しています。さらに、局所的な最適化を行わないように、以下のように変換行列が恒等変換から変わりすぎないように制約を加えています。

t\_net

Figure 4. モデルの基本構造2(画像元: Chales, et al. 2017

2つ目の課題: 局所的かつ全体的な特徴を取得すること

複数回上記の基本構造1と基本構造2を繰り返し、最後にn x 64のデータにMax Poolingをかけ、1 x 64次元にテンソルを変換します。 これをn次元にunsqueezeさせてあげ、一層前のn x 1024次元のテンソルにConcatし、複数の全結合層に通すことで、局所的かつ全体的な特徴を捉えていると筆者は述べています。

seg\_net

Figure 5. モデルの基本構造3 Segmentation Network(画像元: Chales, et al. 2017

全体のモデル

point\_net

これら3つを組み合わせたのが、PointNetです。 Figure 6. モデルの概形 PointNet(画像元: Chales, et al. 2017

実験と結果

3D物体分類

データセットにはModelNet40を用いており、現在のデータセットより少ない40Cateogry, 12311個のCADデータを用いています。

さらに、CADデータはMeshなので表面を1024個Randomにサンプリングを行い、原点から最大の距離でNormalizeさせています。

また、学習中はランダムに回転や平行移動を加えて学習させています。

全体のAccuracyは過去の研究を上回る成果が出た一方で、物体ごとのAccuracyに平均をとったものは、MVCNNというモデルに僅かの差で劣りました。

result1

Figure 7. 結果1(画像元: Chales, et al. 2017)

これに対し、筆者は幾何学的な変換の部分で情報のLossが大きいのではないかと推測しています。

3D物体パーツ分類

ShapeNetという 16881Shapeと16Categoryからなるデータセットを用いています。ほとんどの物体は2個から5個のパーツから構成されています。以下が結果です。

result2

Figure 8. 結果2(画像元: Chales, et al. 2017)

Semantic Semgentation

Stanford 3D semantic parsing datasetというデータセットを用いています。このデータセットは271個の大学の部屋(おそらくStanford大学)をスキャンし、ピクセル毎に13種類のラベルでラベリングされたデータセットです。以下が結果になります。

result3

Figure 9. 結果3(画像元: Chales, et al. 2017)

考察

筆者はさらにGlobal特徴として表されるMax Pool Featureに大きく貢献している Critical Point Setsと、そのMax Pool Featureに成りうるPoint Cloudを可視化することで、Global特徴量の妥当性を主張しています。

analytics1

Figure 10. 分析1(画像元: Chales, et al. 2017)

所感

おそらく、基本構造1のMLP + Max Pooling + MLPの構造を作り出すのが本当に大変だったところではないかなと思います。また、3つのタスクへ容易に応用できること、さらにはGlobal特徴量が有用に働いている事を踏まえると当時のインパクトが計り知れないなと感じています。