一、GDR-Net: Geometry-Guided Direct Regression Network for Monocular 6D Object Pose Estimation

期刊 / 会议:CVPR2021
作者 / 机构:Gu Wang, Tsinghua University, BNRist
关键词:位姿估计;端到端
时间:2021
代码https://github.com/THU-DA-6D-Pose-Group/GDR-Net

1 目标问题

提出一种端到端的位姿估计算法。

2 方法

(1)网络架构

首先向GDR-Net提供256x256的ROI图,预测出三个64x64的中间特征图

  • 稠密对应图$M_{2D-3D}$:将稠密坐标映射$M_{XYZ}$对跌倒2D像素坐标上得到,反映了对象的几何形状信息。
  • 表面区域注意图$M_{SRA}$:采用最远点采样从$M_{XYZ}$中到处,代表了对象的对称性。
  • 可见对象掩码$M_{vis}$

使用一个简单的2D卷积Patch Pnp模块直接从特征图中回归6D对象姿态。Patch PnP模块由三个卷积层组成,然后用两个全连接层用于扁平化特征,最后连个全连接层输出R6D旋转和tSITE平移。

3 思考

本文专注于图像的特征提取和处理工作,实现从单一图片预测位姿的功能。

二、算法复现

2.1 数据集准备

下载BOP数据集VOC2012数据集,从Onedrive (password: groupji)或者百度网盘(密码: vp58)下载test_boxes,完成后datasets文件夹的结构如下:

1
2
3
4
5
6
7
8
9
10
datasets/
├── BOP_DATASETS # https://bop.felk.cvut.cz/datasets/
├──tudl
├──lmo
├──ycbv
├──icbin
├──hb
├──itodd
└──tless
└──VOCdevkit

Onedrive (password: groupji)或者百度网盘(密码10t3)下载预训练模型,并将其放到./output文件夹内。

2.2 环境准备

要求Ubuntu 18.04/20.04, CUDA 10.1/10.2/11.6, python >= 3.7, PyTorch >= 1.9, torchvision

(1)创建虚拟环境

1
2
conda create -n gdrnpp python=3.7
conda activate gdrnpp

(2)安装依赖

打开requirements/requirement.txt,修改第48行为pytorch-lightning==1.6.0

运行sh scripts/install_deps.sh

(3)从源码安装detectron2

1
2
3
4
5
6
7
8
9
python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'
# (add --user if you don't have permission)

# Or, to install it from a local clone:
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2

# On macOS, you may need to prepend the above commands with a few environment variables:
CC=clang CXX=clang++ ARCHFLAGS="-arch x86_64" python -m pip install ...

(4)编译 fps 的cpp扩展

1
sh core/csrc/compile.sh

(5)编译egl_renderer的cpp扩展

1
sh lib/egl_renderer/compile_cpp_egl_renderer.sh

2.3 目标检测算法

从 Onedrive (password: groupji) or BaiDuYunPan(password: aw68)中下载预训练模型。

(1)训练

./det/yolox/tools/train_yolox.sh <config_path> <gpu_ids> (other args)

(2)测试

./det/yolox/tools/test_yolox.sh <config_path> <gpu_ids> <ckpt_path> (other args)

2.4 位姿估计算法

(1)训练

打开core/gdrn_modeling/datasets/lm_pbr.py,注释第190行assert osp.exists(xyz_path), xyz_path

./core/gdrn_modeling/train_gdrn.sh <config_path> <gpu_ids> (other args)

例如:

./core/gdrn_modeling/train_gdrn.sh configs/gdrn/ycbv/convnext_a6_AugCosyAAEGray_BG05_mlL1_DMask_amodalClipBox_classAware_ycbv.py 0

(2)测试

./core/gdrn_modeling/test_gdrn.sh <config_path> <gpu_ids> <ckpt_path> (other args)

例如:

./core/gdrn_modeling/test_gdrn.sh configs/gdrn/ycbv/convnext_a6_AugCosyAAEGray_BG05_mlL1_DMask_amodalClipBox_classAware_ycbv.py 0 output/gdrn/ycbv/convnext_a6_AugCosyAAEGray_BG05_mlL1_DMask_amodalClipBox_classAware_ycbv/model_final_wo_optim.pth