A,准备自己的数据
图像数据从徐其华的博客,(http://www.cnblogs.com/denny402/p/5083300.html).网盘下载:http://pan.baidu.com/s/1nuqlTnN。
这是一个小型的图片数据库,这个图片数据库有500张图片;训练样本400张,测试样本100张;分为5类:bus,dinosaur,elephant,rose,horse(大巴,恐龙,大象,鲜花,马)
整理数据,重新命名及重新设置大小,做成32×32像素的数据,与CIFAR10数据大小保持一致。
python修改文件名代码:
import os;
def rename():
count=20; #文件名的起始值 在此设置文件名的起始值
path='//home//lw//deeplearning//re//train//bus1'; #所要修改的文件所在地方
filelist=os.listdir(path)#该文件夹下所有的文件(包括文件夹)
for files in filelist:#遍历所有文件
Olddir=os.path.join(path,files);#原来的文件路径
if os.path.isdir(Olddir):#如果是文件夹则跳过
continue;
filename=os.path.splitext(files)[0];#文件名
filetype=os.path.splitext(files)[1];#文件扩展名
Newdir=os.path.join(path,str(count)+filetype);#新的文件路径
os.rename(Olddir,Newdir);#重命名
count+=1;
print "修改完成"
rename();
python修改文件大小代码:
import os;
from PIL import ImageTk, Image
def resizeImg():
path='/home/lw/workspace/resizeImg/train/bus/'; #所要修改的文件所在地方
filelist=os.listdir(path)#该文件夹下所有的文件(包括文件夹)
for files in filelist:#遍历所有文件
files = path + files
im = Image.open(files)
x_s = 256 #define standard width
y_s = 256 #calc height based on standard width
out = im.resize((x_s,y_s),Image.ANTIALIAS) #resize image with high-quality
out.save(files)
print "修改完成"
resizeImg()
注意:在此需要修改一些文件目录的位置,请自己调整路径或文件所在位置
B.针对数据,打标签,生成train.txt,val.txt文件
打标签python代码:
import os
def IsSubString(SubStrList,Str):
flag=True
for substr in SubStrList:
if not(substr in Str):
flag=False
return flag
#扫面文件
def GetFileList(FindPath,FlagStr=[]):
FileList=[]
FileNames=os.listdir(FindPath)
if len(FileNames)>0:
for fn in FileNames:
if len(FlagStr)>0:
if IsSubString(FlagStr,fn):
fullfilename=os.path.join(FindPath,fn)
FileList.append(fullfilename)
else:
fullfilename=os.path.join(FindPath,fn)
FileList.append(fullfilename)
if len(FileList)>0:
FileList.sort()
return FileList
#1.制作训练集中的标签
train_txt=open('train.txt','w')
#制作标签数据
imgfile=GetFileList('train/bus')
for img in imgfile:
str1=img+' '+'0'+'\n' #用空格代替转义字符 \t
train_txt.writelines(str1)
imgfile=GetFileList('train/dinosaur')
for img in imgfile:
str1=img+' '+'1'+'\n' #用空格代替转义字符 \t
train_txt.writelines(str1)
#根据所属类型训练数据的多少,自行添加上述四行代码
train_txt.close()
#测试集文件列表
test_txt=open('val.txt','w')
#制作标签数据,如果是男的,标签设置为0,如果是女的标签为1
imgfile=GetFileList('val/bus')#将数据集放在与.py文件相同目录下
for img in imgfile:
str1=img+' '+'0'+'\n'
test_txt.writelines(str1)
imgfile=GetFileList('val/dinosaur')#将数据集放在与.py文件相同目录下
for img in imgfile:
str1=img+' '+'1'+'\n'
test_txt.writelines(str1)
#根据所属类型测试数据的多少,自行添加上述四行代码
test_txt.close()
print("成功生成文件列表")
最后结果如下图:
C.制作lmdb文件
a.在caffe目录下面的examples目录下,建立一个自己的文件目录,如:testCreateLmDB,友情提醒:必须在这建立,这样好应用caffe提供的建立lmdb文件
b.从caffe目录下examples/imagenet目录中将create_imagenet.sh文件copy至自己所建立的文件目录, 如:testCreateLmDB,并修改相关路径。如下代码如下,一定要注意 目录路径,否则制作不成功。
#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e
EXAMPLE=examples/testCreateLmDB #EXAMPLE为当前文件在caffe目录的相对路径。
DATA=/home/lw/caffe/my_data #数据所在位置,此处一定不要加/
TOOLS=build/tools #该路径要保持不变
TRAIN_DATA_ROOT=/home/lw/caffe/my_data/ #训练数据的绝对路径。
VAL_DATA_ROOT=/home/lw/caffe/my_data/ #验证数据的绝对路径。
# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=true #RESIZE为是否对图像进行缩放
if $RESIZE; then
RESIZE_HEIGHT=32
RESIZE_WIDTH=32
else
RESIZE_HEIGHT=0
RESIZE_WIDTH=0
fi
if [ ! -d "$TRAIN_DATA_ROOT" ]; then
echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet training data is stored."
exit 1
fi
if [ ! -d "$VAL_DATA_ROOT" ]; then
echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet validation data is stored."
exit 1
fi
echo "Creating train lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/train.txt \
$EXAMPLE/my_train_lmdb #修改生成后的训练文件名
echo "Creating val lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$VAL_DATA_ROOT \
$DATA/val.txt \
$EXAMPLE/my_val_lmdb #修改生成后的测试文件名
echo "Done."
c.在终端的caffe目录下执行该脚本,否则也执行不成功,一定是caffe目录下,因为:TOOLS=build/tools
至此完成自己的图像数据CAFFE格式制作