Segmentation for 3D Reconstruction
Segmentation は、image や point cloud を意味のある領域に分ける task です。3D Reconstruction では、dynamic object の除去、object-level mapping、semantic 3D map の構築、surface cleanup などに使われます。
Semantic segmentation
Semantic segmentation は、各 pixel に class label を割り当てる task です。たとえば、road、building、person、car、sky などの label を pixel ごとに推定します。
3D Reconstruction では、semantic label を 3D point や voxel に投影することで、semantic map を作れます。
Instance segmentation
Instance segmentation は、同じ class の object を個体ごとに分離します。たとえば、複数の car がある場合に、それぞれを別 instance として扱います。
Object-level reconstruction や dynamic object tracking では、instance segmentation が重要です。
Panoptic segmentation
Panoptic segmentation は、semantic segmentation と instance segmentation を統合した task です。すべての pixel に semantic label を割り当てつつ、countable object には instance ID も割り当てます。
Segment Anything と foundation model
Segment Anything Model(SAM)のような foundation model は、promptable segmentation を可能にします。Point、box、mask などを prompt として与え、対象領域を分割できます。SAM 2 では video object segmentation と tracking、SAM 3 では concept prompt による detection / segmentation / tracking へ拡張されています。3D Reconstruction の preprocessing や interactive editing に使いやすいです。
3D Reconstruction での使い方
Segmentation は、次のような場面で役に立ちます。
- Dynamic object を除外して camera pose estimation を安定させる。
- Sky や reflective surface のような reconstruction に不向きな領域を mask する。
- Object ごとに separate mesh や point cloud を作る。
- Semantic label を 3D map に fuse して semantic SLAM を行う。
- NeRF や 3D Gaussian Splatting の object editing に使う。
2D segmentation と 3D segmentation
2D segmentation は image plane 上で領域を分けます。3D segmentation は point cloud、mesh、voxel、Gaussian primitive など、3D representation 上で領域を分けます。
2D segmentation を multi-view で fuse すれば 3D semantic map を作れますが、view 間で label consistency を保つことが課題になります。
関連ページ
主なソース
- Mask R-CNN paper: https://arxiv.org/abs/1703.06870
- Panoptic segmentation paper: https://arxiv.org/abs/1801.00868
- Segment Anything paper: https://arxiv.org/abs/2304.02643
- ScanNet benchmark: http://www.scan-net.org/