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に実装された平面検出機能の
    紹介

    View Slide

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

    View Slide

  3. copyright©2023 DataLabs, Inc. all rights reserved. 3
    自己紹介
    ● Twitter: @Sato0323D
    ● LinkedIn: https://www.linkedin.com/in/daisukesato0323/
    ● 佐藤大輔
    ○ 37歳
    ○ DataLabsのCTO
    ○ 広島県尾道市出身
    ○ 京都大学で物理の博士号取得

    View Slide

  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つの軸にして転職先を探した

    View Slide

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

    View Slide

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

    View Slide

  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)と
    、効率が良い

    View Slide

  8. copyright©2023 DataLabs, Inc. all rights reserved. 8
    1. octreeを使って点群を小領域に分割
    ● cellが ε = 0.1% * (点の総数: n) 以下の点を含むようになるまでoctreeで
    領域を分割する
    Open3Dに実装された平面検出機能の紹介

    View Slide

  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に実装された平面検出機能の紹介

    View Slide

  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に実装された平面検出機能の紹介

    View Slide

  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に実装された平面検出機能の紹介

    View Slide

  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に実装された平面検出機能の紹介

    View Slide

  13. copyright©2023 DataLabs, Inc. all rights reserved. 13
    1.と2.の結果
    領域分割したため、
    ● planar patchの間に空隙(平面とみなされてない点)ができている
    ○ →3. どのplanar patchにも属してない点を各patchに取り込む
    ● 同一の平面を別のplanar patchとして検出している。
    ○ →4. mergeして、同一の平面にする。
    Open3Dに実装された平面検出機能の紹介

    View Slide

  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に実装された平面検出機能の紹介

    View Slide

  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可

    View Slide

  16. copyright©2023 DataLabs, Inc. all rights reserved. 16
    Open3Dに実装された平面検出機能の紹介
    結果
    ● 以下のデータで検証した
    ○ Computer
    ■ ほとんど平面で構成されている、きれ
    いなデータ
    ○ Plant
    ■ 平面の他に円柱など、曲面で構成され
    ている形状が多い。実世界ででくわす
    点群に近い

    View Slide

  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だと仕方ない気がする

    View Slide

  18. copyright©2023 DataLabs, Inc. all rights reserved. 18
    Open3Dに実装された平面検出機能の紹介
    他の手法と比べて、
    ● Recallは一番良い(検知漏れ:False negativeが少ない)
    ● F1-scoreは他の手法より劣る
    ● 速度はそこそこ
    検出結果を見た感じ、
    ● 面積の大きい平面は正しく検出できている
    ● 平面でないobjectを誤検知してる(False positive)
    ○ gapを頑張ってmergeしすぎ
    ● 曲面を平面と誤検知してる(False positive)

    View Slide

  19. copyright©2023 DataLabs, Inc. all rights reserved. 19
    対象点群
    ● 取得に使ったセンサー:地上レーザーか何か(iPadとかの安いものではない)
    ● ノイズ:かなり少ない
    ● 点の数:約130万点
    ● ファイルサイズ:33.9 MB
    Open3Dに実装された平面検出機能の紹介
    ● 点群データご提供:株式会社草野測器社様
    ● フィールド:福島ロボットテストフィールド
    実データに適用してみた

    View Slide

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

    View Slide

  21. copyright©2023 DataLabs, Inc. all rights reserved. 21
    Open3Dに実装された平面検出機能の紹介
    ● 他の角度
    入力点群 検出された平面
    ● False positive
    ● True positive
    ● False negative (面積の
    小さい平面が検出され
    ていない)
    ● 長方形でない平面も長方形として検出される(当然だけど)

    View Slide

  22. copyright©2023 DataLabs, Inc. all rights reserved. 22
    Open3Dに実装された平面検出機能の紹介
    ● 他の角度
    入力点群 検出された平面
    ● True positive

    View Slide

  23. copyright©2023 DataLabs, Inc. all rights reserved. 23
    Open3Dに実装された平面検出機能の紹介
    ● 他の角度
    入力点群
    ● True positive
    検出された平面

    View Slide

  24. 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を抑えるためには、後処理を頑張った方が良さそう

    View Slide

  25. 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は減った(ただし面積を過大に評価)
    変化なし

    View Slide

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

    View Slide

  27. copyright©2023 DataLabs, Inc. all rights reserved. 27
    Open3Dに実装された平面検出機能の紹介
    書いたコード
    公式チュートリアルのまんまですが...
    前処理
    (法線を計算)
    平面検出
    後処理
    (可視化のため
    に平面のメッシ
    ュを作成)
    とても簡単!

    View Slide

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

    View Slide

  29. copyright©2023 DataLabs, Inc. all rights reserved. 29
    Open3Dに実装された平面検出機能の紹介
    ● 描画用のmethodを実行
    ● 描画対象に入力点群を追加
    ● callback関数を追加
    ○ 平面検出
    ○ configをGUIで変更
    ○ 検出された平面をCAD出力
    ● 平面検出callback関数
    ○ 検出された平面を描画対象に追加

    View Slide

  30. copyright©2023 DataLabs, Inc. all rights reserved. 30
    まとめ
    Open3Dに新しく実装された (ver: 0.17.0) 点群から平面を検出する手法を紹介した
    ● アルゴリズムの紹介
    ○ ノイズに対してrobust
    ○ パラメータの調整をあまりしなくていい
    ○ 計算効率が高い
    ● 実データに適用した結果
    ○ 実際のアプリケーションにするには、いい感じの前処理・後処理を開発するのが必要そう
    ○ パラメータチューニングの労力があまりいらないのはありがたい
    ○ 速度も確かに結構良い
    ● 書いたcode snippet
    ○ 平面検出処理
    ○ Open3D web visualizer

    View Slide

  31. 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月時点)

    View Slide