windows10+GPU下caffe数据集Lmdb格式制作+训练自己数据集
2017-10-21 22:19
831 查看
最近做人脸识别项目,想用到caffe训练自己的数据,电脑操作系统为win10+GPU,这里对caffe-windows配置、数据集制作、训练数据都做一些介绍。(无GPU配置的看我这个博客)。如果你用的是vs2015,那么下面介绍的caffe不适合,要用BVLC
windows分支版本的caffe(非微软的caffe-master),坑有点多,安装配置可以点这里或这里,另外需要自己下载依赖库(依赖库给出下载链接,http://pan.baidu.com/s/1cLJnkE,密码:6vcp)。
图1 GPU参数情况
2、 下载CUDA7.5或者8.0 TOOlkit 、cuDNN v4。链接分别为:(https://developer.nvidia.com/cuda-toolkit-archive
https://developer.nvidia.com/cudnn),注意我用的是VS2013版本,对应的CUDA为7.5或8.0(VS2015使用8.0),cuDNN 为v4,其中v3不支持caffe,v5部分不支持CUDA7.5,在官网需要简单注册下就可以下载。其中CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,cuDNN是加速库。下载cuDNN如图2所示。
图2 cuDNN下载
3、从官网下载caffe版,最好是微软提供的,因为不需要自己额外再配置其他依赖库。
caffe的微软分支已经明确标出了支持cudnnv4.0和v5.0。这里给出下载地址:https://github.com/Microsoft/caffe
图3 caffewindows下载
4、把下载好的库放在电脑某个文件夹下,比如我放在C:\caffe,注意解压后该文件夹下只有这1项caffe-master,其他文件后面说明。
图4 caffe目录
然后依次打开文件夹caffe-master->windows,找到“CommonSettings.props.example”复制一份到同目录下并且改后缀,删除.example即可,如下图红色框框第一个文件夹是修改后的。下一步,用记事本打开“该文件,要修改的地方见下图5中4个红色框信息。修改后保存退出。
图5 CommonSettings.props修改
5、把第2步中下载好的cudnn-7.0-win-x64-v4.0.zip解压到C:\caffe目录下,解压后文件夹名是cuda,里面有3个文件夹,bin,include,lib.如上图4所示。
6、编译caffe-windows
编译用vs2013打开Caffe.sln ,里面有16个项目,请按照图6核对,然后将解决方案的配置改为X64
release,在整个项目生成之前,libcaffe项目属性配置如下图6所示:
图6 libcaffe属性配置
先在libcaffe项目上右键生成,待成功后再在最上面右键点“解决方案'Caffe'(16个项目)”
-->生成解决方案,会将整个项目全部生成,这个时间会比较长。在这一步中如果遇到编译过程无法打开文件“libcaffe.lib”,这个问题一般是编码问题,在项目里搜索双击把alt_sstream_impl.hpp打开又有提示中文编码错误,点击确定后保存一下重新编译就ok了。多尝试几次会成功的。
编译后,会在C:/Caffe目录下自动生成依赖库,这就是为什么用微软版本的caffe。打开文件夹,请按照图7核对共有16个文件夹。
图7 依赖包库
7、在release下,直接双击打开caffe.cpp,然后ctrl+f5直接编译,出现如图8所示命令窗口说明编译成功。
图8 编译成功画面
图9 人脸识别初始样本集
2、有了上面的人脸数据后,我们就要开始准备4个“文件”,即2个文件夹分别存储train,val的文件夹,另外2个为train.txt,val.txt列表文件。train和val分别存储训练和验证的数据集,当然你可以指定多少张图片用于训练,剩余作为测试使用。train和val 这2个文件夹里面要分别存储相等类别(文件夹数量及名字一样,图片数量可以不一样)的数据集。rain.txt,val.txt这2个文本文件分别存储对应上面2个文件的图片路径和id,id最好从0开始,路径与id之间只能空一个格,这里可以参加图11。为简便起见,我写了份MATLAB代码直接可以把图9的人脸识别样本集转化为4个标准“文件”。代码如下:
考虑到效率问题,用cellfun函数,上面代码中cellfun调用的函数copyMakeFiles如下:
上面代码能把图9的代码转为如图10所示的格式。
图10 转化后的“4个标准文件”
3、成功转换为“4个标准文件”后,就在当前文件夹下新建一个txt文档,然后改后缀为bat,名字可以是“convert”,里面实际是调用caffe的convert_imageset.exe把4个文件转换为lmdb类型。里面写入内容为“C:\caffe\caffe-master\Build\x64\Release\convert_imageset.exe --gray --resize_width=144 --resize_height=144 ./train/ train.txt
train_lmdb -backend=lmdb
C:\caffe\caffe-master\Build\x64\Release\convert_imageset.exe --gray --resize_width=144 --resize_height=144 ./val/ val.txt test_lmdb -backend=lmdb
Pause ”,注意里面的路径,第一个参数是你自己的convert_imageset.exe 所在路径;第二个是转灰度;第三个,四个参数为resize的大小;第5个参数是“./train/”,表示是存放训练的文件夹(图10的train文件夹) ;第6个参数“train.txt”,表示是关联train文件夹的图片路径及类别标签,见图11所示;第7个参数是"train_lmdb",表示的是存放的lmdb格式文件夹名字;第8个参数是"-backend=lmdb",表示的是转换为lmdb格式。注意每个参数之间有个空格!下面那行val参数类似。
图11 train.txt内容
4、这一步就可以直接双击运行“convert.bat”批处理把文本关联的图像转换为lmdb格式。如图12所示,比图10要多2个文件夹,即生成能够被caffe识别的lmdb文件夹,分别为train_lmdb、test_lmdb。
图12 转lmdb格式
2、配置好自己网络超参数.protxt文件和网络层.protxt文件,可以参考这个博客(http://www.cnblogs.com/TensorSense/p/6744075.html)或者Mnist和Cifar-10(http://blog.csdn.net/u011995719/article/details/53998331),注意路径,我的配置文件分布如图13所示,三个run_facerec.bat、facerec1021_solver.protxt、facerec1021_lenet_train_test.protxt里面参数修改如图14所示。
图13 文件类型分布
图14 三个文件的参数修改
3、上部修改后保存,然后可以运行~\(≧▽≦)/~啦,双击“run_facerec.bat”就可以训练,训练模型保存在save文件夹。
训练过程如图15所示。
图15 训练
到此,整个流程~结束
windows分支版本的caffe(非微软的caffe-master),坑有点多,安装配置可以点这里或这里,另外需要自己下载依赖库(依赖库给出下载链接,http://pan.baidu.com/s/1cLJnkE,密码:6vcp)。
一、GPU+windows+VS2013+caffe(微软版)配置
1、确保自己电脑有GPU,可以百度下载GPU-Z小工具查看。打开后必须支持cuda的NVIDIA显卡,做深度学习计算能力要大于3.0,我的截图如图1所示。图1 GPU参数情况
2、 下载CUDA7.5或者8.0 TOOlkit 、cuDNN v4。链接分别为:(https://developer.nvidia.com/cuda-toolkit-archive
https://developer.nvidia.com/cudnn),注意我用的是VS2013版本,对应的CUDA为7.5或8.0(VS2015使用8.0),cuDNN 为v4,其中v3不支持caffe,v5部分不支持CUDA7.5,在官网需要简单注册下就可以下载。其中CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,cuDNN是加速库。下载cuDNN如图2所示。
图2 cuDNN下载
3、从官网下载caffe版,最好是微软提供的,因为不需要自己额外再配置其他依赖库。
caffe的微软分支已经明确标出了支持cudnnv4.0和v5.0。这里给出下载地址:https://github.com/Microsoft/caffe
图3 caffewindows下载
4、把下载好的库放在电脑某个文件夹下,比如我放在C:\caffe,注意解压后该文件夹下只有这1项caffe-master,其他文件后面说明。
图4 caffe目录
然后依次打开文件夹caffe-master->windows,找到“CommonSettings.props.example”复制一份到同目录下并且改后缀,删除.example即可,如下图红色框框第一个文件夹是修改后的。下一步,用记事本打开“该文件,要修改的地方见下图5中4个红色框信息。修改后保存退出。
图5 CommonSettings.props修改
5、把第2步中下载好的cudnn-7.0-win-x64-v4.0.zip解压到C:\caffe目录下,解压后文件夹名是cuda,里面有3个文件夹,bin,include,lib.如上图4所示。
6、编译caffe-windows
编译用vs2013打开Caffe.sln ,里面有16个项目,请按照图6核对,然后将解决方案的配置改为X64
release,在整个项目生成之前,libcaffe项目属性配置如下图6所示:
图6 libcaffe属性配置
先在libcaffe项目上右键生成,待成功后再在最上面右键点“解决方案'Caffe'(16个项目)”
-->生成解决方案,会将整个项目全部生成,这个时间会比较长。在这一步中如果遇到编译过程无法打开文件“libcaffe.lib”,这个问题一般是编码问题,在项目里搜索双击把alt_sstream_impl.hpp打开又有提示中文编码错误,点击确定后保存一下重新编译就ok了。多尝试几次会成功的。
编译后,会在C:/Caffe目录下自动生成依赖库,这就是为什么用微软版本的caffe。打开文件夹,请按照图7核对共有16个文件夹。
图7 依赖包库
7、在release下,直接双击打开caffe.cpp,然后ctrl+f5直接编译,出现如图8所示命令窗口说明编译成功。
图8 编译成功画面
二、lmdb格式数据制作
1、首先简单的整理下数据集,这些数据集放在一个文件夹下,里面有若干个子文件夹,每个子文件夹的名字表示类别,比如我的人脸识别数据集如下,每个文件夹都是同一个人的人脸,文件夹名字id随意取。如图9所示。图9 人脸识别初始样本集
2、有了上面的人脸数据后,我们就要开始准备4个“文件”,即2个文件夹分别存储train,val的文件夹,另外2个为train.txt,val.txt列表文件。train和val分别存储训练和验证的数据集,当然你可以指定多少张图片用于训练,剩余作为测试使用。train和val 这2个文件夹里面要分别存储相等类别(文件夹数量及名字一样,图片数量可以不一样)的数据集。rain.txt,val.txt这2个文本文件分别存储对应上面2个文件的图片路径和id,id最好从0开始,路径与id之间只能空一个格,这里可以参加图11。为简便起见,我写了份MATLAB代码直接可以把图9的人脸识别样本集转化为4个标准“文件”。代码如下:
function flag = createLMDBDataSets(sourcePath,outputPath) % flag = CREATELMDBDATASETS(sourcePath,outputPath)产生caffe使用的4个文件,目的用于lmdb制作 % sourcePath:文件夹路径,包含在数据存储中的文件夹,每个文件夹是一个类别 % outputPath:输出指定的文件路径 % EXAMPLE: % sourcePath = 'F:\imagesData\facerecognizeDataSets_label'; % outputPath = 'F:\imagesData\facerecognizeDataSets';% 产生4个文件夹,即2个txt,2个存放data图像 % createLMDBDataSets(sourcePath,outputPath) % if (nargin<1)||~ischar(sourcePath) flag = false; return; elseif nargin == 1 outputPath = sourcePath; end %% 这部分修改符合自己的,每个文件夹下至少2张图 imds = imageDatastore(sourcePath,'includesubfolders',true,... 'FileExtensions',{'.png'},... 'LabelSource','foldernames'); [imdsTrain,imdsVal] = splitEachLabel(imds,0.7); % 70%用于训练,其余测试 %% random numsTrain = length(imdsTrain.Files); numsVal = length(imdsVal.Files); indexTrain = randperm(numsTrain); indexVal = randperm(numsVal); trainCell = imdsTrain.Files(indexTrain); valCell = imdsVal.Files(indexVal); %% write classesLabel = categories(imdsTrain.Labels); nameTrain = 'train'; nameVal = 'val'; fidtrain = fopen(fullfile(outputPath,[nameTrain,'.txt']),'w'); flag2 = cellfun(@(x,path,nameflag,cllabel,fid)copyMakeFiles(x,... outputPath,nameTrain,classesLabel,fidtrain),trainCell); fclose(fidtrain); fidval = fopen(fullfile(outputPath,[nameVal,'.txt']),'w'); flag1 = cellfun(@(x,path,nameflag,cllabel,fid)copyMakeFiles(x,... outputPath,nameVal,classesLabel,fidval),valCell); fclose(fidval); %% if (all(flag1) && all(flag2)) flag = true; else flag = false; end end
考虑到效率问题,用cellfun函数,上面代码中cellfun调用的函数copyMakeFiles如下:
function flag = copyMakeFiles(x,outputPath,nameflag,classesLabel,fid) % cellfun调用的函数 % 输入x为cell Array的一个,其余参数为传进来的 % [temp1,name,ext] = fileparts(char(x)); [~,thisLabel,~] = fileparts(temp1); thisFolder = fullfile(outputPath,nameflag,char(thisLabel)); if ~exist(thisFolder,'dir') mkdir(thisFolder); end copyfile(x,thisFolder); index = find(string(thisLabel) == string(classesLabel)); fprintf(fid,'%s %d\r\n',fullfile(char(thisLabel),[name,ext]),index-1); flag = 1; end
上面代码能把图9的代码转为如图10所示的格式。
图10 转化后的“4个标准文件”
3、成功转换为“4个标准文件”后,就在当前文件夹下新建一个txt文档,然后改后缀为bat,名字可以是“convert”,里面实际是调用caffe的convert_imageset.exe把4个文件转换为lmdb类型。里面写入内容为“C:\caffe\caffe-master\Build\x64\Release\convert_imageset.exe --gray --resize_width=144 --resize_height=144 ./train/ train.txt
train_lmdb -backend=lmdb
C:\caffe\caffe-master\Build\x64\Release\convert_imageset.exe --gray --resize_width=144 --resize_height=144 ./val/ val.txt test_lmdb -backend=lmdb
Pause ”,注意里面的路径,第一个参数是你自己的convert_imageset.exe 所在路径;第二个是转灰度;第三个,四个参数为resize的大小;第5个参数是“./train/”,表示是存放训练的文件夹(图10的train文件夹) ;第6个参数“train.txt”,表示是关联train文件夹的图片路径及类别标签,见图11所示;第7个参数是"train_lmdb",表示的是存放的lmdb格式文件夹名字;第8个参数是"-backend=lmdb",表示的是转换为lmdb格式。注意每个参数之间有个空格!下面那行val参数类似。
图11 train.txt内容
4、这一步就可以直接双击运行“convert.bat”批处理把文本关联的图像转换为lmdb格式。如图12所示,比图10要多2个文件夹,即生成能够被caffe识别的lmdb文件夹,分别为train_lmdb、test_lmdb。
图12 转lmdb格式
三、训练
1、为了方便直观起见,训练的东西都放到一个新建文件夹下进行,比如放在caffe的example根目录,我的是“C:\caffe\caffe-master\examples”,在该文件夹下新建facerec文件夹,然后打开,把第二部分第4部生成的train_lmdb、test_lmdb文件夹拷贝过来;然后新建一个save文件夹,用于保存训练好的模型;2、配置好自己网络超参数.protxt文件和网络层.protxt文件,可以参考这个博客(http://www.cnblogs.com/TensorSense/p/6744075.html)或者Mnist和Cifar-10(http://blog.csdn.net/u011995719/article/details/53998331),注意路径,我的配置文件分布如图13所示,三个run_facerec.bat、facerec1021_solver.protxt、facerec1021_lenet_train_test.protxt里面参数修改如图14所示。
图13 文件类型分布
图14 三个文件的参数修改
3、上部修改后保存,然后可以运行~\(≧▽≦)/~啦,双击“run_facerec.bat”就可以训练,训练模型保存在save文件夹。
训练过程如图15所示。
图15 训练
到此,整个流程~结束
相关文章推荐
- 深度学习caffe平台--制作自己.lmdb格式数据集及分类标签文件
- 深度学习caffe平台--制作自己.lmdb格式数据集及分类标签文件
- Faster RCNN 训练自己的数据集(Matlab,python版本)及制作VOC2007格式数据集
- 在caffe-windows下跑自己的数据集leveldb格式 或者lmdb
- YOLO模型训练自己数据-VOC格式数据集制作-ubuntu c++文件夹内图片批量读取与重命名
- 仿照VOC2007制作自己的数据集,并在Caffe上训练Faster-RCNN
- FCN制作自己的数据集、训练和测试 caffe
- Caffe学习笔记3——制作并训练自己的数据集
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集
- 在纯净的linux中配置安装caffe直到可以训练和测试自己的数据集(1/2)
- caffe 训练測试自己的数据集
- 仿照CIFAR-10数据集格式,制作自己的数据集
- caffe(7) 训练自己的CNN网络—基于自己建立的数据集
- Caffe:制作与训练自己的图片数据
- 怎样用自己的数据集对caffe训练好的model进行fineture(当类别数量不一致时)
- caffe-SSD训练自己的数据集
- FCN制作自己的数据集、训练和测试全流程
- caffe中训练自己的数据集的步骤
- 将自己的数据集制作成TFRecord格式
- (1)caffe学习之调用预训练的网络训练自己的数据集