見出し画像

点群×ディープラーニング【入門】

「点群」といえば、みなさんは何を思い浮かべますか?
点群(深度データ)を使った身近な例ですと、iPhoneの顔認証システムがあります。赤外線カメラから得られる深度マップを解析することで、ユーザーの顔認証を行っています。

点群は、画像が持つ2次元の情報よりさらに多い3次元の情報を持っており、 "あと数年もすれば画像解析技術を超えるのでは"、と将来が期待されている分野の一つです。

ただ、点群を扱う上で、点群特有の悩みも多々あり、課題が山積みなのが現状です。今日はこの記事を読んでいただくことで、点群特有の悩みとは何なのか、どうやって解決していこうとしているのかをちょっとだけ知ることができます!

今回は、現在主流となっている点群処理モデル「PointNet」について解説します。(なお、PointNetは2017年に提案されたモデルで、その後さらに精度の高いモデルが多数提案されてます。気になる方はこちらをご参照ください!)

また、特に断りのない限り,本記事で使用する画像は、こちらの論文から引用しています。

従来手法: 3次元畳み込みニューラルネットワーク

Volumetric CNN:点群をボクセル化し、一層一層を画像として扱うことで、畳み込みニューラルネットワークの入力します。

各ボクセルは 2 値で表現し,メッシュからボクセルに変換する際にボクセル内にデータがあるかどうかで 0 か 1 の値を決めて表現します。

Volumetric CNNの欠点として、ボクセル化する際に、点群データの空間特性が必然的に変化し、物体の凹凸表現が欠損してしまうことが挙げられます。

画像1

参照:VoxNet: A 3D Convolutional Neural Network for Real-Time Object Recognition

PointNet

画像2

PointNetは、クラス分類、セグメンテーション、検出など応用範囲が広く、与えられた点群全体に対してクラス分類を行うこともできますし、点群をセグメントに分割し、それぞれのセグメントに対してラベル付けすることもできます。

先述したVolumetric CNNで起きる問題に対し、PointNetは点群の空間特性を最大限残すための独自の点群処理方式を導入しました。これにより、従来手法を超えるパフォーマンスを叩き出しました!

PointNetで提案された点群処理方法の特徴は次の2点です:

・ 特徴その1: 頂点インデックスの順番による影響をなくす
・ 特徴その2: 回転による影響をなくす

上記の課題について、PointNetがどのようなアプローチを取ったかを解説していきます。

PointNetの構造

まずは、ネットワーク全体の構成について。
詳しい説明は省略しますが、PointNetでは、上段でクラス分類を行い、下段ではsemantic segmentationやpart segmentationを行っています。

画像3


特徴その1. 頂点インデックスの順番による影響をなくす

画像4

参照:Point Cloud Data Using Deep Learning

上図のように、点群データは頂点インデックスを変えても本質的には何も変わらないので、データの順番に左右されないようなモデルを構築する必要です。


そのための方法として、以下の3つが挙げられます。

・一定の規則に従って、頂点をソートし直す 
 ⇛ ❌ 高次元空間での並べ替えは必ずしも上手くいかないのでダメ
・Data augmentation(データ拡張)によって、頂点の順番に影響を受けにくいモデルを作る 
 ⇛ ❌ データが爆発的に増えて現実的ではない(頂点がN個あったら、組み合わせはN!通り....)
・対称関数を使ったモデルを組む 
 ⇛ ⭕ 対称関数(symmetric function)とは...?ここがミソです^^

対称関数とは

対称関数とは、変数の順番を入れ替えても値が変わらない関数のことです。

画像5

例えば、x1とx2を入れ替えても、値は変わらないので、対称関数と言えます。

PointNetではこの対称関数の考え方を応用していて、全ての頂点に対して同じ重みの多層パーセプトロンをかけたり、プーリング層ではMax poolingを行ったりすることで全ての頂点を平等に扱うことに成功しています!

特徴その2. 回転による影響をなくす

"T-Net"と呼ばれるネットワークを組み込むことで、アフィン変換行列を推定し、その変換行列をかけることで回転による影響をなくすようにしています。

画像6

まとめ

最近の点群処理でよく使われる深層学習モデル PointNet について、解説しました。
対称関数アフィン変換行列を用いた点群処理モデル特有の工夫を説明しました。

PointNetは、空間の細かい情報が抜けやすかったり、点密度を均一にすると精度が落ちたりといった欠点がありましたが、それを解決する手法 PointNet++ も提案されていますので、興味があればぜひ論文を読んでいただきたいと思います!

おわりに

ヒトやモノをデータ化&解析してみたい、という方。
3D技術と深層学習を組み合わせて、何か面白いサービスを作ってみたい!、という方。

弊社では一緒に働いてくれる仲間を大募集しています。

ご興味がある方は下記リンクから是非ご応募ください!
https://about.sapeet.com/recruit/


※こちらの記事は、同著者によるQiita記事の転載です。

この記事が気に入ったらサポートをしてみませんか?