PoseNet是剑桥大学的Alex Kendall提出的利用深度学习进行视觉定位,其目的是通过输入一张彩色图像判断相机的位置以及姿态,定位精度比GPS高,且能够知道相机的姿态,而且只需要5ms就可定位成功。原文章可以参照:PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization。
这篇博客是将作者的网络与数据在自己机器上运行的一个记录,过程有些小坎坷,不过都解决了。
作者开源了代码与数据,可以免费下载:
代码下载:caffe-posenet-master
数据下载:data
还有作者训练好的网络参数:weights
数据有点大,我只下载了kingscollege那一组数据,总共有5.6G。因为服务器在国外,普通下载非常慢,我是购买VPN下载的,中间有出现下载一半断掉的情况,比较考验耐心。建议用一些下载工具,比如迅雷等进行离线下载会比较稳点。
这一步很重要,因为之前我机器上已经配置过caffe,就想偷懒直接将./caffe-posenet-master/posenet拷贝到原来的caffe目录下,运行的时候会出现错误,错误如图所示:
cp Makefile.config.example Makefile.config
修改Makefile.config,注意将WITH_PYTHON_LAYER := 1前的注释去掉。
然后编译:
make all -j8 #-j根据自己电脑配置决定
如果出现一些错误,可以参考我之前的一篇博客(Ubuntu16.04+CUDA8.0+caffe配置 )第六部分。
最后编译pycaffe:
make pycaffe -j8
a.修改caffe-posenet-master/posenet/scripts下的create_posenet_lmdb_dataset.py文件:
将第1行中的“caffe_root”的值改成自己caffe-posenet-masterd的路径;
将第11行中的“directory”的值改成自己安放图片数据的路径;
将第12行中的“dataset”的值改成“dataset_test.txt”(创建测试数据集)或“dataset_train.txt”(创建训练数据集)。
b.运行以下代码创建lmdb文件:
python caffe-posenet-master/posenet/scripts/create_posenet_lmdb_dataset.py
作者没有给创建均值文件的脚本,可以自己创建,在某目录下新建一个名为“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_test_$DBTYPE $PATH/mean.binaryproto
echo "Done."
然后运行这个脚本文件创建均值文件:
./create_posenet_mean.sh #注意运行脚本文件的路径要对
主要是修改数据路径和均值文件路径,以我的为例,修改“train_kingscollege.prototxt”(作者训练好的,记得下载)中name为data,phase为TEST的层的source和mean_file的路径,如图3所示:
运行命令:
python posenet/scripts/test_posenet.py --model ./train_kingscollege.prototxt --weights ./weights_kingscollege.caffemodel --iter 8 #这是我的路径,注意修改路径
注:“weights_kingscollege.caffemodel”文件也是作者训练好的,记得下载。
运行结果图: