【Gen6D位姿估计】在Linux环境下的复现日志(包含COLMAP安装)

写在前面

算法和代码框架均来自港大的课题组
gen6d介绍页面
我只是拿来做一个毕设,答辩结束后会遵循GPL协议开放所有代码
这篇博客仅作为开发日志,记录一下部署过程中的各种问题和解决方法,仅供学习讨论

此外,不得不说,这项工作的识别估计的效果不错,但是效率有点太低了,在GTX1650上处理一帧数据需要1.07秒

笔者环境

模块版本号
Ubuntu22.04
CUDA11.8,
python3.8
pytorch2.4.1
pytorch3d0.7.8
CUB1.17.2

工作目录gen6d如下:

(base) star@star:~/gen6d$ tree -L 2
.
├── cub-1.17.2
│   ├── CHANGELOG.md
│   ├── cmake
│   ├── CMakeLists.txt
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── cub
│   ├── examples
│   ├── LICENSE.TXT
│   ├── README.md
│   └── test
├── Gen6D
│   ├── align-data
│   ├── assets
│   ├── colmap_script.py
│   ├── compute_align_poses.py
│   ├── configs
│   ├── custom_object.md
│   ├── data
│   ├── dataset
│   ├── estimator.py
│   ├── eval.py
│   ├── LICENSE
│   ├── network
│   ├── predict.py
│   ├── prepare.py
│   ├── __pycache__
│   ├── README.md
│   ├── requirements.txt
│   ├── train
│   ├── train_model.py
│   └── utils
├── pytorch3d-0.7.8
│   ├── build
│   ├── dev
│   ├── docs
│   ├── INSTALL.md
│   ├── LICENSE
│   ├── LICENSE-3RD-PARTY
│   ├── packaging
│   ├── projects
│   ├── pytorch3d
│   ├── pytorch3d.egg-info
│   ├── README.md
│   ├── scripts
│   ├── setup.cfg
│   ├── setup.py
│   ├── tests
│   └── website
└── test.py

26 directories, 26 files

环境配置

基础环境

创建工程文件夹,笔者这里叫做gen6d
执行如下指令:

# 创建虚拟环境
conda create -y -n gen6d python=3.8
# 查看新环境是否安装成功
conda env list
# 激活环境
activate gen6d
# 下载githup源代码到合适文件夹,并cd到代码文件夹内(科学上网)
git clone https://github.com/liuyuan-pal/Gen6D.git
cd Gen6D

删除了requirements.txt中pytorch>=1.7.1、torchvision、pytorch3d和cudatoolkit部分,这些我们单独安装,他们存在一些问题

删除完再执行下面的命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

CUDA

参考我的另一篇文章ubuntu环境下安装cuda
这里推荐11.8版本,其他版本很可能出现兼容性问题

CUB

虽然官方说CUB已经被包含在cuda toolkit中,但是至少在笔者的cuda toolkit里没有CUB,需要单独下载
CUB下载链接,笔者选择的是1.17.2版本,契合11.8的CUDA
下载并放入Gen6D的工作目录
按照下面的步骤添加环境变量

sudo vim ~/.bashrc

# 在文末添加
export CUB_HOME="/home/star/gen6d/cub-1.17.2"

#保存并退出后执行
source ~/.bashrc

pytorch3d

源码地址
安装最新的0.7.8版本即可
将pytorch3d放入工作目录

注意,优快云上另一篇博客说要:修改setup.py中的extra_compile_args = {“cxx”: [“-std=c++14”]}为extra_compile_args = {“cxx”: [“”]}:
清不要这么做,会报错的

执行如下命令

# 激活虚拟环境
activate gen6d
# 进入到pytorch3D目录下
cd path_to_your_pytorch3d
export CFLAGS="-Wno-strict-prototypes"
set DISTUTILS_USE_SDK=1
set PYTORCH3D_NO_NINJA=1
# 开始安装
pip install .

下载会持续很久,哪怕用了魔法;笔者回去睡了一觉才完成,也不知道具体多少时间

使用如下程序检查安装是否成功:

import pytorch3d
print(pytorch3d.__version__)

数据集

我们使用官方数据集
主要下载预训练模型gen6d_pretrain.tar.gz,测试数据集genmop.tar.gz,处理后数据集linemod.tar.gz三个包
然后解压到gen6d/Gen6D/data目录下,且注意不要有两级data文件夹

请保证目录和笔者一致,否则不能保证正确运行

(base) star@star:~/gen6d$ tree -L 2
.
├── cub-1.17.2
│   ├── CHANGELOG.md
│   ├── cmake
│   ├── CMakeLists.txt
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── cub
│   ├── examples
│   ├── LICENSE.TXT
│   ├── README.md
│   └── test
├── Gen6D
│   ├── align-data
│   ├── assets
│   ├── colmap_script.py
│   ├── compute_align_poses.py
│   ├── configs
│   ├── custom_object.md
│   ├── data
│   ├── dataset
│   ├── estimator.py
│   ├── eval.py
│   ├── LICENSE
│   ├── network
│   ├── predict.py
│   ├── prepare.py
│   ├── __pycache__
│   ├── README.md
│   ├── requirements.txt
│   ├── train
│   ├── train_model.py
│   └── utils
├── pytorch3d-0.7.8
│   ├── build
│   ├── dev
│   ├── docs
│   ├── INSTALL.md
│   ├── LICENSE
│   ├── LICENSE-3RD-PARTY
│   ├── packaging
│   ├── projects
│   ├── pytorch3d
│   ├── pytorch3d.egg-info
│   ├── README.md
│   ├── scripts
│   ├── setup.cfg
│   ├── setup.py
│   ├── tests
│   └── website
└── test.py

26 directories, 26 files

至此,环境已搭建结束


测试效果

注意要在clone下来的Gen6D项目的目录下执行,如下:

(gen6d)star@star:~/gen6d/Gen6D$ python eval.py --cfg configs/gen6d_pretrain.yaml --object_name genmop/plug_cn

这里是测试充电器的位姿估计,结果保存在~/gen6d/Gen6D/data/vis_final/gen6d_pretrain/genmop/plug_cn目录下


使用自己的数据集

工具安装 Colmap

先说明可能存在的报错,以及对应的处理方案(完整的解决方案包含在后面的完整流程中):

  1. 执行make时CPU占满导致死机(Ceres优化库)
    使用make -j2, 而不是make -j
  2. 执行cmake时哈希值校验错误,导致项目构建失败(colmap源码)
    预先下载好哈希压缩包,并放入目标文件夹,报错原因是构建时下载的压缩包格式有问题,导致无法被解析
  3. freeimage的一系列函数找不到
    举例如下:
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libfreeimage.so: undefined reference to _TIFFDataSize@LIBTIFF_4.0'
    
    在cmake构建前,先退出anaconda的环境,然后重新安装absl
  4. absl版本报错,具体如下
    CMake Error at /usr/local/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake:76 (find_package):
      Could not find a configuration file for package "absl" that is compatible
      with requested version "20240116".
    
      The following configuration files were considered but not accepted:
    
        /usr/lib/x86_64-linux-gnu/cmake/absl/abslConfig.cmake, version: 20210324
        /lib/x86_64-linux-gnu/cmake/absl/abslConfig.cmake, version: 20210324
    
    Call Stack (most recent call first):
      /usr/local/lib/cmake/Ceres/CeresConfig.cmake:187 (find_dependency)
      cmake/FindDependencies.cmake:41 (find_package)
      CMakeLists.txt:118 (include)
    
    该问题与上一个问题是相关的,重新编译安装即可

文件结构

顶级工程目录如下:
colmap
├── ceres-solver
└── colmap

具体指令
  1. 安装相关库
sudo apt-get install \
    git \
    cmake \
    build-essential \
    libboost-program-options-dev \
    libboost-filesystem-dev \
    libboost-graph-dev \
    libboost-system-dev \
    libboost-test-dev \
    libeigen3-dev \
    libsuitesparse-dev \
    libfreeimage-dev \
    libmetis-dev \
    libgoogle-glog-dev \
    libgflags-dev \
    libglew-dev \
    qtbase5-dev \
    libqt5opengl5-dev \
    libcgal-dev\
    libcgal-qt5-dev
  1. 安装Ceres优化库
    在顶级工程目录下,执行
sudo apt-get install libatlas-base-dev libsuitesparse-dev
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
git checkout $(git describe --tags) # Checkout the latest release
mkdir build
cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j2
sudo make install

注意:要用make -j2,而不是make -j,否则可能导致崩溃

  1. 安装colmap

为了避免cmake版本问题,在/colmap/colmap/CMakeLists.txt中,添加下面的变量定义:(建议放在定义COLMAP_VERSION的前一行)

set(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")

在顶级工程目录下,执行下面的指令:

conda deactivate
git clone https://github.com/colmap/colmap.git
cd colmap
mkdir build
cd build

# 排除哈希值校验问题
wget https://github.com/PoseLib/PoseLib/archive/8028473d92c9347794a0e3d3541863b5cbb15743.zip
mkdir -p _deps/poselib-subbuild/poselib-populate-prefix/src
# 注意根据自己的本地路径对下面的指令进行修改
cp /path/to/8028473d92c9347794a0e3d3541863b5cbb15743.zip _deps/poselib-subbuild/poselib-populate-prefix/src/

另起一个终端,执行:

# 处理absl版本问题
cd
conda deactivate # 确保完全退出canda,连base也看不到
git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
git checkout lts_2024_01_16
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install

回到原来的终端,执行:

cmake .. -DCMAKE_EXE_LINKER_FLAGS="-ltiff"
make -j10
# 执行完make指令后,会有一些浅蓝色提示(BOOST_PRAGMA_MESSAGE()可以不管,它不属于报错
sudo make install

再执行

colmap -h		# 查看colmap的版本和指令
colmap gui		# 查看colmap的UI界面

效果如下:
在这里插入图片描述
制作完成数据集后,
用vim打开object_point_cloud.ply,确保框中的部分没有奇怪的符号,全都要符合ascii码,也不要完整删除任何一行,否则会导致点云识别错误
在这里插入图片描述
如果没有安装ffmpeg,则执行下面的指令新版 OpenH264 的 SONAME 从 libopenh264.so.5 升级到 libopenh264.so.6,导致 FFmpeg 运行时找不到原来的 .so.5,进而发生报错,因此需要用conda安装特定版本,以处理相关环境问题

# 确认激活gen6d虚拟环境的情况下,再执行下面的指令
sudo apt install ffmpeg
# 为ffmpeg安装依赖
conda install -c conda-forge openh264=2.3.1
# 验证安装正确
ffmpeg --version
# 查找ffmpeg可执行文件的路径
which ffmpeg

确认ffmpeg没有问题后,执行

python predict.py --cfg configs/gen6d_pretrain.yaml \
                  --database custom/mouse \
                  --video data/custom/video/mouse-test.mp4 \
                  --resolution 960 \
                  --transpose \
                  --output data/custom/mouse/test \
                  --ffmpeg <path-to-ffmpeg-exe>
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值