下载链接
- 文章:PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization
- 代码:alexgkendall/caffe-posenet
- 数据集:地址
- 模型参数:地址
编译caffe-posenet
- 参考上一篇文章:Ubuntu下Caffe安装记录
问题解决:
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
数据集介绍
以KingsCollege举例,下面包含8个序列的场景图片。2,3,7是作为测试集(dataset_test.txt),1,4,5,6,8作为训练集(dataset_train.txt)。
下载的模型文件如下图。
创建lmdb数据集
修改caffe-posenet/posenet/scripts下的create_posenet_lmdb_dataset.py文件。一共三处,分别是1,11,12行;
安装lmdb;
sudo pip install lmdb
创建数据集:python posenet/scripts/create_posenet_lmdb_dataset.py。
创建完的数据集生成在了caffe-posenet目录下,下图的posenet_dataset_lmdb文件夹;
创建均值文件
新建一个名为“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."
- 将上一步生成的lmdb数据集放到caffe-posenet/data目录下;
运行create_posenet_mean.sh,得到mean.binaryproto文件;
# 添加可执行权限 chmod 777 posenet/scripts/create_posenet_mean.sh ./posenet/scripts/create_posenet_mean.sh
- 将数据和均值文件改名,前缀加train_;
修改网络配置
修改“train_kingscollege.prototxt”中name为data,phase为TEST和TRAIN的层的source和mean_file的路径:
- 安装python-tk:sudo apt-get install python-tk。
直接测试
输入命令:
sudo python posenet/scripts/test_posenet.py --model models/PoseNet_rawmodel/train_kingscollege.prototxt --weights models/PoseNet_rawmodel/weights_kingscollege.caffemodel --iter 8
测试结果:
结果
- 误差没有文章效果好,是为什么呢?