PoseNet文章复现记录

下载链接

  1. 文章:PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization
  2. 代码:alexgkendall/caffe-posenet
  3. 数据集:地址
  4. 模型参数:地址

编译caffe-posenet

  1. 参考上一篇文章:Ubuntu下Caffe安装记录
  2. 问题解决:

    In file included from ./include/caffe/util/device_alternate.hpp:40:0,
                        from ./include/caffe/common.hpp:19,
                         from src/caffe/syncedmem.cpp:1:
        ./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’:
        ./include/caffe/util/cudnn.hpp:127:41: error: too few arguments to function ‘cudnnStatus_t cudnnSetPooling2dDescriptor(cudnnPoolingDescriptor_t, cudnnPoolingMode_t, cudnnNanPropagation_t, int, int, int, int, int, int)’
                 pad_h, pad_w, stride_h, stride_w));
                                                 ^
        ./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro ‘CUDNN_CHECK’
     cudnnStatus_t status = condition; \

    方法:

    • 将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.
    • 将./include/caffe/layers里的,所有以cudnn开头的文件,例如cudnn_conv_layer.hpp。 都替换成最新版的caffe里的相应的同名文件。
    • 将./src/caffe/layer里的,所有以cudnn开头的文件,例如cudnn_lrn_layer.cu, cudnn_pooling_layer.cpp, cudnn_sigmoid_layer.cu 都替换成最新版的caffe里的相应的同名文件。

切换Pycaffe环境

# 因为我有俩个caffe,分别是官方的和posenet的,分别都编译了,
# import caffe时需指定导入哪一个。

sudo gedit ~/.bashrc
# 更改完caffe路径或者caffe-posenet路径
source ~/.bashrc

数据集介绍

  1. 以KingsCollege举例,下面包含8个序列的场景图片。2,3,7是作为测试集(dataset_test.txt),1,4,5,6,8作为训练集(dataset_train.txt)。

    这里写图片描述

  2. 下载的模型文件如下图。

    这里写图片描述

创建lmdb数据集

  1. 修改caffe-posenet/posenet/scripts下的create_posenet_lmdb_dataset.py文件。一共三处,分别是1,11,12行;

    这里写图片描述

  2. 安装lmdb;

    sudo pip install lmdb
  3. 创建数据集:python posenet/scripts/create_posenet_lmdb_dataset.py。

    这里写图片描述

  4. 创建完的数据集生成在了caffe-posenet目录下,下图的posenet_dataset_lmdb文件夹;

    这里写图片描述

创建均值文件

  1. 新建一个名为“create_posenet_mean.sh”的文件;

    
    #!/usr/bin/env sh
    
    set -e
    PATH=./data
    DATA=./data
    DBTYPE=lmdb
    echo "Computing image mean..."
    ./build/tools/compute_image_mean -backend=$DBTYPE \
      $PATH/posenet_dataset_$DBTYPE $PATH/mean.binaryproto
    echo "Done."

    这里写图片描述

  2. 将上一步生成的lmdb数据集放到caffe-posenet/data目录下;
  3. 运行create_posenet_mean.sh,得到mean.binaryproto文件;

    
    # 添加可执行权限
    
    chmod 777 posenet/scripts/create_posenet_mean.sh
    ./posenet/scripts/create_posenet_mean.sh

    这里写图片描述

  4. 将数据和均值文件改名,前缀加train_;
    这里写图片描述

修改网络配置

  1. 修改“train_kingscollege.prototxt”中name为data,phase为TEST和TRAIN的层的source和mean_file的路径:

    这里写图片描述
    这里写图片描述

  2. 安装python-tk:sudo apt-get install python-tk。

直接测试

  1. 输入命令:

    sudo python posenet/scripts/test_posenet.py --model models/PoseNet_rawmodel/train_kingscollege.prototxt --weights models/PoseNet_rawmodel/weights_kingscollege.caffemodel --iter 8
  2. 测试结果:

    这里写图片描述

结果

  1. 误差没有文章效果好,是为什么呢?

参考文章

  1. PoseNet运行详细过程
  2. PoseNet简介及运行

猜你喜欢

转载自blog.csdn.net/bskfnvjtlyzmv867/article/details/79199630