PVN3D学习(一):跑通PVN3D

服务器环境:

  • ubuntu 18.04 + python3 + torch1.4 + cuda10.1 + nvidia-driver-445

package安装

  • Install tkinter sudo apt install python3-tk ----python GUI的一个库
  • Install python-pcl
#git clone比较慢,我直接在https://github.com/Tuebel/python-pcl下载压缩包然后解压到指定路径,下面安装其他包也一样
sudo apt install libpcl-dev libvtk6-dev
cd python-pcl
python3 setup.py install
  • Install PointNet++

    # 在https://github.com/erikwijmans/Pointnet2_PyTorch下载压缩包解压
    cd Pointnet2_PyTorch
    pip3 install -r requirements.txt
    cd ..
    python3 setup.py build_ext  
    

    这里要注意两点:

    1、nvidia-driver版本要大于440,不然在安装requirments包的时候会报错

    2、这里的setup.py是PVNet3D中的setup.py,而不是Pointnet本身的setup.py

DataSets下载和链接

  • LineMod数据集下载链接

  • 下载完成后,需要做一个软链接

ln -s path_to_unzipped_Linemod_preprocessed pvn3d/datasets/linemod/

注:官网提供的数据集除了LineMod之外,还有YCB-Video数据集,官方的论文也是用的这种数据集,下载链接https://rse-lab.cs.washington.edu/projects/posecnn/

生成合成数据

  • 首先,生成数据集中每种物体的合成数据(这里指网络输入的rgbd数据和fuse的数据)

  • 下载安装raster_trinangle,下载地址

    chmod +x ./rastertriangle_so.sh
    ./rastertriangle_so.sh
    

    执行sh脚本会报一个错:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pmaO586J-1624517899322)(D:\Typora\image-20210525101331465.png)]

    解决:安装libopencv-dev依赖包 sudo apt-get install libopencv-dev

  • 将数据集做一个软连接到raster_trinangle的目录下,注意,数据集的路径要用绝对路径

    ln -s path_to_Linemod_preprocessed ./Linemod_preprocessed
    
  • 下载 SUN2012pascalformat dataset,下载链接

    ln -s path_to_SUN2012pascalformat ./
    
  • 产生数据

    #产生合成数据
    python3 rgbd_renderer.py --help
    python3 rgbd_renderer.py --cls ape --render_num 70000
    
    #产生fusing数据
    python3 fuse.py --help
    python3 fuse.py --cls ape --fuse_num 10000
    

训练

  • 为目标物体训练模型

    cd pvn3d
    python3 -m train.train_linemod_pvn3d --cls ape
    

    执行报错:RuntimeError: DataLoader worker (pid(s) ***, ***, ***, ***) exited unexpectedly

    解决:参考(14条消息) 正确解决pytorch报错:RuntimeError: DataLoader worker (pid(s) ***, ***, ***, ***) exited unexpectedly,亲测有效_脆皮茄条的博客-CSDN博客

  • 该训练代码中是将train 中的train_linemod_pvn3d.py主函数的numer_workers都改成0

  • 跑成功的界面显示如下:可以看出训练时间还是需要比较长的

代码跑起来时候的界面

  • 训练完后,会在train_log/linemod/checkpoints/{cls}生成{cls}_pvn3d_best.pth.tar包

评估

  • 修改eval_linemod.sh中的cls为自己训练的物体

  • 执行

    ./eval_linemod.sh
    
  • 结果:
    PVN3D学习(一):跑通PVN3D_第1张图片

利用预训练模型

  • 下载预训练好的模型

We provide our pre-trained models for each object at onedrive link, baiduyun link (access code(提取码): 8kmp).

下载完后将训练模型放到对应的目录:
Download them and move them to their according folders. For example, move the ape_pvn3d_best.pth.tar to train_log/linemod/checkpoints/ape/. Then revise tst_mdl=train_log/linemod/checkpoints/ape/ape_pvn3d_best.path.tar for testing.

  • lineMOD dataSet测试
# commands in demo_linemod.sh
cls='ape'
tst_mdl=train_log/linemod/checkpoints/${cls}/${cls}_pvn3d_best.pth.tar
python3 -m demo -dataset linemod -checkpoint $tst_mdl -cls $cls

结果:
PVN3D学习(一):跑通PVN3D_第2张图片
PVN3D学习(一):跑通PVN3D_第3张图片

  • YCB-Video dataSet
# commands in demo_ycb.sh
tst_mdl=train_log/ycb/checkpoints/ycb_pvn3d_best.pth.tar
python3 -m demo -checkpoint $tst_mdl -dataset ycb

结果:(这个数据集涉及到多个不同视频流的帧,这里显示出来的是某视频流的某个帧)

PVN3D学习(一):跑通PVN3D_第4张图片

PVN3D学习(一):跑通PVN3D_第5张图片

后续

10.22日更:由于写这篇文章,引起来很多读者的兴趣,在复现的过程中也确实遇到很多问题,一个人有时候确实难以解决。但是由于本人已经不从事位姿估计这个领域了,因此出于热心,我将一部分读者统一起来建了个位姿估计交流群,里面有工作或者在读的从事这个领域的人员。大家想进群的私聊我一下。无偿进群的哈~~ 仅仅出于交流目的,欢迎大家一键三连。

你可能感兴趣的:(位姿估计,人工智能,pytorch)