要将图片转换为lmdb的形式
在网上下载了一个图片数据集,包括5类图片,共500张,400作为训练集,100作为测试集
1.制作标签lable,转换lmdb
使用以下Python代码
# coding:utf-8
"<span style=""font-family:Arial;font-size:18px;"">"
"<span style=""font-size:18px;"">"
"<span style=""font-size:18px;"">"
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
train_txt = open('train.txt', 'w')
# 制作标签数据
imgfile = GetFileList('train/bus') # 将数据集放在与.py文件相同目录下
for img in imgfile:
str0 = img + ' ' + '0' + '\n' # 用空格代替转义字符 \t
train_txt.writelines(str0)
imgfile = GetFileList('train/dinosaur')
for img in imgfile:
str1 = img + ' ' + '1' + '\n'
train_txt.writelines(str1)
imgfile = GetFileList('train/elephant')
for img in imgfile:
str2 = img + ' ' + '2' + '\n'
train_txt.writelines(str2)
imgfile = GetFileList('train/flower')
for img in imgfile:
str3 = img + ' ' + '3' + '\n'
train_txt.writelines(str3)
imgfile = GetFileList('train/horse')
for img in imgfile:
str4 = img + ' ' + '4' + '\n'
train_txt.writelines(str4)
train_txt.close()
# 测试集文件列表
test_txt = open('val.txt', 'w')
imgfile = GetFileList('val/bus') # 将数据集放在与.py文件相同目录下
for img in imgfile:
str5 = img + ' ' + '0' + '\n'
test_txt.writelines(str5)
imgfile = GetFileList('val/dinosaur')
for img in imgfile:
str6 = img + ' ' + '1' + '\n'
test_txt.writelines(str6)
imgfile = GetFileList('val/elephant') #
for img in imgfile:
str7 = img + ' ' + '2' + '\n'
test_txt.writelines(str7)
imgfile = GetFileList('val/flower') #
for img in imgfile:
str8 = img + ' ' + '3' + '\n'
test_txt.writelines(str8)
imgfile = GetFileList('val/horse') #
for img in imgfile:
str9 = img + ' ' + '4' + '\n'
test_txt.writelines(str9)
test_txt.close()
print("成功生成文件列表")
结果生成两个txt文件,一个是train.txt,另一个val.txt,在标签里,将每一个类别分类为0,1,2,3,4五个类别
深度学习caffe平台–制作自己.lmdb格式数据集及分类标签文件
最后转换,在caffe/examples目录下新建mytest文件,复制caffe/examples/imagenet目录下面的create_imagenet.sh脚本到mytest目录下
修改create_imagenet.sh文件
运行之后
结果:生成lmdbe文件
2 计算均值
复制caffe/examples/imagenet目录下面的create_imagenet_mean.sh脚本到mytest目录下,修改里面的内容
运行生成test_mean.binaryproto
利用caffe官方给出的文本定义网络结构和solver文件来训练一个神经网络,选择/caffe/models/bvlc_alexnet,查看solver.prototxt,,修改参数,最下面改成CPU
查看train_val.prototxt文件,需要修改的是输入端的各种数据及mean file,如下:
name: "AlexNet"
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file:
#此处需要修改
"/home/ryan/caffe/examples/mytest/test_mean.binaryproto"
}
data_param {
#此处需要修改
source: "/home/ryan/caffe/examples/mytest/train_lmdb"
batch_size: 256
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 227
mean_file:
#此处需要修改
"/home/ryan/caffe/examples/mytest/test_mean.binaryproto"
}
data_param {
#此处需要修改
source: "/home/ryan/caffe/examples/mytest/train_lmdb"
batch_size: 50
backend: LMDB
}
}
执行train_caffenet.sh即可。(注意以上各种文件的路径是否加载正确,要以当前目录为准,不要单纯的安装文件的形式去修改,否则会找不到需要加载的各种文件而报错!!!)
有点慢。。。。。。