Loading... ### 安装OnePose环境 1. 创建环境: 这里我对OnePose原本的`environment.yaml`文件做了修改,修改了其第8行和23-25行,修改后的`environment.yaml`文件如下: ```yaml name: onepose channels: # - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch - pytorch - conda-forge - defaults dependencies: - python=3.9 - pytorch=1.8.0 - torchvision=0.9.1 - cudatoolkit=10.2 - ipython - tqdm - matplotlib - pylint - conda-forge::jupyterlab - conda-forge::h5py=3.1.0 - conda-forge::loguru=0.5.3 - conda-forge::scipy - conda-forge::numba - conda-forge::ipdb - conda-forge::albumentations=0.5.1 # - pip # - pip: # - -r requirements.txt ``` 执行: ```bash conda env create -f environment.yaml ``` 2. 激活环境: ```bash conda activate onepose ``` 3. 修改`requirements.txt`文件: 1. 第1行:`pytorch-lightning==1.5.10` -> `pytorch-lightning`。 4. 安装依赖: ```bash pip3 install -r requirements.txt ``` 5. 安装其他依赖: ```bash pip3 install trimesh portend jaraco.collections ``` 6. 安装[Wis3D](https://github.com/zju3dv/Wis3D): ```bash pip install -i https://test.pypi.org/simple/ wis3d ``` 7. 下载[SuperPoint](https://github.com/magicleap/SuperPointPretrainedNetwork)和[SuperGlue](https://github.com/magicleap/SuperGluePretrainedNetwork)的预训练模型: ```bash sh ./scripts/prepare_2D_matching_resources.sh ``` 8. 下载OnePose的预训练模型并将其移动到`data/model/checkpoints/onepose/GATsSPG.ckpt`: ```bash gdown --folder 1VjLLjJ9oxjKV5Xy3Aty0uQUVwyEhgtIE ``` #### 下载数据集 官方GitHub中提供的OneDrive链接已失效,请自行解决下载问题。 下载数据集后,将数据集组织为如下形式: ```text onepose_datasets/ ├── sample_data -> /data1/dataset/tanmx/onepose/sample_data/ ├── test_data -> /data1/dataset/tanmx/onepose/test_data/ ├── train_data -> /data1/dataset/tanmx/onepose/train_data/ └── val_data -> /data1/dataset/tanmx/onepose/val_data/ 4 directories, 0 files ``` #### 处理数据集 1. 修改配置文件: 将`configs/preprocess/sfm_spp_spg_sample.yaml`,`configs/preprocess/sfm_spp_spg_test.yaml`,`configs/preprocess/sfm_spp_spg_train.yaml`和`configs/preprocess/sfm_spp_spg_val.yaml`文件中第5行的`redo: False`修改为`redo: True`。 2. 修改代码文件: 将`src/sfm/triangulation.py`中第159行的`skip_geometric_verification=False`改为`skip_geometric_verification=True`。 3. 执行代码: ```bash python run.py +preprocess=sfm_spp_spg_train.yaml python run.py +preprocess=sfm_spp_spg_test.yaml python run.py +preprocess=sfm_spp_spg_val.yaml python run.py +preprocess=sfm_spp_spg_sample.yaml ``` #### 运行代码 1. 使用类别无关的二维目标检测进行位姿估计(Inference with category-agnostic 2D object detection): ```bash python feature_matching_object_detector.py +experiment=object_detector.yaml n_ref_view=15 ``` 运行上面的代码时不出意外会报错,报错和`torchvision.models`中的`VGG16_Weights`有关的,由于在原来的`environment.yaml`中,`torchvision`的版本为`0.9.1`,而查阅[`torchvision 0.9`的文档](https://docs.pytorch.org/vision/0.9/search.html?q=vgg&check_keywords=yes&area=default)可发现,`torchvision 0.9.1`中没有`VGG16_Weights`,而查阅[`torchvision 0.13`的文档](https://docs.pytorch.org/vision/0.13/search.html?q=vgg&check_keywords=yes&area=default)后发现,`torchvision 0.13`中有`VGG16_Weights`,所以需要升级`torchvision`的版本至大于等于`0.13`,即执行: ```bash pip3 install "torchvision>=0.13" -U ``` 重新执行: ```bash python feature_matching_object_detector.py +experiment=object_detector.yaml n_ref_view=15 ``` 获得目标物体后,可进行位姿估计: ```bash python inference.py +experiment=test_GATsSPG.yaml object_detect_mode=feature_matching save_wis3d=true ``` 运行上面的代码时不出意外会报错,报错和NumPy 1.20有关,修改`~/miniconda3/envs/onepose/lib/python3.9/site-packages/transforms3d/quaternions.py`文件,将第26-27行的: ```python _MAX_FLOAT = np.maximum_sctype(np.float) _FLOAT_EPS = np.finfo(np.float).eps ``` 修改为: ```python _MAX_FLOAT = np.maximum_sctype(np.float64) _FLOAT_EPS = np.finfo(np.float64).eps ``` 重新执行: ```bash python inference.py +experiment=test_GATsSPG.yaml object_detect_mode=feature_matching save_wis3d=true ``` 仍然报错,报错还是和NumPy 1.20有关,修改`src/utils/vis_utils.py`文件,将第411行的`dtype=np.bool`修改为`dtype=np.bool_`,重新执行: ```bash python inference.py +experiment=test_GATsSPG.yaml object_detect_mode=feature_matching save_wis3d=true ``` 2. 使用真实二维边界框进行位姿估计(Running inference with ground-truth 2D bounding boxes): 报错都在前面解决了,直接执行: ```bash python inference.py +experiment=test_GATsSPG.yaml object_detect_mode=GT_box save_wis3d=true ``` 注意,这里结果的存储位置可以在`test_GATsSPG.yaml`中进行修改。 > 补充:在运行`inference.py`的时候,我发现会存在`data/onepose_datasets/test_data/0519-backpack1-box/backpack1-4/poses_ba/751.txt not found.`的错误,没有找到解决方案,我认为可以直接将`test_GATsSPG.yaml`中第73行和第155行的内容注释掉即可。 > 补补充:`data/onepose_datasets/test_data/0520-lipault-box/lipault-4/poses_ba/948.txt not found.`和`data/onepose_datasets/test_data/0565-biscuits-box/biscuits-4/poses_ba/448.txt not found.`也没有,也注释掉即可。 > 补补补充:后续还遇到了几个相同的问题,但是我没有记录下来,也是直接注释即可。 3. 使用Wis3D可视化匹配和估计的位姿: 直接按照仓库README中的命令运行代码即可。 4. Training the GATs Network 最后训练的代码我没跑了,感觉没有什么必要。 最后修改:2025 年 12 月 17 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏。