【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb
前期准备:
文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片
文件夹test:同train,有多少类就有多少个子文件夹
trainlabels.txt : 存的是训练集的标签
testlables.txt: 存的是测试集的标签
(特别注意:文件的路径以及文件名要对应)
第一步
生成train文件夹和test文件夹以及标签文件。本文用的是matlab对数据集进行读取,然后输出图片到相应文件夹中,并且生成标签文件。此处给出matlab的代码,请自行分析。
%% 实现图片的输出,将图片输出到train和test两个文件夹下,并且对图片进行重命名
% 同时给所有图片打标签,存于test_labels.txt trainlabels.txt
%
% clear
rand('seed',1);
datadir = ('D:\matconvnet-beta23\data\chars74K\Fnt'); % 原数据集所在路径
catedir=dir(datadir); % 获取数据集下信息
trainratio = 0.8; % 百分之八十训练
train_labels= fopen('train_labels.txt','wt'); % 创建标签文件
test_labels = fopen('test_labels.txt','wt');
class_num = 0 ; % 记录类别
for i =3:length(catedir)
sampdir=dir(fullfile(datadir,catedir(i).name,'\*.png')); % 获取类文件夹下 png图片,
disp(['category ', num2str(i-2) , ' have ', num2str(length(sampdir)),'instance.']); new_folder_train = ['./train/',catedir(i).name]; % 创建各类文件夹,按第i类创建
new_folder_test = ['./test/',catedir(i).name];
mkdir(new_folder_train);
mkdir(new_folder_test);
class_num =class_num + 1;
for j = 1:length(sampdir)
if j==1
krand = randperm(length(sampdir)); % 随机选取图片,防止过拟合
end
kk = krand(j);
img = imread(fullfile(datadir,catedir(i).name,sampdir(j).name)); % 读取
name = [catedir(i).name,'\',sampdir(kk).name]; % 输出每张图片的名称 if j < length(sampdir) *trainratio % j是读取的第j个样本(子类中),j小于**时,设置为1,1是表示训练
imwrite(img,[new_folder_train,'/',sampdir(kk).name]); % 注 :‘.png’
fprintf(train_labels,'%s %s\n',name,num2str(class_num-1)); % 从0开始编号,写label的txt文件
else
imwrite(img,[new_folder_test,'/',sampdir(kk).name]);
fprintf(test_labels,'%s %s\n',name,num2str(class_num-1)); % 从0开始编号
end
disp(['category ', num2str(i-2) , ' have ', num2str(length(sampdir)-2),' sample. ' ...
'sample ', ' ------ ', num2str(j) ]);
end
end
fclose(train_labels);
fclose(test_labels);
来看看生成的文件,此处将数据存于caffe-master\data\Chars74k下,因此train和test文件夹是在caffe-master\data\Chars74k下。
如图所示,train文件夹里有62个子文件夹,分别代表62个类别,每个子文件夹里就是图片。Test文件夹同理。
如图所示,这训练集的标签文件,分两个部分。第一部分是路径,此处要注意, “Sample001\img001-00051.png ” 要与train文件夹里的图片的文件名一一对应,否则在用convert_imageset.exe进行转换格式时候会出现 找不到文件的提示。
(PS:我直接就是在matlab中输出图片时,多加了’.png’,导致图片的文件名是 Sample001\img001-00051.png.png 最终导致找不到文件)
第二部分就是标签了,这里的标签是从0开始表示第一个类别。特别注意,txt文件中,文件路径和标签中有一个空格。
- 第二步
有了train和test以及对应标签文件,就可以利用 convert_imageset.exe将图片转换成LMDB或者LEVELDB的格式,这里采用批处理的方式。首先在caffe-master\data\Chars74k 文件夹下创建txt文件重命名为:convert_chars74k_LMDB.bat
一定要把后缀改成 .bat ,然后将以下代码复制到文本中,保存。
D:\caffe-master\Build\x64\Release\convert_imageset.exe --resize_width= --resize_height= ./train/ train_labels.txt train_lmdb -backend=lmdb
D:\caffe-master\Build\x64\Release\convert_imageset.exe --resize_width= --resize_height= ./test/ test_labels.txt test_lmdb -backend=lmdb
Pause
这里的每行包含七个部分,第一个部分:D:\caffe-master\Build\x64\Release\convert_imageset.exe 表示 convert_imageset.exe所在路径(PS,若是用Debug生成的,则在将Release改成Debug即可)
第二、三部分,是对原始图片进行了resize,第四部分:
./train/ 是训练图片文件所在路径,此处用了相对路径的形式(不了解相对路径的同学,请度娘 ./ ../的作用) 第五部分,train_labels.txt是训练集的标签
第六部分:train_lmdb 是生成LMDB格式文件的文件名
第七部分:-backend=lmdb 是所要转成的格式(要转成 leveldb的则改成 -backend=leveldb)
然后双击运行convert_chars74k_LMDB.bat
运行正常的话,在文件夹caffe-master\data\Chars74k下会出现
test_lmdb 和train_lmdb 两个文件夹。至此,已经将自己的数据集转换成为LMDB格式的数据了,即caffe可读的数据格式。
- 第三步
训练
此处和训练Mnist和Cifar-10一样可参考(http://blog.csdn.net/u011995719/article/details/53998331)
训练需要写两个prototxt文件,一个是描述网络结构的,一个是超参数的设定。
如图所示,一个是网络模型描述,一个是超参数设置,特别注意路径。
写好这两个文件之后,就可以利用caffe.exe进行训练啦。
在文件夹caffe-master\data\Chars74k下,创建txt文件,重命名为caffe_train_Chars74k.bat(注意改后缀),然后复制以下代码:
..\..\Build\x64\Release\caffe.exe train --solver=./Chars74k_solver.prototxt
Pause
同样的,注意路径就好。保存之后,双击运行即可。
【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb的更多相关文章
- 【caffe-windows】 caffe-master 之 训练自己数据集(图片转换成lmdb or leveldb)
前期准备: 文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片 文件夹test:同train,有多少类就有多少个子文件夹 trainlabels.txt : 存的是训练集的标签 ...
- 获取minist数据并转换成lmdb
caffe本身是没有数据集的,但在data目录下有获取数据的一些脚本.MNIST,一个经典的手写数字库,包含60000个训练样本和10000个测试样本,每个样本为28*28大小的黑白图片,手写数字为0 ...
- 使用CSS将图片转换成黑白(灰色、置灰)z转
小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.c ...
- [转]C#将image中的显示的图片转换成二进制
本文转自:http://www.cnblogs.com/shuang121/archive/2012/07/09/2582654.html .将Image图像文件存入到数据库中 我们知道数据库里的Im ...
- 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果
去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...
- ABBYY如何把图片转换成pdf格式
在制作工作文件的时候,有时候会遇到需要进行文件格式转换的情况,比较常见的文件格式转换就包含了Office与pdf格式之间的转换.但除此之外,图片与pdf格式也是可以进行转换的,那么图片要怎么操作,才能 ...
- [转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3804 去年盛夏之时, ...
- C#将image中的显示的图片转换成二进制
原文:C#将image中的显示的图片转换成二进制 1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才 ...
- 运用C语言将图片转换成16进制的字符串(base64)
最近在写手机端的性能测试脚本的时候,发现手机在上传图片数据时,先将图片转换成一堆16进制的字符,将字符传输过去,服务器再将字符解码成图片 我们在loadrunner中测试时,就需要用C语言将图片编码. ...
随机推荐
- 我要好offer之 概率题大总结
1. 利用等概率Rand5生成等概率Rand3 Rand5生成等概率Rand3 这个题目可以扩展为:利用等概率RandM生成等概率RandN (M > N) 这里,我们首先明白一个简单的知识点: ...
- redis批量设置过期时间
Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作.代码如下: redis-cli keys &qu ...
- 转 C++ 面向对象程序设计的基本特点
传送门 Miss it C++ 面向对象程序设计的基本特点 First: 抽象 面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象公共性质并加以描述的过程. 抽象的过程,也是对问题 ...
- Understanding Linux CPU Load - when should you be worried?
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
- AC日记——城市 洛谷 P1401
题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...
- AC日记——【模板】最近公共祖先(LCA)洛谷 P3379
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- BZOJ——1601: [Usaco2008 Oct]灌水
http://www.lydsy.com/JudgeOnline/problem.php?id=1601 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: ...
- 链表的排序 时间复杂度O(nlogn)
思路:用归并排序.对一个链表采用递归进行二等分,直到每个部分有序,然后对其进行合并.其实就是两步,先分解,然后合并有序链表. 代码: //对链表采用递归排序 class Solution { publ ...
- 在spring中使用数据库
若要在spring中使用数据库,首先需要配置数据源. 1.使用数据源连接池,可以使用DBCP(Data Base Connection Pooling) <bean id="datas ...
- POJ2104Kth Number
整体二分模板题, 有些细节需要注意 #include<cstdio> #include<cctype> #include<climits> #include< ...