caffe 练习2 用自己的数据集在ImageNet 测试------by 香蕉麦乐迪
来源:互联网 发布:酷云eye麻雀收视数据 编辑:程序博客网 时间:2024/04/27 15:35
目的:使用自己的数据集,使用caffe自带的ImageNet网络结构,训练测试
参考官网链接:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html
我自己准备的数据集:http://pan.baidu.com/s/1o60802I
我们的数据集图片分10个类,每个类有100个train图片(train文件夹下,一共1000),20个test图片(val文件夹下,一共200)
1 首先准备自己的数据集
我们需要准备的文件有:
1 文件夹train:里面放训练的图片
2 文件夹val:里面放val的图片
3 train.txt :训练图片的文件名和对应的类别
4 val.txt:测试图片的文件名和对应的类别
我已经为大家准备好了,下载链接:http://pan.baidu.com/s/1o60802I
以后大家自己准备数据集,就按照上面的方式将 图片和txt文件,放入对应目录下
2 创建lmdb格式数据集
在caffe安装的根目录下执行下面的脚本可以创建lmdb文件,用于caffe的数据输入;
./examples/imagenet/create_imagenet.sh
对于这个脚本,我们打开,根据自己的路径做更改;
原脚本:
#!/usr/bin/env sh# Create the imagenet lmdb inputs# N.B. set the path to the imagenet train + val data dirsEXAMPLE=examples/imagenet %@@ 这里是一些路径,根据自己的路径修改DATA=data/ilsvrc12TOOLS=build/toolsTRAIN_DATA_ROOT=/path/to/imagenet/train/VAL_DATA_ROOT=/path/to/imagenet/val/# Set RESIZE=true to resize the images to 256x256. Leave as false if images have# already been resized using another tool.RESIZE=false %@@ 这是设置RESIZE = true,caffe就可以帮我们修改好图片的尺寸if $RESIZE; then RESIZE_HEIGHT=256 RESIZE_WIDTH=256else RESIZE_HEIGHT=0 RESIZE_WIDTH=0fiif [ ! -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 1fiif [ ! -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 1fiecho "Creating train lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset \ %@@ 这里会调用作者已经写好的 convert_imageset 函数 --resize_height=$RESIZE_HEIGHT \ %@@ 通过该函数可以产生lmdb的数据 --resize_width=$RESIZE_WIDTH \ --shuffle \ $TRAIN_DATA_ROOT \ %@@ 训练图片的路径 $DATA/train.txt \ %@@ 输入train.txt的路径 $EXAMPLE/ilsvrc12_train_lmdb %@@输出train_lmdb的路径echo "Creating val lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset \ --resize_height=$RESIZE_HEIGHT \ --resize_width=$RESIZE_WIDTH \ --shuffle \ $VAL_DATA_ROOT \ <span style="font-family: Arial, Helvetica, sans-serif;">%@@ 训练图片的路径</span> $DATA/val.txt \ %@@ 输入val.txt的路径 $EXAMPLE/ilsvrc12_val_lmdb %@@输出val_lmdb的路径echo "Done."
ps:注意,要设置RESIZE = true。因为imagenet这个网络结构输入图片的大小都必须是227*227的,设置RESIZE = true后,caffe就可以帮我们将图片的大小变换好;
3 计算图像均值
输入数据需要训练图片的均值图像
官方提供脚本帮助我们计算,如下:
./examples/imagenet/make_imagenet_mean.sh
计算完后得到一个文件:data/ilsvrc12/imagenet_mean.binaryproto
.
脚本原文件:
#!/usr/bin/env sh# Compute the mean image from the imagenet training lmdb# N.B. this is available in data/ilsvrc12EXAMPLE=examples/imagenetDATA=data/ilsvrc12TOOLS=build/tools$TOOLS/compute_image_mean $EXAMPLE/ilsvrc12_train_lmdb \ $DATA/imagenet_mean.binaryprotoecho "Done."
根据我的路径修改后的文件:(注意,你的跟我的不一定一样)
#!/usr/bin/env sh# Compute the mean image from the imagenet training lmdb# N.B. this is available in data/ilsvrc12
ROOT=/home/a216/caffe-masterEXAMPLE=$ROOT/sloanqin/examples/godpoolDATA=$ROOT/sloanqin/data/godpool/txt TOOLS=$ROOT/build/tools$TOOLS/compute_image_mean $EXAMPLE/godpool_train_lmdb \ $DATA/godpool_mean.binaryprotoecho "Done."
4 配置网络结构文件
网络模型文件在 models/bvlc_reference_caffenet/train_val.prototxt 文件中;
这里我们直接使用caffe提供的这个网络结构,以后我们再根据自己的想法做更改;
注意:大家需要打开这个文件,更改里面的路径
5 训练参数文件
训练参数文件在:models/bvlc_reference_caffenet/solver.prototxt中
我对solver.prototxt 修改后的参数如下:
net: "/home/a216/caffe-master/sloanqin/data/godpool/txt/train_val.prototxt"test_iter: 4 //测试的时候,输入4个batchtest_interval: 1000 //每迭代1000次,测试一次base_lr: 0.01 // 初始的学习率是0.01lr_policy: "step"gamma: 0.1stepsize: 3000 //每迭代3000次,调整一次学习率display: 20 //每20次迭代,显示一次max_iter: 12000 //最大迭代12000次momentum: 0.9weight_decay: 0.0005snapshot: 5000snapshot_prefix: "/home/a216/caffe-master/sloanqin/data/godpool/txt/caffenet_train"solver_mode: GPUps:你要根据自己的路径做修改
知识点说明:查看我们train_val.prototxt文件,发现batch_size: 50;我们的test图片是200张,200/50=4,所以
test_iter=4
6 开始训练
./build/tools/caffe train --solver=/home/a216/caffe-master/sloanqin/data/godpool/txt/solver.prototxt
当然,上面的命令,需要根据你自己的路径相应的改下
7 结果
训练过程中,可以看到正确率在不断提升;最后的准确率是50%;
我们的样本数很少,当图片到百万数量级的时候,效果会很大提升;
而且我提供的数据是淘宝的图片,本身的难度很大,就是人也很难分清楚;
- caffe 练习2 用自己的数据集在ImageNet 测试------by 香蕉麦乐迪
- Caffe 用自己的数据集在ImageNet网络结构上训练测试
- caffe 练习3 用caffe提供的C++函数批量抽取图像特征------by 香蕉麦乐迪
- 利用caffe 用自己的数据集在imagenet网络中实践
- 利用caffe 用自己的数据集在imagenet网络中实践
- caffe入门3:利用imagenet在caffe上训练自己的数据集
- caffe 练习4 ----利用python批量抽取caffe计算得到的特征------by 香蕉麦乐迪
- caffe 练习1:training LeNet on MNIST with Caffe/ 用LeNet识别手写字符集 Mnist------by 香蕉麦乐迪
- caffe 练习1:training LeNet on MNIST with Caffe/ 用LeNet识别手写字符集 Mnist------by 香蕉麦乐迪
- caffe 训练测试自己的数据集
- caffe训练测试自己的数据集
- caffe 06 win10 运行examples的imagenet测试用例
- 在纯净的linux中配置安装caffe直到可以训练和测试自己的数据集(1/2)
- Windows Caffe 学习笔记(三)在Caffe上训练和测试自己的数据
- 在windows下用caffe跑ImageNet
- caffe 借助自己图像在imagenet网络中实践
- windows-caffe 训练和测试自己的数据集
- Caffe训练和测试自己的数据集
- iOS 懒加载模式
- Android BLE开发之Android手机与BLE终端通信
- linux下的C语言开发(线程互斥)
- iOS app上线加急 审核加急
- Difference Between ClassNotFoundException Vs NoClassDefFoundError In Java
- caffe 练习2 用自己的数据集在ImageNet 测试------by 香蕉麦乐迪
- Java基础笔记-继承、抽象类、接口、多态、内部类、异常
- nginx upstream的几种配置方式
- GarfieltBlog-webpy建设
- C/S结构网络开发与B/S结构网络开发认识
- ffmpeg记忆
- 【ZJOI2007】【BZOJ1059】矩阵游戏
- NGINX 健康检查和负载均衡机制分析
- 【综合】工作中的小总结