初试caffe训练,这里不是跑的caffe里自带的例子,是训练测试自己的数据集,欢迎指正~ps:这边就不介绍caffe的安装配置了,直接进入主题啦~
1大量样本的准备
既然要做训练的话没有大量的图片样本是不行滴,这个阶段耗费很久的时间,说到这里要吐血了,三个人,对采集的视频中的每帧图片进行截图,不夸张的说总共截的图片大概有近百万张,当然啦还要对图片进行筛选不好的样本不要,否则会影响测试效果!我们一共做了四组实验,这里挑一个简单一组实验进行讲解。
有四类图片,每类都有大量的图片
介绍一种简易得到标签的方法,在每个文件夹下可建立一个批处理命令
运行getall.bat可得到
用notepad打开使用替换将jpg替换成jpg 1简易的标签就好了啊
2训练集和测试集
这组实验我们的样本总数为250465,训练集170318,测试集80147。
针对四类我们分别挑选了一些图片作为训练集,剩下的作为测试集。四个类所有训练的图片放在一起,所有测试的图片放在一起
原本四个类我们是从1-4的,后来我们将其批量改成了0-3(小伙伴们做样本的时候可以直接从0开始,不知道从哪看到说标签最好从0开始的)
这边解释一下如,H:/RoadCongestionDetection/dataSet02/4/这个路径 4文件夹里的图片标签的全部被批量改成20180420162405.02.avi_4_00118486.jpg 3
所有的训练集对应一个标签,标签里有0,1,2,3类的图片,所有的测试集对应一个标签,标签里有0,1,2,3类的图片,
3转换数据集格式以及计算均值
先放图
这是一个批处理命令这里面是下面三条命令
将数据集的格式转换成lmdb格式,因为caffe训练神经网络的输入只能为lmdb和leveldb,所以我们要转换图片格式。在caffe编译好的.exe文件就是release目录里有一个convert_imageset.exe可以进行格式转换。分别对训练集和测试集进行格式转换,这边是写了一个批处理命令或者在命令行里执行下面的命令
convert_imageset.exe anyDir train.txt train_all_lmdb --gray=false --shuffle=true --resize_width=180 --resize_height=135 --check_size=false --encode_type=jpg
这里我们转换成lmdb格式,文件夹train_all_lmdb就是对train.txt训练集的数据转换,这里我们将图片大小重置为180*135的,有些可能直接用的227*227,shuffle是要不要将数据打乱,随心情。有些也可以不要gray,check_size ,encode_type、
convert_imageset.exe anyDir test.txt test_all_lmdb --gray=false --shuffle=false --resize_width=180 --resize_height=135 --check_size=false --encode_type=jpg
文件夹train_all_lmdb就是对train.txt训练集的数据转换
每个文件夹下
同样的caffe编译好的.exe文件就是release目录里有一个compute_image_mean.exe可以进行计算均值文件,这边是写了一个批处理命令或者在命令行里执行下面的命令
compute_image_mean.exe train_all_lmdb mean.binaryproto
可得到均值文件
4修改网络模型的配置参数并进行训练
我们利用caffe里models里的网络模型
我们之后的训练用的是caffenet还有alexnet网络模型训练的,Googlenet网络太复杂,训练的时候崩了,OutOfMemory。
假设用alexnet,将文件夹下的文件复制一下粘贴过来
训练只要对train_val.prototxt和solver.prototxt进行修改
首先train_val.prototxt
这里我们是四类所以num_out是4,注意文件里不要有中文,不要有多余的空格或空行否则都会出现问题的,亲测
接下来是solver.prototxt
总250465训170318测80147
net里面修改过的train_val.prototxt
test_interval1600是测试集的数量80147/测试的batch_size50=1600 1600次后测试一下
base_lr初始学习率
stepsize训练3200次之后,(170318/80)*1.5=3200设置迭代1.5次后降低一次学习率为初始学习率*gamma
display训练200次之后,将训练误差显示在屏幕上
max_iter总共训练22000次(170318/80)*10=22000迭代10次
snapshot训练4400次保存一次模型
snapshot_prefix"caffe_alexnet_train"保存的模型
solver_mode设置使用GPU加速训练
文件都已配置好可以开始训练啦
在caffe编译好的.exe文件就是release目录里有一个caffe.exe可以进行,这边是写了一个批处理命令train.bat或者在命令行里执行下面的命令
这边在目录下就会得到训练好的模型利用模型来分类
5分类测试
修改deploy.prototxt文件
因为4类num_out为4
新建一个label_4.txt有着0,1,2,3的标签
在caffe编译好的.exe文件就是release目录里有一个classification.exe可以进行,这边是写了一个批处理命令classification.bat或者在命令行里执行下面的命令
classification.exe deploy.prototxt caffe_alexnet_train_iter_13200.caffemodel mean.binaryproto label_4.txt F:/videoTag_V4/videoTag/20180417175745.02.avi --fileType=video_file
pause
F:/videoTag_V4/videoTag/20180417175745.02.avi待测试的视频的地址名字
测试结果
\(^o^)/~回顾了一下前段时间的caffe训练测试,写下来巩固一下~