写在前面
算法和代码框架均来自港大的课题组
gen6d介绍页面
我只是拿来做一个毕设,答辩结束后会遵循GPL协议开放所有代码
这篇博客仅作为开发日志,记录一下部署过程中的各种问题和解决方法,仅供学习讨论
此外,不得不说,这项工作的识别估计的效果不错,但是效率有点太低了,在GTX1650上处理一帧数据需要1.07秒
笔者环境
| 模块 | 版本号 |
|---|---|
| Ubuntu | 22.04 |
| CUDA | 11.8, |
| python | 3.8 |
| pytorch | 2.4.1 |
| pytorch3d | 0.7.8 |
| CUB | 1.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
先说明可能存在的报错,以及对应的处理方案(完整的解决方案包含在后面的完整流程中):
- 执行make时CPU占满导致死机(Ceres优化库)
使用make -j2, 而不是make -j - 执行cmake时哈希值校验错误,导致项目构建失败(colmap源码)
预先下载好哈希压缩包,并放入目标文件夹,报错原因是构建时下载的压缩包格式有问题,导致无法被解析 - freeimage的一系列函数找不到
举例如下:
在cmake构建前,先退出anaconda的环境,然后重新安装absl/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libfreeimage.so: undefined reference to _TIFFDataSize@LIBTIFF_4.0' - 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
具体指令
- 安装相关库
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
- 安装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,否则可能导致崩溃
- 安装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>

2445

被折叠的 条评论
为什么被折叠?



