AI

3次元点群処理の技術とPythonライブラリまとめ(初級編)

AMBLでデータアナリストをしている「べあ」です。好きな色は「レグホーン」です。
普段は点群データを扱った研究開発をしています。
今日は私が業務で使っている「3次元点群」とは何か?どんなことができるのか?3次元点群データとその要素技術、Pythonで扱うためのライブラリを紹介します。
この記事は、QiitaのAMBL株式会社 Advent Calendar 2022に投稿した記事を再編集したものです。AMBLのAI開発にご興味をお持ちいただけたら、ぜひQiitaのAMBL株式会社 Advent Calendar 2022もご覧ください。

3次元点群とは?

3次元点群データとは、LiDARなどの3次元測量センサによって得られた 3 次元位置情報(X,Y,Z)を持った点の集合を指します。
自動運転の分野では道路や周囲の物体の検出、土木や建設分野では3Dモデルの作成や測量のために用いられています。

3次元点群の処理と要素技術

画像処理には「ハイパス/ローパス」などを用いたフィルタリング、AIを使用した物体検出がありますが、点群処理にも様々な処理があります。

ここでは代表的な点群処理のタスクと、多くの処理技術の中から、私が使用した(調べたこと)ことのある技術や代表的な手法を独断と偏見で選んだ使いやすい技術を各2つ紹介していきます。

従来手法ディープラーニング, 機械学習
フィルタリングノイズ除去・Radius based outlier filter [Code]
→ 球の半径内にある点の個数で判断 

・Statics based outlier filter [Code]
→ k近傍点との距離の平均から判断
・PointCleanNet [Paper]
→PCPNetを応用した深層学習によるノイズ除去モデル

・DMR Denoise [Paper]
→ サブサンプル点およびその近傍特徴から、ノイズの多い点群特徴を学習。教師なし教師ありのどちらにも対応
ダウンサンプリング・Farthest Point Sampling [Code]
→ 遠い点からサンプリング

・Voxel grid Sampling [Code]
→ グリッド内の点の重心点をサンプリング
・Learning to Sample [Paper]
→ PointNetを基本構造としたサンプリングする点を生成するネットワーク

・Sample Net [Paper]
→ Learning to Sampleの応用
アップサンプリング・Edge Aware resampling [Paper]
→ エッジと法線を利用したアップサンプリング

・Upsampling using Voronoi diagram[Paper]
→ ボロノイ図を利用したアップサンプリング
・EC-Net [Paper]
→ Edge Aware resamplingをネットワークの学習に応用

・PU-GAN [Paper]
→ GAN(敵対的生成ネットワーク)を応用
特徴点・ISS [Code]
→ 距離によって重み付けして計算

・Harris-3D [Paper]→ Harrisコーナー検出の3次元点群への応用
・3DFeatNet [Paper]
→ キーポイント検出器と特徴量を弱教師あり学習で求める

・USIP [Paper]
→ 教師なしのキーポイント検出
レジストレーション・ICP [Code]
→ 点群の剛体変換を求めて繰り返すことで一致させる

・CPD [Paper]
→ 確率モデルを使用したアプローチ
・PointNet LK [Paper]
→ LK法にPointNetを適用したネットワーク

・DCP [Paper]
→ DGCNNなどでエンコードし,transformerで対応付けする
分類 / セグメンテーション・PointNet [Paper]
→ 後発の研究にも大きな影響を与えた点群処理における代表的なモデル 

・Point Transformer [Paper]
→ Transformerのアイデアを応用したモデル

・RandLA-Net [Paper]
→ 効率的に演算するためのランダムサンプリングと局所的な特徴を抽出するLocal Feature Aggregationからなるモデル

・KPconv [Paper]
→ 点群の効果的な畳み込みを用いたモデル
物体検出・PointPillars [Paper]
→ 点群をPillarという特徴に変換することで高速な物体検出が可能

・VoteNet [Paper]
→ 物体の中心をハフ変換の投票メカニズムの応用で予測し、物体を検出

フィルタリング/ノイズ除去

点群データの前処理として、ノイズの検出と除去をします。
ノイズ除去を行うことで、点群解析の精度向上が期待できます。

ノイズ除去の例↓[参考文献]

ダウンサンプリング

元の点群の表現を維持したまま点の数を減らすことで、冗長性を排除してメモリや計算コストの効率化を図ります。

ダウンサンプリングの例↓[参考文献]

アップサンプリング


欠けている情報や、スパースな点群を補完するように点の数を増やします。

PU-GANによるアップサンプリングの例↓[参考文献]

特徴点抽出

点群の中から、物体を表現する重要な点をエッジや周囲との点から検出します。
レジストレーションや学習用の教師データとして使用されます。

USIPによる特徴点検出の例↓[参考文献]

レジストレーション

複数の点群をひとつの点群として扱うために、レジストレーション(位置合わせ)を行います。LiDARなど広範囲のデータを取得した際に全体を再現するために使用される技術です。

LiDARデータのレジストレーション例↓[参考文献]

分類/セグメンテーション

画像処理のクラス分類やセグメンテーションと同様に、点群処理においてもPointNetの発表以降、多くの深層学習モデルを用いた分類やセグメンテーションの技術が発表されました。

PointNetによる分類とセグメンテーション↓[参考文献]

物体検出

点群データから、人や自動車などのクラスと位置(3Dバウンディングボックス)を検出します。

PointPillarsによる物体検出↓[参考文献]

■Pythonの点群処理用ライブラリ

Pythonの点群処理用ライブラリを種類ごとにいくつか紹介します。

点群処理全般

・Open3D [github]

ノイズ除去やレジストレーション、可視化まで点群処理で必要なことは大体カバーしているライブラリです。

・Python-PCL  [github]

pointcloud library(pcl)のPythonバージョンです。

・Pyntcloud [github]

Open3Dの点群処理とPyvistaの可視化モジュールが一緒になっているライブラリです。

機械学習、ディープラーニング系

・Open3D-ML [github]

Open3Dの機械学習応用版で、Open3Dの前処理なども合わせて使用できます。

・torch-points3d [github]

分類、セグメンテーション、レジストレーション、物体検出が実行できます。
PointNet、RandLA-Net、VoteNetなど多くのモデルがあります。

・MMDetection3D [github]

物体検出に特化したライブラリで、VoteNet、 PointPillarsなどの物体検出モデルがあります。

可視化系

・Pyvista [github]

pythonでVTKを扱うためのライブラリです。

VTK,、STL、 OBJ,、PLYファイルへメッシュとして出力可能です。

・Plotly[github]

ブラウザベースの Python 用グラフ描画ライブラリです。

・K3D [github]

Jupyter notebook を拡張した3Dデータ可視化ライブラリです。

■まとめ

今回は3次元点群データとその要素技術、Pythonで扱うためのライブラリを紹介しました。

3次元点群データは多くの分野で活用されており、レーザーセンサで地上の3次元点群データを取得するだけでなく、ソナーを使って水中の点群データを取得して分析することもできます。

最近はiPhoneにも点群データを取得できるLiDARが搭載されていたり、点群を手軽に扱える便利なライブラリも沢山出てきましたので、みなさんもぜひ触れてみてください

*SEO対策キーワード
三次元データ編集,三次元データ活用,三次元点群処理,三次元データファイルの作成,三次元データ群 Python,3次元データ編集,3次元データ活用,3次元点群処理,3次元データファイルの作成,3次元データ群 Python,

あなたも、AMBLで一緒に働きませんか?

AMBLは事業拡大に伴い、一緒に働く仲間を通年で募集しています。

データサイエンティスト、Webアプリケーションエンジニア、AWSエンジニア、ITコンサルタント、サービス運用エンジニアなどさまざまな職種とポジションで、自分の色を出してくださる方をお待ちしています。ご興味のある方は、採用サイトもご覧ください。

●AMBL採用ページ

新卒メンバーインタビュー 

-中途メンバーインタビュー 

-プロジェクトストーリー (プロジェクトでの実績/苦労エピソード)

●募集ページ

プリセールス/ エンジニア/ クリエイター/ データサイエンティスト /営業・コンサルタント /コーポレート /サービス企画 /教育担当