メインコンテンツ

PointNet++ 入門

PointNet++ は、アンオーガナイズド点群から学習するための一般的なニューラル ネットワーク アーキテクチャです。PointNet++ を使用してセマンティック セグメンテーションを行うと、点群内の各点に対してクラス ラベルを割り当てることができます。また、PointNet++ を使用してオブジェクト分類を行うと、1 つのオブジェクトを含む点群に対して 1 つのクラス ラベルを割り当てることができます。

PointNet++ ネットワークは、点群内の個々の点を階層的に処理します。このネットワークは、PointNet を使用して点クラスターから局所特徴を抽出し、それらの特徴をグループ化して点群全体からより高いレベルの特徴を生成します。

PointNet++ の応用例には次のものがあります。

  • デジタル林業適用向けの木のセグメンテーション。

  • 航空 LiDAR データからの数値地形モデルの抽出。

  • ロボティクスにおける屋内ナビゲーションの知覚。

  • 航空 LiDAR データからの 3 次元都市モデリング。

  • オブジェクト分類。

セマンティック セグメンテーション用 PointNet++ ネットワーク

PointNet++ ネットワークには、集合抽象化モジュールを含む符号化器と特徴伝播モジュールを含む復号化器があります。

集合抽象化モジュールは、一連の点を処理して抽出し、より少ない要素からなる新しい集合を生成します。各集合抽象化モジュールには、サンプリングとグループ化の層に続いて、PointNet 層が含まれています。

  • サンプリングとグループ化の層では、局所的領域の重心を特定してサンプリングを実行します。その後、重心の周囲の近傍点からなる局所的領域の集合を構成してグループ化を実行します。

  • PointNet 層には、畳み込み層、正規化層、ReLU 層の一連の層とその後の最大プーリング層からなる、mini-PointNet ネットワークが含まれます。この層により、局所的領域のパターンが特徴ベクトルに符号化されます。

特徴伝播モジュールは、サブサンプリングされた点を内挿し、それらを集合抽象化モジュールからの点の特徴と連結します。ネットワークは、その後、それらの特徴を unit PointNet ネットワークを通じて渡します。そのネットワークで特徴がさらに処理され、より高いレベルの特徴が生成されます。

つまり、正確なセマンティック セグメンテーションのために、PointNet++ は入れ子構造の分割された入力に PointNet を再帰的に適用してマルチスケールの特徴を抽出します。

PointNet++ ネットワークの作成

点群データをセグメント化するための PointNet++ ネットワークを作成するには、関数 pointnetplusNetwork を使用します。

PointNet++ ネットワークの学習

点群データをセグメント化するための PointNet++ ネットワークに学習させる方法については、PointNet++ 深層学習を使用した航空 LiDAR のセマンティック セグメンテーションを参照してください。

コード生成

PointNet++ ネットワーク用の CUDA® コードを生成する方法については、PointNet++ 深層学習を使用した航空機搭載 LiDAR セマンティック セグメンテーション用のコード生成を参照してください。

オブジェクト分類用 PointNet++ ネットワーク

オブジェクト分類において、PointNet++ は入力点群のグローバルな特徴表現を学習し、そのオブジェクトに対して単一のクラス ラベルを予測します。セグメンテーション ネットワークの符号化器と同様に、分類ネットワークは集合抽象化モジュールを使用して点を階層的に処理し、複数のスケールで点の局所近傍から特徴を学習します。

最後の集合抽象化モジュールの後、ネットワークは学習した特徴を点群全体のグローバルな特徴表現に集約します。その後、ネットワークは全結合層を使用してクラス スコアを計算し、入力点群に対して単一のクラス ラベルを出力します。出力は点ごとのラベルではなく点群全体に対する単一のラベルであるため、特徴伝播モジュール (復号化器) は不要であることに注意してください。

PointNet++ 分類器の作成

点群を分類するための事前学習済みまたは未学習の PointNet++ 分類器を作成するには、pointNetPlusClassifier 関数を使用します。事前学習済み分類ネットワークは、Sydney Urban Objects データ セットの点群データの位置情報のみを使用して学習されています。入力点群には 1 つのオブジェクトのみが含まれていなければならないことに注意してください。

PointNet++ 分類器の学習

PointNet++ 分類器に学習させるには、trainPointNetPlusClassifier 関数を使用します。

点群の分類

入力点群のクラス ラベルを予測するには、pointNetPlusClassifier オブジェクトの classify オブジェクト関数を使用します。入力点群には 1 つのオブジェクトのみが含まれていなければなりません。点群の分類に関する詳細については、Point Cloud Classification Using PointNet++ Deep Learningの例を参照してください。

参照

[1] Qi, Charles R., Li Yi, Hao Su, and Leonidas J. Guibas. ‘PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space’. ArXiv:1706.02413 [Cs], 7 June 2017. https://arxiv.org/abs/1706.02413.

[2] Varney, Nina, Vijayan K. Asari, and Quinn Graehling. ‘DALES: A Large-Scale Aerial LiDAR Data Set for Semantic Segmentation’. ArXiv:2004.11985 [Cs, Stat], 14 April 2020. https://arxiv.org/abs/2004.11985.

[3] De Deuge, Mark, Alastair Quadras, Calvin Hung, and Bertrand Douillard. "Unsupervised Feature Learning for Classification of Outdoor 3D Scans." In Australasian Conference on Robotics and Automation 2013 (ACRA 13). Sydney, Australia: ACRA, 2013.

参考

アプリ

関数

トピック