【6D位姿估计算法】GDRNPP算法
一、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 | datasets/ |
从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 | conda create -n gdrnpp python=3.7 |
(2)安装依赖
安装 PyTorch
1 | conda install pytorch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0 cudatoolkit=11.3 -c pytorch -c conda-forge |
从源码安装 detectron2
1 | python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' |
打开 requirements/requirement.txt
,注释第30行 torchvision
,第35行 pytorch3d
, 第48行 pytorch-lightning
安装 Ubuntu 系统依赖和 python 依赖:
1 | sh scripts/install_deps.sh |
(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