Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Open3Dに実装された平面検出機能の紹介

 Open3Dに実装された平面検出機能の紹介

Open3Dは様々な点群処理をPythonで書くためのライブラリであり、幅広く使われています。
最近(2023年3月)、点群から平面検出を行うmethodが新しく実装されました。
今回の発表では、使われているアルゴリズムと、実際に建築・土木業界の業務で使われるような点群に上記のmethodを適用した時の結果を紹介します。

DataLabs inc.

May 30, 2023
Tweet

More Decks by DataLabs inc.

Other Decks in Research

Transcript

  1. copyright©2023 DataLabs, Inc. all rights reserved. 1 佐藤 大輔 DataLabs株式会社

    2023/05/27 Open3Dに実装された平面検出機能の 紹介
  2. copyright©2023 DataLabs, Inc. all rights reserved. 2 発表内容 • 自己紹介

    • DataLabsの紹介 ◦ 会社概要 ◦ 当社の3Dサービス: Modely • Open3Dに実装された平面検出機能の紹介 ◦ Open3Dって? ◦ アルゴリズム紹介 ◦ 実データに適用してみた • まとめ
  3. copyright©2023 DataLabs, Inc. all rights reserved. 3 自己紹介 • Twitter:

    @Sato0323D • LinkedIn: https://www.linkedin.com/in/daisukesato0323/ • 佐藤大輔 ◦ 37歳 ◦ DataLabsのCTO ◦ 広島県尾道市出身 ◦ 京都大学で物理の博士号取得
  4. copyright©2023 DataLabs, Inc. all rights reserved. 4 自己紹介 • 5年間海外でポスドク

    ◦ 分野は理論物理 • これは食えないなと思い、日本に戻ってAIベンダーに就職、4年間働く ◦ 受託開発、PoC、R&D ▪ 分野は画像認識、3Dデータ処理、ロボットアプリ ◦ 後半2年はCTO • 製品開発とそれを軸にしたR&Dがやってみたくなり、DataLabsにCTOと して転職。今1年ほど働いたところ。 ◦ 3Dを続けたかったので、それを1つの軸にして転職先を探した
  5. copyright©2023 DataLabs, Inc. all rights reserved. 5 DataLabsの紹介 • DataLabs:

    建設・土木業界向けに3Dデータ処理を行うSaaSを提供する スタートアップ ◦ 創業は2020年 ◦ 社員は20人弱くらい ◦ 資金調達済 • エンジニアは半分以上が外国人(日本語はできない) ◦ 開発チームのコミュニケーション・ドキュメントは完全英語化済 • 点群から3Dモデルを生成する手法について、東大と共同研究中 会社概要 • iPadのLiDARなどで撮影した点群から鉄筋の 3Dモデルを生成する • 円柱のパラメトリックモデルなので、鉄筋間 の距離計算が容易にできる • その情報を使い、配筋検査用の帳票を自動で 出力する • 維持管理用に、3DCADファイルも出力できる Before After 当社の3Dサービス:
  6. copyright©2023 DataLabs, Inc. all rights reserved. 6 Open3Dに実装された平面検出機能の紹介 Open3Dって? •

    3Dデータ処理用のOSSライブラリ • 実装はC++だが、pythonから呼び出して使える ◦ パフォーマンスとアプリケーションへの組み込みやすさを両立 ◦ 点群処理の実装工数がとても少なくできる • 公式チュートリアルがすごいわかりやすい • 日本語の解説資料は以下がオススメ ◦ 秋月先生のSSII2018での講演 ◦ 玉木先生の講演 ◦ 金崎・秋月・千葉先生の書籍「詳解 3次元点群処理 Pyt honによる基礎アルゴリズムの実装」 最近点群から平面を検出する新しい手法が実装された Hough変換やRANSACなどの従来手法に比べて、 • ノイズに対してrobust • パラメータの調整をあまりしなくていい • 計算効率が高い
  7. copyright©2023 DataLabs, Inc. all rights reserved. 7 アルゴリズム紹介 Open3Dに実装された平面検出機能の紹介 Ref:

    A. Araújo and M. Oliveira, A robust statistics approach for plane detection in unorganized point clouds, Pattern Recognition, 2020 1. octreeを使っ て点群を小領 域に分割 2. leaf nodeから順 に平面かどうか判 定 3. 平面の間隙を埋 めるため、どの planar patchにも属 してない点を各 patchに取り込んで 行く 4. planar patchのう ち、同一平面の一 部と判定されたも のをmergeする 計算量は O(n log n)と 、効率が良い
  8. copyright©2023 DataLabs, Inc. all rights reserved. 8 1. octreeを使って点群を小領域に分割 •

    cellが ε = 0.1% * (点の総数: n) 以下の点を含むようになるまでoctreeで 領域を分割する Open3Dに実装された平面検出機能の紹介
  9. copyright©2023 DataLabs, Inc. all rights reserved. 9 2. leaf nodeから順に平面かどうか判定

    • 領域に含まれる点から平面の候補を作成する: ◦ C: 平面上の1点は全ての点の座標のmedian ◦ N: 平面の法線は全ての点の法線のmedian (normalizeはする) • meanではなくmedianを使うのは、outlier (実際の点群にはほぼ必 ずnoiseが載っている!)の影響を軽減するため C N Open3Dに実装された平面検出機能の紹介
  10. copyright©2023 DataLabs, Inc. all rights reserved. 10 T1: Plane-sample distance

    test C Pi di N • 領域に含まれる点から平面候補への距離 (di )を計算 • inlier interval (ID )を計算 ◦ meanではなくmedianを使うのと同様、standard deviationに対応する量 (Median Absolute Deviation)を使う ▪ 正規分布の時にstdに一致するよう、k=1.4826 とする ◦ 正規分布の時に3σ区間に一致するよう、α=3とする • ID の上限がinlier conditionを決める:Maximum DIstance to Plane (MDP) Open3Dに実装された平面検出機能の紹介
  11. copyright©2023 DataLabs, Inc. all rights reserved. 11 • ノイズが激しい場合は、この上限は大きすぎるかもしれな いので、以下の処理をする:

    ◦ Nに直交する単位ベクトル(U, V)を作る ◦ U, V方向の幅(w, l)を計算 ◦ それからベクトルFを計算 ◦ FとNの角度(θ)を計算 ▪ 平面でない点群の場合、MDPが大きくなるの で、θは小さくなる ◦ θがthreshold以上だと平面とみなす ▪ threshold = 75 [deg]が良いらしい U V • 以上の処理では、パラメータチューニングがほぼ不要であ った ◦ データの分布からinlier intervalを求めたため、デー タ分布に合わせて多数のパラメータを決める必要が ない Open3Dに実装された平面検出機能の紹介
  12. copyright©2023 DataLabs, Inc. all rights reserved. 12 T2: Plane-sample normal

    deviation test T3: Outlier percentage test Ni N • 各点の法線 (Ni )と、平面候補の法線のなす角(Φi )を求める • MADを使ってinlier intervalを求める ◦ 上限がMaximum Normal Deviation (MND) • MNDがthreshold以下であれば平面とみなす ◦ threshold = 60 [deg]が良いらしい • outlierが多すぎる平面候補は破棄する ◦ サンプルのうち25%以上が2つのinlier intervalの外側にあるものは 、平面とはみなさない Open3Dに実装された平面検出機能の紹介
  13. copyright©2023 DataLabs, Inc. all rights reserved. 13 1.と2.の結果 領域分割したため、 •

    planar patchの間に空隙(平面とみなされてない点)ができている ◦ →3. どのplanar patchにも属してない点を各patchに取り込む • 同一の平面を別のplanar patchとして検出している。 ◦ →4. mergeして、同一の平面にする。 Open3Dに実装された平面検出機能の紹介
  14. copyright©2023 DataLabs, Inc. all rights reserved. 14 3. 平面の間隙を埋めるため、どのplanar patchにも属してない点を各patchに取り込んで行く

    • 点群全体に対して、neighborhood graph Gを作る ◦ k-nearest neighbor法を使う(k=50) • inlier conditionを満たすものを取り込む ◦ 平面との距離がMDP以下 ◦ 法線と平面の法線のなす角がMND以下 Open3Dに実装された平面検出機能の紹介
  15. copyright©2023 DataLabs, Inc. all rights reserved. 15 4. planar patchのうち、同一平面の一部と判定されたものをmergeする

    • 2つのpatchをmergeする条件 ◦ 隣接している(neighborhood graph Gが2つのpatchの要素をつな ぐedgeを含む) ◦ 法線が近い(なす角がMNDのmax以下) ◦ 片方のpatchの点のうち少なくとも1つがもう片方のpatchのinlier conditionを満たす Open3Dに実装された平面検出機能の紹介 隣接してない 法線が違う inlier condition 満たさない 条件を全て満た すのでmerge可
  16. copyright©2023 DataLabs, Inc. all rights reserved. 16 Open3Dに実装された平面検出機能の紹介 結果 •

    以下のデータで検証した ◦ Computer ▪ ほとんど平面で構成されている、きれ いなデータ ◦ Plant ▪ 平面の他に円柱など、曲面で構成され ている形状が多い。実世界ででくわす 点群に近い
  17. copyright©2023 DataLabs, Inc. all rights reserved. 17 • 計算時間 (T):

    1点あたり0.0021 [ms] ◦ Boilar room data (n = 6 * 10^6)だと、12 [s]。 • 精度指標: ◦ Number of detected planes/total number of planes (#) ◦ Precision (P) ◦ Recall (R) ◦ F1-score (F1) ◦ このあたりは機械学習の論文とかでもおなじみのもの だが、点群から平面を検出するタスクに使うために工 夫されていて面白い Open3Dに実装された平面検出機能の紹介 他の手法と比べて、 • F1-scoreは一番いい(PとRのバランスが取れている) • 速度はそこそこ 検出結果を見た感じ、 • 全体的に全ての平面を検知できている • gapのmergeには失敗している ◦ が、これだけ大きいgapだと仕方ない気がする
  18. copyright©2023 DataLabs, Inc. all rights reserved. 18 Open3Dに実装された平面検出機能の紹介 他の手法と比べて、 •

    Recallは一番良い(検知漏れ:False negativeが少ない) • F1-scoreは他の手法より劣る • 速度はそこそこ 検出結果を見た感じ、 • 面積の大きい平面は正しく検出できている • 平面でないobjectを誤検知してる(False positive) ◦ gapを頑張ってmergeしすぎ • 曲面を平面と誤検知してる(False positive)
  19. copyright©2023 DataLabs, Inc. all rights reserved. 19 対象点群 • 取得に使ったセンサー:地上レーザーか何か(iPadとかの安いものではない)

    • ノイズ:かなり少ない • 点の数:約130万点 • ファイルサイズ:33.9 MB Open3Dに実装された平面検出機能の紹介 • 点群データご提供:株式会社草野測器社様 • フィールド:福島ロボットテストフィールド 実データに適用してみた
  20. copyright©2023 DataLabs, Inc. all rights reserved. 20 デフォルトのパラメータで平面検出を行った結果 • 実行時間:1.4

    [s] ◦ 点の数で割ると0.001 [ms] ◦ 論文の結果とオーダーは一致 Open3Dに実装された平面検出機能の紹介 入力点群 検出された平面 • 地面や壁、道路面など、面積が大きい平面は問題なく検出で きている • 長方形でない平面も長方形として検出される(当然だけど) • False positive (gapを頑張ってmergeしすぎ) → inlierの点の数でfilterする、などの後処理すると改善するかも
  21. copyright©2023 DataLabs, Inc. all rights reserved. 21 Open3Dに実装された平面検出機能の紹介 • 他の角度

    入力点群 検出された平面 • False positive • True positive • False negative (面積の 小さい平面が検出され ていない) • 長方形でない平面も長方形として検出される(当然だけど)
  22. copyright©2023 DataLabs, Inc. all rights reserved. 24 Open3Dに実装された平面検出機能の紹介 パラメータを振ってみた T2:

    Plane-sample normal deviation test • threshold: 60 -> 30 [deg] Ni N 特に変化なし T1: Plane-sample distance test • threshold: 75 -> 85 [deg] 斜面の検出精度が悪化 False positiveを抑えるため、平面検出の条件を厳しくする T3: Outlier percentage test • threshold: 0.75 -> 0.9 特に変化なし T1-3を組み合わせても変化なし。 False positiveを抑えるためには、後処理を頑張った方が良さそう
  23. copyright©2023 DataLabs, Inc. all rights reserved. 25 Open3Dに実装された平面検出機能の紹介 パラメータを振ってみた T2:

    Plane-sample normal deviation test • threshold: 60 -> 80 [deg] Ni N T1: Plane-sample distance test • threshold: 75 -> 50 [deg] False negativeを抑えるため、平面検出の条件をガバガバにする T3: Outlier percentage test • threshold: 0.75 -> 0.5 T1-3を組み合わせてもT1のような結果になる。 パラメータを変えることでFalse negativeだけを抑えるのは難しそう(T2のような結果になる) 何故か逆にpositiveが減った(True/False両方) False negativeは減った(ただし面積を過大に評価) 変化なし
  24. copyright©2023 DataLabs, Inc. all rights reserved. 26 Open3Dに実装された平面検出機能の紹介 所感 •

    パラメータチューニングの労力があまりいらないのはありがたい • 速度も結構良い • 実際のアプリケーションにするには、いい感じの前処理・後処理を開発するのが必要そう
  25. copyright©2023 DataLabs, Inc. all rights reserved. 27 Open3Dに実装された平面検出機能の紹介 書いたコード 公式チュートリアルのまんまですが...

    前処理 (法線を計算) 平面検出 後処理 (可視化のため に平面のメッシ ュを作成) とても簡単!
  26. copyright©2023 DataLabs, Inc. all rights reserved. 28 Open3Dに実装された平面検出機能の紹介 • Open3Dのweb

    visualizerで簡易・ウェブブラウザ上 で動くinteractive GUIが作れる • デモを作ったり、パラメータチューニングに便利 • 公式チュートリアルに情報が少ないのが難点... ◦ exampleのコードを見て気合で使い方を推測す るしかない
  27. copyright©2023 DataLabs, Inc. all rights reserved. 29 Open3Dに実装された平面検出機能の紹介 • 描画用のmethodを実行

    • 描画対象に入力点群を追加 • callback関数を追加 ◦ 平面検出 ◦ configをGUIで変更 ◦ 検出された平面をCAD出力 • 平面検出callback関数 ◦ 検出された平面を描画対象に追加
  28. copyright©2023 DataLabs, Inc. all rights reserved. 30 まとめ Open3Dに新しく実装された (ver:

    0.17.0) 点群から平面を検出する手法を紹介した • アルゴリズムの紹介 ◦ ノイズに対してrobust ◦ パラメータの調整をあまりしなくていい ◦ 計算効率が高い • 実データに適用した結果 ◦ 実際のアプリケーションにするには、いい感じの前処理・後処理を開発するのが必要そう ◦ パラメータチューニングの労力があまりいらないのはありがたい ◦ 速度も確かに結構良い • 書いたcode snippet ◦ 平面検出処理 ◦ Open3D web visualizer
  29. copyright©2023 DataLabs, Inc. all rights reserved. 31 DataLabsからのメッセージ • プロダクトが育ったら、さらにエンジニアを採用する予定です。

    ◦ フロントエンドエンジニア ◦ バックエンドエンジニア ◦ リサーチエンジニア • もし弊社に興味をお持ちいただけたら、ぜひ連絡していただきたいです ◦ Twitter: @Sato0323D ◦ LinkedIn: https://www.linkedin.com/in/daisukesato0323/ ◦ HP (DataLabs) : https://www.datalabs.jp/ ◦ LinkedIn (DataLabs) : https://www.linkedin.com/company/datalabs-jp/ ◦ Twitter (DataLabs) : https://twitter.com/DataLabs_PR • 直近(2023年5月時点)ではフルタイムのポジションは募集していませんが、将来の加入の可能性を見据えて副業として 参画するのもOKです ◦ 今回の発表者の佐藤・中野含め、副業→正社員の実績あり • 労働環境 ◦ フルリモート ◦ コミュニケーション(テキスト・オーラル両方)は英語 We are will be hiring !! (2023年5月時点)