深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集

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("成功生成文件列表")  

最后结果如下图:

深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集_第1张图片


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利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集_第2张图片

至此完成自己的图像数据CAFFE格式制作




你可能感兴趣的:(深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集)