【caffe-Windows】训练自己数据——数据集格式转换

Caffe训练cifar10数据集 一:目的 用配置好的Windows版本Caffe(no GPU),训练cifar10数据; 二:cifar10简介 Cifar-10由60000张32*32的RGB彩色图片构成,共10个分类。50000张训练,10000张测试(交叉验证)。这个数据集最大的特点在于将识别迁移到了普适物体,而且应用于多分类(姊妹数据集Cifar-100达到100类,ILSVRC比赛则是100 阅读详情

转自:http://blog.csdn.net/zb1165048017/article/details/52447567(2016-09-06 

目录(?)[+]

前言

看了mnist和cifar的实例(注:Cifar-10是由Hinton的两个大弟子Alex Krizhevsky、Ilya Sutskever收集的一个用于普适物体识别的数据集。Cifar是加拿大牵头投资的一个先进科学项目研究所。),是不是想我们现实中一般都是一张张的图片,和实例里面都不一样呢?那么如何来进行训练呢?为了能够简便点,我们就不自己去采集数据集了,因为第一自己采集的数据集量可能不够,第二,采集的数据集可能标注有很大问题,比如噪声太多等,第三针对每一种数据,我相信有不同的模型去进行classification,并不是一味地套用别人的模型,当然也可以在别人基础上做微调fine tuning。

在这一个教程中,我们利用cifar数据集去模拟现实中的训练。

如果你有自己的数据,可直接进行第二步

第一步

cifar数据集的可视化。读者如果有自己数据集,可以忽视此步骤,此步骤主要用于将cifar 的数据全部转为png图片,并制作相应标签。

先看看我的代码的目录结构:


接下来介绍每一个文件的由来:

①test和train文件夹是我用来存储cifar每一张图片的位置,一个是训练集、一个是测试

②几个mat文件,从cifar的官网去下载matlab version的数据集,解压就可以得到。

③几个.m文件就是我们用来可视化以及图片转存的代码。

下面看这几个程序:

ReadImage.m

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. function  image  = ReadImage( data )  
  2. %data是一维的,1*3072,转换为32*32*3的图片  
  3. image(:,:,1)=reshape(data(1,1:1024),32,32);  
  4. image(:,:,2)=reshape(data(1,1025:2048),32,32);  
  5. image(:,:,3)=reshape(data(1,2049:3072),32,32);  
  6. end  
read_train.m

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. %cifar转image,可视化  
  2. %N*3072维度,每1024分别代表RGB,图像大小32*32  
  3. clear  
  4. clc  
  5. load('batches.meta.mat')  
  6. numpic=0;  
  7. fp=fopen('./train/train_labels.txt','wt');  
  8.   
  9. for i=1:5  
  10.     count=0;  
  11.     str=['data_batch_' num2str(i) '.mat'];  
  12.     fprintf('load %s\n',str);  
  13.     load(str)  
  14.     figure(1)  
  15.     set (gcf,'Position',[50,50,900,900], 'color','w')  
  16.     for j=1:size(data,1)  
  17.         %% 读取图片和标签  
  18.         count=count+1;%每次可视化计数subplot位置  
  19.         numpic=numpic+1;%为图片编号从1开始,规则:序号+图片标签(1-cat,2-frog)  
  20.         image=ReadImage(data(j,:));%按顺序读取图片  
  21.         label=label_names{labels(j,1)+1};%读取对应标签名字  
  22.         %% 每读100张显示一次图片  
  23.          subplot(10,10,count)  
  24.          image=uint8(image);  
  25.          imshow(image);  
  26.          title(label)  
  27.         if mod(count,100)==0  
  28.             count=0;  
  29.             pause(0.1)  
  30.         end  
  31.         %% 存储在文件夹train中  
  32.         picture_name=['./train/' num2str(numpic) label '.png'];  
  33.         name=[num2str(numpic) label '.png'];  
  34.         imwrite(image,picture_name,'png')  
  35.         fprintf(fp,'%s %s\n',name,num2str(labels(j,1)));  
  36.     end  
  37. end  
  38. fclose(fp);  

read_test.m

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. %cifar转image,可视化  
  2. %N*3072维度,每1024分别代表RGB,图像大小32*32  
  3. clear  
  4. clc  
  5. close all  
  6. load('batches.meta.mat')  
  7. numpic=0;  
  8. fp=fopen('./test/test_labels.txt','wt');  
  9. fp1=fopen('./test/test_labels1.txt','wt');  
  10. count=0;  
  11. load test_batch.mat  
  12. figure(1)  
  13. set (gcf,'Position',[50,50,900,900], 'color','w')  
  14. for j=1:size(data,1)  
  15.     %% 读取图片和标签  
  16.     count=count+1;%每次可视化计数subplot位置  
  17.     numpic=numpic+1;%为图片编号从1开始,规则:序号+图片标签(1-cat,2-frog)  
  18.     image=ReadImage(data(j,:));%按顺序读取图片  
  19.     label=label_names{labels(j,1)+1};%读取对应标签  
  20.     %% 每读100张显示一次图片  
  21.     subplot(10,10,count)  
  22.     image=uint8(image);  
  23.     imshow(image);  
  24.     title(label)  
  25.     if mod(count,100)==0  
  26.         count=0;  
  27.         pause(0.1)  
  28.     end  
  29.     %% 存储在文件夹test中  
  30.     picture_name=['./test/' num2str(numpic) label '.png'];  
  31.     name=[num2str(numpic) label '.png'];  
  32.     imwrite(image,picture_name,'png')  
  33.     fprintf(fp,'%s %s\n',name,num2str(labels(j,1)));  
  34.     fprintf(fp1,'%s 0\n',name);  
  35. end  
  36. fclose(fp);  
  37. fclose(fp1);  
分别运动read_train和read_test,可以看到train和test文件夹会逐渐生成数据集,且均为单张图片。

读取完毕以后,在train里面有50000张图片和一个标签txt文件,test里面有10000张图片和两个标签txt,一个是正确标注,一个是全标注为0。

【附cifar的几个文件】

①matlab version的mat文件:链接:http://pan.baidu.com/s/1bUAgf8 密码:wk6t

②读取完毕的train文件夹:链接:http://pan.baidu.com/s/1sl5tqxR 密码:krhn

③读取完毕的test文件夹:链接:http://pan.baidu.com/s/1mhJ0vXI 密码:o69i

好了,至此我们已经得到了现实中经常使用的数据格式。

【注】如若想掰正图像,可以使用 qq_35446561提供的方法解决

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. subplot(10,10,count)   
  2. image=uint8(image);   
  3. image=permute(image,[2,1,3]);%加上这句话会好一些  
  4. imshow(image);  
当然也可以采用翻转或者转置等方法,MATLAB都有自带函数去翻转图像。

第二步

以cifar的test集的制作为例吧。

先说一下现实基础:数据集必须分为两个文件夹(一个train,一个test),然后每一个文件夹必须再分文件夹,每一个文件夹代表一类数据。

比如cifar,上面提取的数据分别存储在train和test文件夹,但是并未归类。那么,我在E:\CaffeDev\caffe-master\data\cifar10\cifar-visual\cifar10内新建一个文件夹test,然后在test内部新建了airplane、cat、frog三个文件夹,在每一个文件夹中分别放入了从第一步提取的 test 集中随便取的对应类别的56张图片。

还是看一下目录结构吧




云盘分享可以看出目录结构:链接:http://pan.baidu.com/s/1i5nuKb7 密码:xlr4

接下来就是读取每一张图片,并且添加相应的数据标签到txt里面去了,在E:\CaffeDev\caffe-master\data\cifar10\cifar-visual\cifar10新建了一个test_label.txt,然后使用matlab书写文件写入的代码:

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. %读取图片,制作cifar测试集  
  2. fprintf(2,'Reading test data.... \n');  
  3. rt_data_dir = './test_cifar';    %测试集的根目录  
  4. data_dir='test_cifar'; %标签txt中不需要根目录前面的./,所以新建一个变量存储  
  5. subfolders = dir(rt_data_dir); %根目录结构  
  6. totalclass=0;%用于存储有类别数  
  7. fp=fopen('test_label.txt','wt');    
  8. for ii = 1:length(subfolders),  
  9.     subname = subfolders(ii).name;%获取根目录下的所有文件夹名称  
  10.     %有两个隐藏文件夹,用于./和../跳转,读取数据集不需要它俩  
  11.     if ~strcmp(subname, '.') && ~strcmp(subname, '..'),  
  12.         totalclass=totalclass+1;%每一个文件夹都是一个类别  
  13.         label_name{totalclass} = subname; %读取此文件夹的名称,也可以自己建立一个标签集,依次取  
  14.         data = dir(fullfile(rt_data_dir, subname, '*.png'));  %取出所有后缀为png的数据  
  15.         c_num=length(data);%当前类别有多少个数据  
  16.         for jj=1:c_num  
  17.           name=fullfile(data_dir, subname, data(jj).name);  
  18.           fprintf(fp,'%s %s\n',name,num2str(totalclass-1));%从0开始编号  
  19.         end  
  20.         fprintf(1,'正在处理类别:%s\n',label_name{totalclass});  
  21.     end  
  22. end  


主要功能就是完成了当前目录下的test文件夹下每一个类别的全部数据的文件名(比如\test_cifar\airplane\9483airplane.png)读取,并且写入到txt里面。

第三步

转换leveldb格式

主要调用caffe.sln编译完毕得到的convert_imageset.exe这个程序,首先看一下使用说明


按照这个说明,首先是找到exe的路径,然后是数据集文件夹,数据集标签,转换以后的数据存储位置,-backend设置转换格式(leveldb/lmdb)

【注意】如果是你自己的数据集,这个地方的标签一定要注意,读取的时候是按照“数据文件夹/标签内容”依次读取的,不然无法读取成功。比如在下例中,如果你的标签内容第一行为airplane\9483airplane.png,数据集文件夹是test_cifar\ 那么读取的时候就是test_cifar\airplane\9483airplane.png,但是如果标签内容为test_cifar\airplane\9483airplane.png,那么读取的时候就读取test_cifar\test_cifar\airplane\9483airplane.png ,显然读取失败,不存在此文件,因为前面重复了根目录,这个地方一定要注意

转换数据使用的convert.bat内容如下:

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. E:\CaffeDev\caffe-master\Build\x64\Debug\convert_imageset.exe  ./test_cifar/ test_label.txt  test_leveldb -backend=leveldb  
  2. pause  

也可以设置一下[FLAGS]重新把所有的图像resize一下,注意caffe的输入数据集必须是统一大小

更新日志2017-1-9

这个地方resize开始写博客的时候写成28*28了,导致caffe -test命令自动终止,而无测试的batch信息,改成32*32的原始大小即可了,这个大小必须和train的数据集的大小相同,不然会导致同一个模型参数,接受了不同尺寸大小的图片输入。

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. E:\CaffeDev\caffe-master\Build\x64\Debug\convert_imageset.exe --resize_width=32 --resize_height=32  ./test_cifar/ test_label.txt  test_leveldb -backend=leveldb  
  2. pause  


运行时候内容如下:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. E:\CaffeDev\caffe-master\data\cifar10\cifar-visual\cifar10>E:\CaffeDev\caffe-mas  
  2. ter\Build\x64\Debug\convert_imageset.exe  ./test_cifar/ test_label.txt  test_lev  
  3. eldb -backend=leveldb  
  4. I1017 17:25:38.574908 16872 convert_imageset.cpp:86] A total of 168 images.  
  5. I1017 17:25:38.584908 16872 db_leveldb.cpp:18] Opened leveldb test_leveldb  
  6. I1017 17:25:38.768919 16872 convert_imageset.cpp:150] Processed 168 files.  
  7.   
  8. E:\CaffeDev\caffe-master\data\cifar10\cifar-visual\cifar10>pause  
  9. 请按任意键继续. . .  

如果显示的读取图片数量为0,或者图片不存在,那么肯定是文件夹名写错或者是标签问题,确切地说,是标签里面的路径问题,一定要注意这一点。

【注】如果这个步骤你想转换为lmdb格式,只需要修改-backend=lmdb即可。

转换完毕以后可以用已经训练好的模型来测试一下这三类模型(注意区分这时的test虽然取自val,但是作用并非val的作用,而是作为test集的,详细自行查找机器学习三个数据集的作用):链接:http://pan.baidu.com/s/1jHPGMpw 密码:g97n

第四步

总结一下,容易出错的地方在于:

①bat 内部书写出问题,严格按照第三步的几个顺序书写

②标签txt 内部的路径问题,很可能与bat 所书写的根路径重复

训练模型回看前面的

【caffe-Windows】cifar实例编译之model的生成:http://blog.csdn.NET/zb1165048017/article/details/51476


Windows10下cifar编译及生成model 1下载cifar的数据集百度云地址:二进制数据文件链接:http://pan.baidu.com/s/1hrRApwC 密码:1dxy.mat格式连接:链接:http://pan.baidu.com/s/1hr6B7Xa密码:f343 2解压得到数据,如图 3按照下列路径,在自己的caffe目录下建立input_folder文件夹,并拷贝相应数据集 4E:\0101GJL\caffe-master... 阅读详情

相关推荐

【YOLOv3从头训练 数据篇】

YOLOv3从头训练(一) 数据篇前言数据下载数据可视化标签生成生成训练路径文件结语 前言 最近在忙着怎么从头实现YOLOv3,从网上找了很多教程,也在GitHub上面找到了挺多的代码的,有些能看懂有些看不懂,看不懂的原因有两个,一个是自己太菜了,对pytorch的使用不熟悉;另一个是自己太菜了,YOLO系列的论文只读个大概,读过之后又忘记了,一些实现细节自己也不会。 看网上的代码以及视频,大多是从YOLOv3的代码和结构开始,很少有讲到关于使用的数据集和标签是怎么得来的。一开始看B站上面的大佬敲代码的时候

weixin_44715117的博客 3780

模仿CIFAR数据集格式制作自己的数据集代码(修改版)

模仿CIFAR数据集格式制作自己的数据集代码(修改版)

2025秋招NLP算法面试真题(十八)-大模型训练数据格式常见问题

大模型训练数据格式常见问题

weixin_41496173的博客 1978

用自己的数据进行CaffeNet训练模型

win7环境下,用自己的数据进行CaffeNet训练模型,亲测可行!

Caffe(4)--MobileNets实现,使用自定义数据集进行训练

论文地址:V1,https://arxiv.org/abs/1704.04861;V2,https://arxiv.org/abs/1801.04381 模型实现:Caffe框架(非官方)https://github.com/shicai/MobileNet-Caffe 1、下载模型 https://github.com/shicai/MobileNet-Caffe下载得到MobileNet...

对角巷 6392

Caffe-SSD MobileNetan配置及训练自己的数据集

1. Caffe-SSD Mobilenet是替了SSD中的VGG网络层,因此要首先安装caffe-ssd,参考之前的博客进行配置 https://blog.csdn.net/lukaslong/article/details/81390276 此处建议先不急着编译,转到第3节,添加DepthwiseConvolution后再进行编译。 2. MobileNet 首先把chuanqi大...

lukaslong的博客 726

caffe跑自己的数据,基于WINDOWScaffe

转载自:http://www.cnblogs.com/love6tao/p/5743030.html 用caffe跑自己的数据,基于WINDOWScaffe 本文详细介绍,如何用caffe跑自己的图像数据用于分类。 1 首先需要安装过程见 http://www.

chriscb的博客 801

大模型之训练数据集数据格式

在这个示例中,输入数据是一个句子,奖励数据是一个实数值,动作数据是生成的句子,状态数据是模型的隐藏状态。每一行代表一个样本,第一列是输入数据,第二列是对应的奖励数据,第三列是生成的动作数据,第四列是状态数据。需要注意的是,具体的数据集格式可能会因任务类型、数据来源和使用的深度学习框架而有所不同。需要注意的是,具体的数据集格式可能会因任务类型、数据来源和使用的深度学习框架而有所不同。需要注意的是,使用这些数据集时,应该遵守数据的版权和使用规定,确保合法的使用权。在这个示例中,输入数据是一个句子,

SQingL的博客 4929

Caffe 从入门到精通05

Windows环境下,使用caffe实战cifar10数据集,算是对前面博客内容知识的梳理和应用。

TMAC2016的博客 803

caffe:自带数据测试

Step1 下载安装: Git bash:https://git-scm.com/download/win 用于在windows中运行shell脚本 Wget:http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe 用于从互联网上下载数据 安装并配置环境变量 Step2 下载MNIST数据: 打开 gi...

kerrity的博客 312

Windows上运行Caffeine自带mnist实例的步骤

在已安装好Caffe后: 1、下载数据 0)caffe-master是安装的根目录 1) 官网地址:http://yann.lecun.com/exdb/mnist/ 2) 下载以下四个文件,解压到caffe-master\data\mnist下 下载的文件 ...

xiaoyucyt的博客 417

caffe学习日记--lesson4:windowscaffe DEMO (mnist and cifar10)

caffe学习日记--lesson4:windowscaffe DEMO (mnist and cifar10) 1.下载数据 mnist官网:http://yann.lecun.com/exdb/mnist/ 2.数据格式转化 使用编译得到的convent_mnist_data.exe程序,得到lmdb格式的数据(lmdb的内存消耗是leveldb的1.1倍,但是lmd

鲁点点的博客 329

caffe-win10-cifar10另

上一篇主要以bat形式实现了leveldb形式的cifar10,因为对于shell脚本不甚熟悉,所以这次专门利用.sh调用来实现lmdb形式的cifar10。 1.下载数据 同上一篇。 2.数据和生成均值文件。 这次将bin(二进制)形式的文件转为lmdb文件。 参考了一篇博客,用到了examples/cifar10/路径下的create_cifar10.sh文件。回顾上一篇...

weixin_30872671的博客 129

将自己的数据集为cifar数据集格式

本文代码参考于:参考代码 cifar官方网址的数据集下载速度比较慢,所以提供大家百度云地址方便下载: cifar数据集下载: 链接:百度网盘 提取码:7x1e cifar数据集的基本情况: 该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意...

icey_z 4076

将自制数据集成cifar10格式

def imread(im_path, shape=None, color="RGB"): im = cv2.imread(im_path, cv2.IMREAD_UNCHANGED) if color == "RGB": im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) if shape != None: im = cv2.resize(im, shape) return im c = 1024 # 32*.

SmartDemo的博客 1659

YOLOv5训练数据集的配置文件格式与使用技巧

本文档主要描述YOLOv5算法在训练模型时对于数据集的配置文件的使用技巧、格式以及注意事项,以及对于多批次数据的更加方便快捷的加载等操作示例

lujx_1024的博客 8088
上一篇: 【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程(2016-05-09)
下一篇: 【caffe-Windows】添加工程-以classification为例(2017-04-11)
foreyang00
博客等级 码龄14年 31粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值