数据集使用的是kaggle上的猫狗数据集。
在编译好的caffe->data目录下新建文件夹cat and dog
,数据集中的train和test文件夹放到data目录下。
第一步:生成train数据的标签文件,根据图片名生成对应的标签,这里,0是cat,1是dog程序如下:
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 9 20:26:20 2017
@author: ***
"""
import os
def Filenametotxt(dir,file,wildcard,recursion):
exts=wildcard.split(" ")
for filesname in os.listdir(dir):
name=filesname.split(sep='.')
for exts in exts:
if(filesname.endswith(exts)&bool(name[0]=='cat')):
file.write(filesname+" "+"0"+"\n")
else:
file.write(filesname+" "+"1"+"\n")
def Test():
dir="D://Caffe//caffe-master//data//cat and dog//train//"
outfile="train.txt"
wildcard=".jpg"
file=open(outfile,'w')
# if not file:
# print("cannot open the file %s writing"% outfile)
Filenametotxt(dir,file,wildcard,1)
file.close()
Test()
生成的train.txt
放到train目录下。
第二步:转换为caffe支持的数据格式lmdb,或者leveldb。在cat and dog
目录下新建批处理文件convert_imageldb_trainset.bat
,代码如下:
SET GLOG_logtostderr=1
D:/Caffe/caffe-master/Build/x64/Release/convert_imageset.exe --resize_height=208 --resize_width=208 ./train/ ./train/train.txt ./mtrainldb
pause
第二行代码中由五部分组成,很明显,第一部分为 convert_imageset.exe
的路径(找不到的话可以搜索一下),第二部分是对图片大小resize,统一大小(不然第三步会报错)./train/
为原始训练图片所在文件夹,./train/train.txt
为第一步生成的标签文件,./mtrainldb
为转换后的文件夹。
同理,也可以转换test
下的图片,在此我没有转换,需要的话再转换。
第三步:数据预处理,计算数据的均值。采用编译好的compute_image_mean.exe
代码如下:
SET GLOG_logtostderr=1
D:/Caffe/caffe-master/Build/x64/Release/compute_image_mean.exe ./mtrainldb ./train_mean.binaryproto
pause
目前为止,文件夹中的内容如下:
那个Python27.dll
可以忽略,因为我的电脑装了27版本和35版本的,运行时提示找不到那个dll文件,我索性直接复制过来了。
第四步:训练网络配置
将examples->mnist
下的lenet_solver.prototxt
,lenet_train_test.prototxt
复制到cat and dog
目录下,并对两个文件进行修改
未完待续…………