こんにちは、カディンチェのエンジニアの板橋です。
普段、私たちはXR(VR/AR/MR)やAI技術を活用した開発を行っていますが、社内では定期的に「AI勉強会」を開催し、エンジニアたちが持ち回りで最新技術や基礎技術の実践報告を行っています。
今回のテーマは「点群(Point Cloud)による分類・検出」です。
自動運転やロボットの「目」として注目されるLiDAR(ライダー)。そこで取得される点群データは、カメラ画像とは全く異なる性質を持っています。
「画像処理なら知ってるけど、点群は難しそう…」
そう思っている方も多いのではないでしょうか。
この記事を読み終えるころには、点群処理をちょっとだけ理解できるだけでなく、Google Colabを使い点群データの分類・検出アルゴリズム(PointNet/PointPillars)も体験でき、画像処理とは異なる3Dデータ処理の世界を実感できるので、ぜひ最後まで読んでみてください!
今回は、点群処理の基礎から実際に動かすまでを、ビジネス職の方にもわかりやすく説明します。
目次
- そもそも点群って何?
- なぜ画像だけでは限界があるのか
- 点群でできる3つのこと
- なぜ点群処理は難しいのか?
- 実践1:PointNetで「分類」してみた
- PointNetとは?
- Google Colabで実験
- 実践2:PointPillarsで「検出」してみた
- PointPillarsとは?
- リアルな自動運転データで実験
- 最後に
- 関連リンク
そもそも点群って何?
点群とは、その名の通り「3D空間に浮かぶ無数の点の集まり」です。
一つ一つの点は、XYZの座標情報(と反射率)の情報を持っています。LiDARなどのセンサーがレーザーを照射し、物体に当たって跳ね返ってくるまでの時間を計測することで、物体までの距離や形状を「点の集合」として記録します。
なぜ画像だけでは限界があるのか
自動運転の世界では、イーロン・マスクが率いるテスラが「カメラ(画像のみ)」のアプローチをとる一方、多くのメーカーは「カメラ + LiDAR(点群)」のアプローチを採用しています。
画像には、奥行き情報がありません。画像認識AIは非常に進化していますが、写真はあくまで2次元であり、そこから距離を推定するのは予測に過ぎません。また、逆光や夜間の暗闇など、光の環境に大きく左右されてしまいます。
一方、点群は「正確な距離」がわかります。そして自らレーザーを出すため、真っ暗闇でも形状を把握できます。それぞれのメリット・デメリットを整理すると以下のようになります。
カメラ画像
【メリット】
・色やテクスチャがわかる
・安価で軽量
・AIモデルが豊富
【デメリット】
・距離推定が不正確(あくまで2次元)
・逆光や悪天候に弱い
点群
【メリット】
・正確な3D座標(距離)
・光条件に左右されない
・立体構造を把握しやすい
【デメリット】
・色情報がない(※反射強度はある)
・センサーが高価
・データがスカスカ(疎)になりがち
実際の開発現場では、これらを組み合わせる「センサーフュージョン」を行い、お互いの弱点を補完し合うのが一般的です。だからこそ、画像だけでなく点群の扱い方も知っておく必要があります。
点群でできる3つのこと
点群データを使ってAIができることは、大きく分けて3つあります。画像AIの処理をご存知の方なら、考え方はほぼ同じです。
- 分類 (Classification)
- 「この点群のカタマリは何?」を当てるタスク。
- 例:この点群データは「車」です。
- 検出 (Detection)
- 「どこに何がある?」を特定するタスク。
- 例:この広い空間の、座標(x,y,z)に「車」があり、あっちに「人」がいます。
- セマンティックセグメンテーション (Semantic Segmentation)
- 「点一つひとつが何?」を塗り分けるタスク。
- 例:この点は道路、この点はガードレール、この点は歩行者…とすべての点にラベルを貼る。
参考:https://www.youtube.com/watch?v=9LIy3hS0lGQ&t=1341s
今回は、この中から「分類」と「検出」を実際に試してみました。
なぜ点群処理は難しいのか?
「画像処理のAI技術をそのまま点群に使えばいいのでは?」と思うかもしれません。しかし、そう簡単にはいかないのです。
最大の壁は、点群データが「順不同(Unordered)」であることです。
画像データは、ピクセルが縦横に規則正しく並んでいます。「右隣のピクセル」や「下のピクセル」には明確な位置関係があります。しかし点群データは、リストの中に座標データ (x, y, z) がバラバラに入っているだけです。
画像処理のAI技術は、特徴をとりだすときに畳み込み処理(CNN)をやるのですが、前提として規則的な配列が必要となります。しかし、点群の場合だと同じようなAI処理が適用できません。
その代わりに、点群は、以下2つの性質をもっています。その性質を利用し、点群専用のアルゴリズムが開発されてきました。
■点同士の関係性:点群は順不同であるものの、各点を空間に配置すると隣接する点同士には関連性が生じる。
■不変性:点群に対して回転や平行移動を加えても、点群のクラス情報や、各点の意味は変わらない。
画像と点群の違い
実践1:PointNetで「分類」してみた
まずは「分類」タスクに挑戦です。「分類」というタスクで一番代表的なアルゴリズムであるPointNetを扱います。
PointNetとは?
2017年に発表された、点群処理の歴史を変えたと言われる画期的な手法です。「データをどんな順番で入れても、結果が変わらない」仕組み(対称関数)を導入し、生の点群データをそのままディープラーニングで扱えるようにしました。
そして、3次元の座標点ひとつひとつを「MLP(多層パーセプトロン)」という層に通して特徴を抽出し、最後にそれらをガチャンと集約して「これは全体として何か?」を判断させています。
Google Colabで実験
今回は誰でも再現できるように、Google Colab上で実装を行いました。
- 使用データセット: ModelNet10(椅子、机、ベッドなど10種類の家具などの3Dデータセット)
- 環境: Google Colab
- 学習時間: 約18分(100エポック)
実際に動かしてみると、わずか18分ほどの学習で、かなり高い精度で「これは椅子」「これはモニター」といった分類ができるようになりました。
▼ 実際に触ってみたGoogle Colabはこちら(エンジニア用のサンプルコード)
上から順に実行していくと実際に「分類」を試せるのでぜひやってみてください!
PointNet 実践ノートブック
実践2:PointPillarsで「検出」してみた
次は、より実用的な「検出」タスクです。自動運転などで「前に車がいる」などの判断するために使われます。こちらも代表的なアルゴリズムであるPointPillarsを扱います。
PointPillarsとは?
2019年に発表された手法で、その名の通り点群を「Pillar(柱)」に見立てて処理します。
3D空間を柱状のグリッドに区切り、その柱ごとの情報を集約することで、「擬似的な2次元画像」に変換してしまいます。一度画像っぽくしてしまえば、あとは高速な画像認識技術(SSDなど)を使って物体検出ができる、という賢いアプローチです。
リアルな自動運転データで実験
実験には、自動運転の研究で有名な「KITTIデータセット」を使用しました。ドイツの街中を走行して取得されたリアルなデータです。
- 使用データセット: KITTI(点群・画像・ラベルデータ)
- 工夫: データ量が多いため、学習データを1/7に間引いて使用
- 学習時間: 約10時間(GitHubの指定トレーニング方法にて)
さすがに学習には時間がかかりましたが、結果は「大体合ってる!」というレベルで検出できました。点群の密度が低い遠くの車や、半分隠れている車もそれなりに検出できており、3D情報の強さを感じます。
PointPillarsの特徴は、処理が非常に高速であること。リアルタイム性が求められる自動運転の現場で重宝されている理由がわかります。
▼ 実際に触ってみたGoogle Colabはこちら(エンジニア用のサンプルコード)
上から順に実行していくと実際に「検出」を試せるのでぜひやってみてください(学習に時間がかかりますが。。)
PointPillars 実践ノートブック
最後に
カディンチェでは、「XR & AI Engineering Firm」として、今回のような基礎技術の探求から、実際の空間スキャン、メタバース基盤の開発まで幅広く取り組んでいます。
3Dデータ処理は、自動運転だけでなく、建設現場のデジタルツイン化や、工場の自律ロボット、XRコンテンツの生成など、今後ますます重要になる技術です。
「点群データ、ちょっと面白そうだな」と思ったエンジニアの皆さん、ぜひGoogle Colabのリンクから実際にコードを動かしてみてください。2次元の画像処理とは違った、3次元ならではの難しさと楽しさが待っています!
今後もnoteでは、社内の技術検証や「やってみた」事例を公開していきますので、ぜひフォローをお願いします。
関連リンク
PointNet 元論文: Deep Learning on Point Sets for 3D Classification and Segmentation (2017)
PointPillars 元論文: PointPillars: Fast Encoders for Object Detection from Point Clouds (2019)