本文主要是对于论文360BEV的解读和实现。
Paper:2023.03_360BEV: Panoramic Semantic Mapping for Indoor Bird's-Eye View
360BEV:室内鸟瞰全景语义映射
arxiv.org/pdf/2303.11910
Code:jamycheung/360BEV: Repository of 360BEV (github.com)
Demo:360BEV (jamycheung.github.io)
论文概述
这篇论文提出了一种名为360BEV的专用解决方案,用于从鸟瞰图像对室内场景进行全景语义映射。主要贡献包括:
- 提出了一种从全景图像生成整体鸟瞰视图语义映射的方法,不依赖于窄视野图像或运动线索。
- 提出模型360Mapper,可以从全景图像预测语义标签和非模态语义映射。
- 所提出的方法在室内语义映射基准测试中取得了最佳性能,优于现有方法。
相关工作
基于鸟瞰图的语义分割,三种方法:
- Early projection: Proj.→Enc.→Seg. in Fig. 2c.
- Late projection: Enc.→Seg.→Proj. in Fig. 2d.
- Intermediate projection: Enc.→Proj.→Seg. in Fig. 2e
模型:360BEV
这里根据原有的数据集,生成了新的数据集
360Mapper框架包括四个步骤:
- 基于Transformer的骨干网络从全景图像中提取特征。
- 逆向径向投影(IRP)模块通过深度生成的参考点得到一个2D索引。
- 360度注意力模块通过2D索引增强前视图特征,并根据BEV查询生成偏移量,以消除失真效应。
- 轻量级解码器解析投影的特征图,预测语义BEV地图。
实验
4块A100GPU
50epoch
优化器:AdamW
批次:4
数据集:360FV-Matterport 和Stanford2D3D输入是512×1024
项目实现
设置环境
git clone https://github.com/jamycheung/360BEV
conda create -n 360BEV python=3.8
conda activate 360BEV
cd 360BEV
# 安装mmedtection
# conda create -n open-mmlab python=3.7 -y
# conda activate open-mmlab
# conda install pytorch torchvision -c pytorch
# or conda install pytorch=1.3.1 cudatoolkit=9.2 torchvision=0.4.2 -c pytorch
# 克隆项目
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -r requirements/build.txt
pip install "git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI"
pip install -v -e .
cd..
pip install -r requirements.txt
数据准备
数据集使用Stanford2D3D和Matterport3D
作者提供了谷歌drive的下载地址:360BEV-Stanford,360BEV-Matterport ,360FV-Matterport
这里使用最小的
解压后如图,分为训练和测试
数据格式处理如下
数据集 | 全景(Scene) | 房间(Room) | Frame | 种类(Category) |
---|---|---|---|---|
train | 5 | 215 | 1,040 | 13 |
val | 1 | 55 | 373 | 13 |
360BEV-Stanford | 6 | 270 | 1,413 | 13 |
train | 61 | -- | 7,829 | 20 |
val | 7 | -- | 772 | 20 |
test | 18 | -- | 2,014 | 20 |
360BEV-Matterport | 86 | 2,030 | 10,615 | 20 |
data/
├── Stanford2D3D
│ └── area_[1|2|3|4|5a|5b|6]
│ ├── rgb/*png
│ └── semantic/*png
│
├── 360BEV-Stanford
│ ├── training
│ └── valid
│ ├── data_base_with_rotationz_realdepth/*h5
│ └── ground_truth/*h5
│
├── 360BEV-Matterport
│ ├── training
│ ├── testing
│ └── valid
│ ├── smnet_training_data_zteng/*h5
│ └── topdown_gt_real_height/*h5
│
└── 360FV-Matterport
├── 17DRP5sb8fy
│ ├── depth/*png
│ ├── rgb/*png
│ └── semantic/*png
└── ...
训练
# 360BEV_Matterport
python train_360BEV_Matterport.py --config configs/model_360BEV_mp3d.yml
# 360BEV_S2d3d
python train_360BEV_S2d3d.py --config configs/model_360BEV_s2d3d.yml
# Stanford2D3D
python train_pano_360Attention_S2d3d.py --config configs/model_fv_s2d3d.yml
# 360FV-Matterport
python train_pano_360Attention_Matterport.py --config configs/model_fv_mp3d.yml
测试
# 360BEV_Matterport
python test_360BEV_Matterport.py --config configs/model_360BEV_mp3d.yml
# 360BEV_S2d3d
python test_360BEV_S2d3d.py --config configs/model_360BEV_s2d3d.yml
# Stanford2D3D
python test_pano_360Attention_S2d3d.py --config configs/model_fv_s2d3d.yml
# 360FV-Matterport
python test_pano_360Attention_Matterport.py --config configs/model_fv_mp3d.yml
代码解析
论文以transformer为骨干网络提取特征,transformer.py在
# 初始化
generate feature
FPN output feature maps
# 从transformer提取特征后,
更新bev的高,宽,以及位置
疑问与解答
Q1:在BEV中,摄像头是固定,还是固定可环视?输入的值的区别是什么?
训练时分为俩个阶段
Q2:语义分割中前景,中景,从上到写视角是指什么 意思?
在语义分割中,我们常用以下几个视角来描述图像的不同部分:
-
前景:前景是图像中最显著的部分,通常是我们关心的目标物体。在语义分割中,前景指的是被标记为特定类别(如人、车、树等)的区域。
-
中景:中景是介于前景和背景之间的部分。在拍摄和视觉艺术中,中景通常是指人物的膝盖以上的取景范围。在语义分割中,中景可能包括一些次要目标或环境元素,但不如前景那么显著。
-
从上到下视角:这是一种拍摄或观察图像的方式。从上到下视角意味着我们以一种俯视的方式来看待场景,就像我们站在高处往下看一样。这种视角可以用于强调环境、布局或整体结构。
参考文献
【1】Joint 2D-3D-Semantic Data for Indoor Scene Understanding 1702.01105 (arxiv.org)
【2】360BEV: Panoramic Semantic Mapping for Indoor Bird's-Eye View,arXiv - CS - Computer Vision and Pattern Recognition - X-MOL【3】几种流行的视觉bev算法通俗对比介绍_bev视觉缺点-CSDN博客
【4】四. 基于环视Camera的BEV感知算法-环视背景介绍_remote camera 环视摄像头-CSDN博客
【5】(BEV综述)Delving into the Devils of Bird’s-eye-view Perception: A Review, Evaluation and Recipe - 哈哈哈喽喽喽 - 博客园 (cnblogs.com)
【6】arxiv-sanity (arxiv-sanity-lite.com)
【7】vasgaowei/BEV-Perception: Bird's Eye View Perception (github.com)
References