一、引言
GDR-Net(Geometry-Guided Direct Regression Network)是由Gu Wang等人在CVPR 2021上提出的一种创新方法,它通过几何引导的直接回归网络,有效地解决了这一难题。GDR-Net的核心思想是利用几何信息来指导网络直接回归物体的6D姿态,从而在精度和效率上取得了显著的提升。它为单目相机实现6D对象姿态估计带来了新的突破。
本文探讨GDR-Net在本地的复现,从环境配置到测试程序的运行等。
二、环境配置
先下载工程:
git clone https://github.com/THU-DA-6D-Pose-Group/GDR-Net.git
创建虚拟环境
conda create -n gdrnet python=3.8 -y
conda activate gdrnet
安装python支持库pip install -r requirements.txt
,作者给出的列表并不全面。缺少loguru, cffi等库的支持, 并且fastfunc已经不再使用。这里给出一个版本,若仍有提示缺少库直接用pip安装:
cython
plyfile
pycocotools # or install the nvidia version which is cpp-accelerated
cffi
ninja
setproctitle
#fastfunc
meshplex
OpenEXR
vispy>=0.6.4
tabulate
pytest-runner
pytest
ipdb
tqdm
numba
mmcv
imagecorruptions
pyassimp==4.1.3 # 4.1.4 will cause egl_renderer SegmentFault
pypng
albumentations
transforms3d
pyquaternion
torch==1.13.0
torchvision
open3d
fvcore
tensorboardX
loguru
cffi
pytorch-lightning # 1.6.0.dev0
fairscale
deepspeed
之后按照作者教程,依次安装依赖:
- 首先是detectron:
git clone https://github.com/facebookresearch/detectron2.git
cd detectron2/
python setup.py build_ext install
- 其次运行
bash scripts/install_deps.sh
- 最后运行
bash core/csrc/compile.sh
*报错: pytorch_lightning.lite no such module
使用旧版pip,并安装1.x版本的torch。对于pytorch_lightning的版本需求,作者指出需要1.6.0dev版本,本文发现1.6.0也可以。
pip install torch==1.13.0 torchvision
pip install pip==23
pip install pytorch-lightning==1.6.0
*报错:torchmetrics相关
安装0.5版本的torchmetrics
pip install torchmetrics==0.5
三、数据下载
-
LM数据本身比较庞大,建议下载LMO数据。所有相关的数据都可以在BOP Challenge中下载,需要自由的上网。本文推荐使用BOP在huggingface上的下载页。下载所有lmo文件夹下的压缩包,并解压将所有文件移动至根目录
GDR-Net/datasets/BOP_DATASETS/lmo
。 -
其次,下载作者准备的数据集分割文件和测试框文件:
https://pan.baidu.com/s/1gGoZGkuMYxhU9LBKxuSz0g#list/path=%2F
密码:qjfk
下载完成后将文件解压到lmo中的对应文件夹。 -
VOC 2012选择性下载。
下载完成后,lmo目录结构如下:
├── camera.json
├── dataset_info.md
├── lmo_test_bop19
│ └── test
├── lmo_train
│ └── train
├── models
│ ├── models_info.json
│ ├── obj_000001.ply
│ ├── obj_000005.ply
│ ├── obj_000006.ply
│ ├── obj_000008.ply
│ ├── obj_000009.ply
│ ├── obj_000010.ply
│ ├── obj_000011.ply
│ └── obj_000012.ply
├── models_eval
│ ├── models_info.json
│ ├── obj_000001.ply
│ ├── obj_000005.ply
│ ├── obj_000006.ply
│ ├── obj_000008.ply
│ ├── obj_000009.ply
│ ├── obj_000010.ply
│ ├── obj_000011.ply
│ └── obj_000012.ply
├── test
│ ├── 000002
│ └── test_bboxes
├── test_targets_bop19.json
└── train_pbr
四、运行
根据给出的命令修改数据集为lmo数据集,命令如下
./core/gdrn_modeling/test_gdrn.sh configs/gdrn/lmo/a6_cPnP_AugAAETrunc_BG0.5_lmo_real_pbr0.1_40e.py 0 output/gdrn/lmo/a6_cPnP_AugAAETrunc_BG0.5_lmo_real_pbr0.1_40e/gdrn_lmo_real_pbr.pth
运行结果:
20240927_111034|core.gdrn_modeling.gdrn_custom_evaluator@655:
objects ape can cat driller duck eggbox glue holepuncher Avg(8)
ad_2 0.34 6.38 0.67 7.74 0.26 0.43 8.66 0.08 3.07
ad_5 12.99 49.79 12.05 39.21 11.20 15.88 42.95 26.28 26.29
ad_10 44.87 79.70 30.58 67.79 39.98 49.79 73.70 62.73 56.14
rete_2 8.89 12.34 6.91 9.64 3.59 0.09 3.11 3.80 6.05
rete_5 52.99 66.61 31.76 58.73 20.30 6.15 42.84 51.32 41.34
rete_10 78.72 92.05 58.72 81.05 65.00 39.37 76.25 90.66 72.73
re_2 9.23 13.01 9.01 12.69 4.02 0.09 4.66 4.71 7.18
re_5 53.16 68.93 32.86 60.46 20.82 6.23 44.06 51.74 42.28
re_10 78.89 94.28 59.48 82.70 65.53 39.62 76.80 91.40 73.59
te_2 71.97 80.12 40.10 58.90 70.95 20.50 44.40 78.02 58.12
te_5 86.75 90.39 66.72 83.44 85.30 57.81 80.36 93.47 80.53
te_10 88.97 94.86 79.44 91.27 89.68 70.11 85.90 96.20 87.06
proj_2 15.81 20.88 18.53 10.46 15.14 1.71 14.21 8.43 13.15
proj_5 65.73 80.53 59.48 60.96 69.99 38.17 58.60 81.49 64.37
proj_10 80.09 97.18 73.88 84.27 86.70 64.30 81.80 95.21 82.93
re 14.97 4.79 18.27 10.03 15.25 17.32 10.10 8.58 12.41
te 0.06 0.02 0.07 0.04 0.05 0.09 0.06 0.02 0.05