Help us understand the problem. What is going on with this article?

点群DNN、3D DNN入門 -3DYOLO, VoxelNet, PointNet, FrustrumPointNetなどなど

目的

image.png

点群データに対してディープニューラルネットワーク(DNN)を適応する研究は活発で、いくつものアプローチがあります。
大人気のPointNetだけではなく、他の手法も照らし合わせて各手法のメリット・デメリットを理解する自助をすることが記事の目的です。

浅く広く手法について学び、ああこういうアプローチがあるのかと気づくことができると幸いです。
各技術の詳細を知りたい場合は元論文や解説サイトを読むといいと思います。

またPointCloud DNNの論文についてはここにわかりやすくまとまっています。是非一読を!

3D DNNの家計図

image.png

独断と偏見で3D DNN系の家系図を作ってみました。

大きくは
- 2Dベースのアプローチを結集する2D based
- あくまで点群にニューラルネットワークを適応するPoint cloud based approach
- 画像から得た結果と点群ニューラルネットワークをフュージョンするアプローチ
- また点群ニューラルネットワークで点群を前処理(エンコード)した後に2Dベースの物体検出を適応するPointCloud+2D アプローチ
の四種類があると考えています。

それぞれを詳しく見てみましょう。

変更履歴

使うデータドメイン毎にカテゴライズを変更(2019/10/2)
データセットなど加筆(2019/10/2)

2Dベースアプローチ

Complex YOLO (ECCV workshop 2018), YOLO 3D (ECCV workshop 2018)

Complex-YOLO: An Euler-Region-Proposal for Real-Time 3D Object Detection on Point Clouds

https://link.springer.com/chapter/10.1007/978-3-030-11009-3_11

YOLO 3D: End-to-end real-time 3D Oriented Object Bounding Box Detection from LiDAR Point Cloud

http://openaccess.thecvf.com/content_eccv_2018_workshops/w18/html/Ali_YOLO3D_End-to-end_real-time_3D_Oriented_Object_Bounding_Box_Detection_from_ECCVW_2018_paper.html

手法について

タスク:自動運転用の三次元物体検出
LiDARの点群はデータ量が少なく(疎)であるため、点群から物体の情報を直接抽出するのは難しい。

そこで点群を俯瞰的視点(上からみた)の画像を生成し、それに対し物体検出の手法(YOLOやFaster-RCNN)を適応するという手法です。
点群データも俯瞰視点に変換してしまえば車や人なども画像のように扱うことができます。
そのため成功をすでに収め、人間レベルの検出が可能なCNNを積極的に3Dの分野でも適応しようというのがベースの考え方です。

俯瞰(bird's eye viewまたはBEV)とは?

bird
上の図が正面からみたカメラで下の図が俯瞰視点でみた点群です。
これを画像として扱い、物体検出DNNを適応します。

1564476894677.png

メリット

2D画像で成功したディープなR-CNNベースの手法をそのまま点群データに対し適応することができる。

R-CNNはImageNetやMS-COCOなどから転移学習できるので、必要な学習データ量が少なく済む可能性がある。

** YOLOベースのため高速。リアルタイム動作も可能。**

デメリット

点群を二次元化してしまうので物体の三次元的特徴(凸凹など)は読み取れない。

多角的に検出を行うことは可能だが、角度間(例えば俯瞰と正面)の検出結果の整合性を取るのが難しく検出を間違えたりしてしまう。

(あと3D研究者からすると手法がストレート過ぎておもしろくない笑)

点群ベースアプローチ (PointNet系)

PointNet(NIPS 2016)

PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

https://arxiv.org/abs/1612.00593

みんな大好きPointNet。

https://www.slideshare.net/FujimotoKeisuke/point-net

https://qiita.com/KYoshiyama/items/802506ec397559725a1c

に詳しい解説があるのでそちらも読むことをおすすめします。

PointNetの手法について

1564478255143.png

点に対し全結合ネットワークを複数回かけ合わせ、特徴量を抽出していく(Classification Network)。

そして最終的に得られた点に対する特徴量(n*1024部)をmaxpoolingすることで点群全体の特徴量(global feature)を得る。

点に対する特徴量抽出後、maxpoolingで全体特徴量を得ることが出来ることを示したのがPointNet最大の功績じゃないかと考えている。これでいいんだ!!という感じ。。笑

1564478526102.png

点群に対するクラス分類、セグメンテーション両方に対して(ModelNet,SUNRGB-D)非常に高いスコアを叩き出した。

PointNetのタスク

PointNetが効果を発揮するのはデータセットは主に室内で取られた点群データに対してです。
image.png

報告されているのは室内のセグメンテーションを行うSUNRGB-Dデータセット(上図)

image.png

そして家具単体のクラスを当てるModelNet40です。

自動運転のようなKittiデータセットに対しては点群が疎すぎるため、適応できないとのこと。
これは後に2Dと3DをフュージョンするFrustrum PointNetで解決されました。

PointNetの実装

PointNet-Tensorflow(本家)
https://github.com/charlesq34/pointnet

PointNet.Pytorch(自分もこれを使っており、本家同等の精度が出るのを確認してます)
https://github.com/fxia22/pointnet.pytorch

PointNet-Keras
https://github.com/garyli1019/pointnet-keras

PointNet-Chainer
https://github.com/corochann/chainer-pointnet

PointNet++(NIPS 2017)

PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
https://arxiv.org/abs/1706.02413

PointNetの局所的特徴を見ていない(近傍点群の情報を取り込めない)、という課題を改良したPointNet++も人気と実力が高いです。

PointNetに入力する点群を事前にクラスタリングした近傍点を入力することで、擬似的に局所的特徴量も抽出できるようになっています(後日加筆します。。)

まずはとっつき始めるならばPointNet,研究を行うならばPointNet++を元に実装を行うべきと思います。

実装

PointNet++.pytorch
https://github.com/erikwijmans/Pointnet2_PyTorch

VoteNet(ICCV 2019)

Deep Hough Voting for 3D Object Detection in Point Clouds
http://arxiv.org/abs/1904.09664

PointNet生みの親からの室内のオブジェクトの3D物体検出に向けた最新論文。
現在ScanNetv2ベンチマークにおいてSoTA。

点群の物体検出タスクは複雑な実装が多く、精度もあまり出ていなかった。
一方VoteNetはシンプルなアイデアながら、高い精度を実現。
基本的なアイデアは物体の中央をhough-votingで予測し、予測した中心点を元に物体検出するというもの(後日加筆します)。

今後人気が出てくるようと思うので要ウォッチ。

センサフュージョンベースアプローチ

Frustrum PointNets

Frustum PointNets for 3D Object Detection from RGB-D Data

https://arxiv.org/abs/1711.08488

手法について

PointNetでは物体検出のタスクにはあまり向かない。

そこでカメラとLiDARデータのセンサフュージョンを行い、精度向上を達成。

そこで成功を収めている2DベースR-CNNで物体のある方向を円錐で絞り込んでから、その部分の点群のみPointNetにかけることで高精度な3D物体検出を実現。

これもアイデアは非常に単純だが、効果絶大なアプローチである。自動運転用など高い精度が求められる三次元物体検出を行うならばこのアプローチが一番スタンダードなのではないだろうか。

1564478892398.png

3D bindingbox predictionを行うPointNetも新規に提案している。

1564478950881.png

メリット

カメラ+LiDARを用いた3次元物体検出のタスクにおいてstate-of-the-art。(Kittiデータセット)

有力な2つの手法を組み合わせているので実装がしやすい。

デメリット

モデルを縦続的に使うので演算量は多い。

そもそもカメラで取り逃した物体は検出できない。

実装

https://github.com/charlesq34/frustum-pointnets

点群+2D CNNのアプローチ

VoxelNet(CVPR 2018)

VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection

http://openaccess.thecvf.com/content_cvpr_2018/html/Zhou_VoxelNet_End-to-End_Learning_CVPR_2018_paper.html

手法について

1564477068068.png
この論文のポイントは点群にPointNet-likeなネットワークで特徴抽出を行った後に、2Dベースのアプローチ(Region CNN)を適応することで物体検出を行います。2D CNNに直接点群を入力すると点群の精微な情報を読み取れないという弱点を最初にPointNetで特徴抽出を行うことで解決したのが進歩性です。

また物体検出自体はCNN系手法の方が精度が高いため、PointNetとR-CNN両方の長所を使っているという意味で興味深い手法です。

Voxelとは?

voxel
左の絵が生の点群データです。
点群データはポイント数が多く扱いにくいので、複数を一纏まりにしたVoxelに変換します。Voxelは粒度によっては点群のように振る舞いますが、荒くすると昔のゲームのポリゴンくらいになってしまいます。
ざっくばらんに言うとはダウンサンプルした点群と捉えることができます。

空間的情報を保ったままデータ量、演算量を削減できるため、3D DNNが流行る前から点群の位置合わせ(レジストレーション)を行う際にはボクセル化は定番のアプローチです。

メリット

Voxel間で畳み込みを行うため、後述するPointNetではできない近隣点群間の特徴量も抽出することが可能です。

Voxelの特徴量の他にPoint自体の特徴量抽出も行っているため(直感的には)情報のロスはなく、高精度な認識が期待できます。

PointNetとCNNの良いところどりをしたようなアーキテクチャ。

デメリット

メモリ使用量が多い。

ランダムサンプルやVoxel間隔をチューニングすれば軽くすることは可能だが、チューニングが大変。

公式実装がリリースされていない。
ここに公式では有りませんが実装がありました。

Pointpillers

TBD

点群系(3D)のベンチマーク

ModelNet40

image.png
一番基本的な3D系のベンチマーク。
90%精度が出てしまっているので、モデルがオーバーフィット気味でベンチマークの価値は現在あまりなくなった。MNIST的に学習時間も短いので最初に試すのはこれ。
https://paperswithcode.com/task/3d-object-classification

現在は3D capsulenetがリーダー。
image.png

ScanNetv2

現在の室内用3Dデータでは一番難しいタスク。
VoteNetが一位ですね。
https://paperswithcode.com/sota/3d-object-detection-on-scannetv2

image.png

自動運転系

KittiやNuscenesのリーダーボードを参考。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away