はじめに
現在主流となっている点群処理モデル**「PointNet」**について解説する。
(なお、PointNetは2017年に提案されたモデルであり、その後さらに精度の高いモデルが多数提案されている。気になる方はこちらを参照。)
また、特に断りのない限り,本記事で使用する画像は、こちらの論文1からの引用。
従来手法: 3次元畳み込みニューラルネットワーク
Volumetric CNN:点群をボクセル化し、一層一層を画像として扱うことで、畳み込みニューラルネットワークの入力とする。
各ボクセルは 2 値で表現し,メッシュからボクセルに変換する際にボクセル内にデータがあるかどうかで 0 か 1 の値を決めて表現する。
Volumetric CNNの欠点として、ボクセル化する際に、点群データの空間特性が必然的に変化し、物体の凹凸表現が欠損してしまうことが挙げられる。
参照:VoxNet: A 3D Convolutional Neural Network for Real-Time Object Recognition2
PointNet
PointNetは、クラス分類、セグメンテーション、検出など応用範囲が広く、与えられた点群全体に対してクラス分類を行うこともできるし、点群をセグメントに分割し、それぞれのセグメントに対してラベル付けすることもできる。
先述したVolumetric CNNで起きる問題に対し、PointNetは点群の空間特性を最大限残すための独自の点群処理方式を導入した。これにより、従来手法を超えるパフォーマンスを叩き出した。
PointNetで提案された点群処理方法の特徴は次の2点である:
- 特徴その1: 頂点インデックスの順番による影響をなくす
- 特徴その2: 回転による影響をなくす
本記事では、上記の課題について、PointNetがどのようなアプローチを取ったかを解説する。
PointNetの構造
まずは、ネットワーク全体の構成について。
詳しい説明は省略するが、上段でクラス分類を行い、下段ではsemantic segmentationやpart segmentationを行う。
特徴その1. 頂点インデックスの順番による影響をなくす
参照:Point Cloud Data Using Deep Learning3
上図のように、点群データは頂点インデックスを変えても本質的には何も変わらないため、データの順番に左右されないようなモデルを構築する必要がある。
そのための方法として、以下の3つが挙げられる。
-
一定の規則に従って、頂点をソートし直す
⇛ 高次元空間での並べ替えは必ずしも上手くいかないのでダメ -
Data augmentation(データ拡張)によって、頂点の順番に影響を受けにくいモデルを作る
⇛ データが爆発的に増えて現実的ではない(頂点がN個あったら、組み合わせはN!通り) -
対称関数を使ったモデルを組む
⇛ 対称関数(symmetric function)とは...?
対称関数とは
対称関数とは、変数の順番を入れ替えても値が変わらない関数のこと。
例として、以下のような関数がある。
\begin{aligned}
f(x_1, x_2, ..., x_n) &= x_1 + x_2 + \cdots + x_n \\
f(x_1, x_2, ..., x_n) &= \max\{x_1, x_2, ..., x_n\}
\end{aligned}
例えば、$x_1$と$x_2$を入れ替えても、値は変わらないので、対称関数と言える。
PointNetではこの対称関数の考え方を応用しており、全ての頂点に対して同じ重みの多層パーセプトロンをかけたり、プーリング層ではMax poolingを行ったりすることで全ての頂点を平等に扱うことに成功している。
特徴その2. 回転による影響をなくす
"T-Net"と呼ばれるネットワークを組み込むことで、アフィン変換行列を推定し、その変換行列をかけることで回転による影響をなくすようにしている。
まとめ
最近の点群処理でよく使われる深層学習モデル PointNet について、解説した。
対称関数やアフィン変換行列を用いた点群処理モデル特有の工夫を説明した。
PointNetは、空間の細かい情報が抜けやすかったり、点密度を均一にすると精度が落ちたりといった欠点があったが、それを解決する手法 PointNet++ も提案されているので、興味があればぜひ論文を読んでいただきたい。
おわりに
ヒトやモノをデータ化&解析してみたい、という方。
3D技術と深層学習を組み合わせて、何か面白いサービスを作ってみたい!、という方。
弊社では一緒に働いてくれる仲間を大募集しています。
ご興味がある方は下記リンクから是非ご応募ください!
https://about.sapeet.com/recruit/