PoseNet运行详细过程

PoseNet是剑桥大学的Alex Kendall提出的利用深度学习进行视觉定位,其目的是通过输入一张彩色图像判断相机的位置以及姿态,定位精度比GPS高,且能够知道相机的姿态,而且只需要5ms就可定位成功。原文章可以参照:PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization。
这篇博客是将作者的网络与数据在自己机器上运行的一个记录,过程有些小坎坷,不过都解决了。

(1)代码与数据下载

作者开源了代码与数据,可以免费下载:
代码下载:caffe-posenet-master
数据下载:data
还有作者训练好的网络参数:weights
数据有点大,我只下载了kingscollege那一组数据,总共有5.6G。因为服务器在国外,普通下载非常慢,我是购买VPN下载的,中间有出现下载一半断掉的情况,比较考验耐心。建议用一些下载工具,比如迅雷等进行离线下载会比较稳点。

(2)运行步骤

1.编译caffe-posenet-master

这一步很重要,因为之前我机器上已经配置过caffe,就想偷懒直接将./caffe-posenet-master/posenet拷贝到原来的caffe目录下,运行的时候会出现错误,错误如图所示:

PoseNet运行详细过程_第1张图片
图1 运行错误

这个错误纠结很久,明明数据转换正确,网络参数也都是按默认的,但就是在网络初始化时,将样本标签进行切片就出现错误。后来在GitHub上看到了原作者Alex Kendall的回答:

PoseNet运行详细过程_第2张图片
图2 Alex Kendall关于错误的回答

显然,必须重新编译caffe-posenet-master,因为caffe-posenet-master的标签数据与标准caffe的标签数据不一样,使用原来的caffe运行网络就会出现标签无法切片的问题。
编译的方法跟编译caffe的方法是一样的,首先将Makefile.config.example的内容复制到Makefile.config:

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

2创建lmdb文件

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

3创建均值文件

作者没有给创建均值文件的脚本,可以自己创建,在某目录下新建一个名为“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 #注意运行脚本文件的路径要对

4修改网络配置

主要是修改数据路径和均值文件路径,以我的为例,修改“train_kingscollege.prototxt”(作者训练好的,记得下载)中name为data,phase为TEST的层的source和mean_file的路径,如图3所示:


PoseNet运行详细过程_第3张图片
图3 网络配置

还要修改caffe-posenet-master/posenet/scripts/est_posenet.py中的caffe-posenet-master的路径:

PoseNet运行详细过程_第4张图片
图4 路径修改

5运行

运行命令:

python posenet/scripts/test_posenet.py --model ./train_kingscollege.prototxt --weights ./weights_kingscollege.caffemodel --iter 8 #这是我的路径,注意修改路径

注:“weights_kingscollege.caffemodel”文件也是作者训练好的,记得下载。
运行结果图:


PoseNet运行详细过程_第5张图片
图5 运行结果

从结果可以看出,定位位置精度为0.8m,角度精度为3.6°。

你可能感兴趣的:(深度学习,机器学习)