PoseNet简介及运行

PoseNet简介

PoseNet是剑桥大学做的一个视觉定位模型,能够通过一张彩色图像定位你的位姿信息。在一个大的城市环境下,它只需要花费5ms来获取你的位姿信息,精度比GPS更高。并且相较于GPS,它能够确定你的方向且能够在室内运行。

我们将卷积神经网络应用于相机的姿态回归中。因为我们训练了一个端到端的网络用于计算相机的位姿,所以我们的系统十分简单。与其他的系统不同,我们的不需要一个大的数据集或者地标。相反,它学习了具有鲁棒性的高级特征,能够处理多种不同类型的相机,运行模糊,天气,行人以及其他干扰。它高度可扩展,只需要MB的存储空间并且能够以5ms一张图像的速度在大型的城市环境中进行定位。

PoseNet是用剑桥地标数据集进行训练的。它是一个大型的城市环境定位数据集,有这超过12000张剑桥周围的6类场景图像,每张图像都对应着6自由度的相机位姿信息。

Getting Started:

1.下载资源

下载源码:code
下载dataset及weights

2.安装

按照安装caffe的过程安装:

cp Makefile.config.example Makefile.config

修改Makefile.config,注意将WITH_PYTHON_LAYER := 1前的注释去掉。

make -j4
make pycaffe

3.测试

根据目前的了解,大概知道PoseNet的输入是一张图像,然后输出是对应相机的位姿。那么下面就介绍如何测试这一模型实现PoseNet根据图像定位的功能。

(1)得到lmdb文件

建立如下的文件目录

  • Cambridge
    • king1.png
    • king2.png
    • king3.png
    • king8.png
    • kingdataset_test.txt
      这里的8张图片我是从他们的官网直接保存的。kingdataset_test.txt的内容如下:
# creat by GPH
#
#
1.png 0 0 0 0 0 0 0
2.png 0 0 0 0 0 0 0
3.png 0 0 0 0 0 0 0
4.png 0 0 0 0 0 0 0
5.png 0 0 0 0 0 0 0
6.png 0 0 0 0 0 0 0
7.png 0 0 0 0 0 0 0
8.png 0 0 0 0 0 0 0

之后修改caffe-posenet/posenet/scripts/create_posenet_lmdb_dataset.py的1,11,12行依次如下(根据自己的具体情况修改):
第1行caffe_root = '/home/gph/Desktop/caffe-posenet-master' # Change to your directory to caffe-posenet
第11行directory = '/home/gph/Desktop/cambridge/king'
第12行dataset = 'dataset_test.txt'
注意第11行的king必须有,虽然没有相应的文件夹,其中道理想想大家应该会明白的。
在某个目录下运行这个.py文件,就会在该目录下生成posenet_dataset_lmdb文件夹,得到lmdb数据。运行的命令python <path to>/create_posenet_lmdb_dataset.py

(2)得到均值文件

一般情况下均值文件应该为训练模型时的数据的均值文件,但是作者并没有提供,想要跑同测试,又必须有。训练数据集有5G大,我不想下,所以就用上面生成的lmdb数据得到一个临时的均值文件,这会让模型计算的结果是错误的,但是能跑通。所以没关系吧。。。
直接利用caffe提供的均值文件计算程序即可得到均值文件mean.binaryproto

gph@gph-pc:~/Desktop/caffe-posenet-master$ ./build/tools/compute_image_mean ~/Desktop/cambridge/posenet_dataset_lmdb/ ~/Desktop/cambridge/mean.binaryproto

(3)运行

修改test_kingcollege.prototxt
修改其中name为data,phase为TEST的层的source和mean_file的路径,如下:

layers {
  top: "data"
  top: "label"
  name: "data"
  type: DATA
  data_param {
    source: "/home/gph/Desktop/cambridge/posenet_dataset_lmdb"
    batch_size: 1
    backend: LMDB
  }
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 224
    mean_file: "/home/gph/Desktop/cambridge/mean.binaryproto"
  }
}

即可运行,命令为:python posenet/scripts/test_posenet.py --model PoseNet/train_kingscollege.prototxt --weights PoseNet/weights_kingscollege.caffemodel --iter 8
结果为:

I1218 11:02:30.216797  7509 net.cpp:283] Network initialization done.
posenet/scripts/test_posenet.py:49: RuntimeWarning: invalid value encountered in divide
  q1 = pose_q / np.linalg.norm(pose_q)
Iteration:   0   Error XYZ (m):   21.2534   Error Q (degrees):   nan
Iteration:   1   Error XYZ (m):   21.9898   Error Q (degrees):   nan
Iteration:   2   Error XYZ (m):   21.8565   Error Q (degrees):   nan
Iteration:   3   Error XYZ (m):   19.3715   Error Q (degrees):   nan
Iteration:   4   Error XYZ (m):   18.4185   Error Q (degrees):   nan
Iteration:   5   Error XYZ (m):   34.0538   Error Q (degrees):   nan
Iteration:   6   Error XYZ (m):   29.4733   Error Q (degrees):   nan
Iteration:   7   Error XYZ (m):   19.9967   Error Q (degrees):   nan
/usr/local/lib/python2.7/dist-packages/numpy/lib/function_base.py:3578: RuntimeWarning: Invalid value encountered in median for 1 results
  RuntimeWarning)
Median error  21.5549297333 m  and  nan degrees.
Success!

可见运行成功了!

问题记录

1.No module named lmdb

错误如下:

Traceback (most recent call last):
  File "../caffe-posenet-master/posenet/scripts/create_posenet_lmdb_dataset.py", line 6, in <module>
    import lmdb
ImportError: No module named lmdb

安装lmdb工具包:

sudo pip install lmdb

2.No module named sklearn.preprocessing

Traceback (most recent call last):
  File "posenet/scripts/test_posenet.py", line 9, in <module>
    from sklearn.preprocessing import normalize
ImportError: No module named sklearn.preprocessing

安装机器学习库scikit-learn

sudo pip install scikit-learn
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值