Slide 1

Slide 1 text

copyright©2023 DataLabs, Inc. all rights reserved. 1 佐藤 大輔 DataLabs株式会社 2023/05/27 Open3Dに実装された平面検出機能の 紹介

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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可

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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