一、生成Caffe数据库
1、准备数据
参考链接中的作者提供了一些图片,共有500张图片,分为大巴车、恐龙、大象、鲜花和马五个类,每个类100张。
编号分别以3,4,5,6,7开头,各为一类。其中每类选出20张用作测试,其余80张用作训练。因此最终训练图片400张,测试图片100张,共5类。我在caffe根目录下的examples文件夹里新建了test_A文件夹,并将图片集放入其中。即,训练图片目录:examples/test_A/train,测试图片目录: examples/test_A/val
备注:总的图片500张,序号300-799;val文件夹下面试300-319,400-419,500-519,600-619,700-719共计100张;其余在train文件夹下
2、生成图片文件列表清单
在生成数据库之前,需要生成图片文件列表清单,一般为.txt文件。我创建.py脚本文件来执行这一步,具体代码create_txt.py如下(代码只是随便写的,可以优化):
就是在上述目录下面新建train.txt和val.txt文件
上生成标签的代码:
# -*- coding: UTF-8 -*-
# Date:2018.07.05
import os
import re
path_train = train文件夹绝对目录
path_val = val文件夹绝对目录
if not os.path.exists(path_train):
print("path_train not exist!!!")
os._exit()
else:
print("path_train exist!!!")
if not os.path.exists(path_val):
print("path_val not exist!!!")
os._exit()
else:
print("path_val exist!!!")
file_train = open(train.txt文件绝对目录,'wt')
file_val = open(val.txt文件绝对目录,'wt')
file_train.truncate()#截断文件
file_val.truncate()
pa = r".+(?=\.)"
pattern = re.compile(pa)
print "now,creating train.txt..."
for filename in os.listdir(path_train):
# print filename
# abspath = os.path.join(path_train,filename);
group_lable = pattern.search(filename)
str_label = str(group_lable.group())
if str_label[0] == '3':
train_lable = '0'
elif str_label[0] == '4':
train_lable = '1'
elif str_label[0] == '5':
train_lable = '2'
elif str_label[0] == '6':
train_lable = '3'
elif str_label[0] == '7':
train_lable = '4'
else:
print "error data!!!"
os._exit()
# print abspath,train_lable.group()
file_train.write(filename + ' ' + train_lable + '\n')
print "train.txt created!!!"
print "-----------------------------------"
print "now,creating val.txt..."
for filename in os.listdir(path_val):
# print filename
# abspath = os.path.join(path_val,filename);
group_lable = pattern.search(filename)
str_label = str(group_lable.group())
if str_label[0] == '3':
val_lable = '0'
elif str_label[0] == '4':
val_lable = '1'
elif str_label[0] == '5':
val_lable = '2'
elif str_label[0] == '6':
val_lable = '3'
elif str_label[0] == '7':
val_lable = '4'
else:
print "error data!!!"
os._exit()
# print abspath,train_lable.group()
file_val.write(filename + ' ' + val_lable + '\n')
print "val.txt created!!!"
print "function over!!!"
点开train.txt和val.txt就会发现生成好了
3、生成lmdb数据库
在cmd中进入caffe根目录,分别执行以下 指令:
win+R 操作打开运行面板,输入cmd,回车
在cmd下打开caffe根目录,作者的是caffe-master
输入:
Build\x64\Release\convert_imageset.exe --shuffle --resize_height=256 --resize_width=256 examples\test_A\ examples\test_A\val.txt examples\test_A\val_lmdb
然后回车就会发现上述目录下多了val_lmdb文件夹
再输入:
Build\x64\Release\convert_imageset.exe --shuffle --resize_height=256 --resize_width=256 examples\test_A\ examples\test_A\train.txt examples\test_A\train_lmdb
然后回车就会发现上述目录下多了train_lmdb文件夹
4、生成均值文件
图片减去均值再训练,会提高训练速度和精度。因此,一般都会有这个操作。caffe程序提供了一个计算均值的文件compute_image_mean.cpp,我们直接使用就可以。
输入Build\x64\Release\compute_image_mean.exe examples\test_A\train_lmdb examples\test_A\mean.binaryproto
回车就会发现test_A文件夹下面就有了mean.binaryproto文件