您的位置:首页 > Web前端

windows caffe 跑自己的数据遇到的问题

2016-03-28 13:55 211 查看
花了一个多星期准备的数据终于要在caffe上跑,选择了imagenet,用的工具为convert_imageset.exe(要自己先编译),搭环境太复杂太辛苦就不说了。​

1.

准备数据,在你的caffe文件夹下新建文件目录,在目录下新建两个文件train和val​

train和val里面分别放准备好的jpg训练集和验证集,还有分别有train.txt和val.txt​

可以写批处理文件将train和val里面的图片数据读到这两个txt文件里面,同时加上标签,如果是两类的,可以在一类后标上1,一类标上2。​​​

2.​

编译转换工具convert_imageset.exe,写批处理文件

我这里是​​

SET GLOG_logtostderr=1

bin\convert_image.exe data/train/ data/train/train.txt data/trainlmdb 0​

pause​

然后双击,数据就转好了​

3​

计算均值​​​​

编译计算图像均值的工具compute_image_mean.cpp

再写一个批处理文件​​​​​

SET GLOG_logtostderr=1​

bin\compute_image_mean.exe data/trainlmdb data/image_mean.binaryproto​

pause​​

4.​

imagenet_solver.prototxt,imagenet_train.prototxt和imagenet_val.prototxt文件修改​

首先是imagenet_solver,prototxt​

改train_net和test_net的路径​

然后imagenet_train.prototxt里面source改为数据的路径​,mean_file改为图像均值路径​

imagenet_val.prototxt也一样。​

5.

训练​

前提是已经编译好caffe.exe​

写一个批处理文件​

.\bin\caffe.exe train --solver=data/image_solver.prototxt --gpu=all​

pause​​

前提是imagenet_solver.prototxt,imagenet_train.prototxt和imagenet_val.prototxt都已经修改好。​

6.

遇到的问题

failed to open leveldb 问题

准备好数据之后就是转成leveldb或者lmdb,在这里我遇到了一个问题,当你出现failed to open leveldb ...的时候,有可能是你想用leveldb,可是你转换的数据却是lmdb,这个时候应该在网络文件imagenet_train.prototxt里面的数据结构里改成backend:lmdb​,如果没有的话就加上这一行。那么实际上你的网络用的是你默认转的lmdb格式。​​​

数据转换后大小1TB或者提示磁盘不足的问题

数据转好了,却遇到另一个头疼的问题,就是数据占用了1TB,试了其它的不同大小的数据依然是1TB,而且是标准的1TB,所以怀疑在程序里面设定了开辟1TB的磁盘来存储,因为自己用的服务器有1.9TB所以开辟第一次的时候成功了,第二次说磁盘不足,所以问题还是在程序里面。在github上有人也出现了这样的情况,但是他们很多是在convert_mnist.cpp文件里出现的,​​

CHECK_EQ(mdb_env_set_mapsize(mdb_env,1099511627776),MDB_SUCCESS) //1TB​​

改成

CHECK_EQ(mdb_env_set_mapsize(mdb_env,1073741824),MDB_SUCCESS) //1GB​

但是我在convert_imageset.cpp里面没有找到相关代码,最后发现是在db_lmdb.cpp里面namespace caffe{

namespace db{​​

const size_t LMDB_MAP_SIZE = 1099511627776; 改成​​

const size_t LMDB_MAP_SIZE = 1073741824; //1GB

}

}

然后编译​

好了,执行批处理文件,转出来的数据就是1GB啦!

转载:http://blog.sina.com.cn/s/blog_721a75e50102w5kq.html


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: