目的:使用自己的数据集,使用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/ilsvrc12
TOOLS=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; thenRESIZE_HEIGHT=256RESIZE_WIDTH=256
elseRESIZE_HEIGHT=0RESIZE_WIDTH=0
fiif [ ! -d "$TRAIN_DATA_ROOT" ]; thenecho "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
fiif [ ! -d "$VAL_DATA_ROOT" ]; thenecho "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
fiecho "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/imagenet
DATA=data/ilsvrc12
TOOLS=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-master
EXAMPLE=$ROOT/sloanqin/examples/godpool
DATA=$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个batch
test_interval: 1000 //每迭代1000次,测试一次
base_lr: 0.01  // 初始的学习率是0.01
lr_policy: "step"
gamma: 0.1
stepsize: 3000 //每迭代3000次,调整一次学习率
display: 20  //每20次迭代,显示一次
max_iter: 12000 //最大迭代12000次
momentum: 0.9
weight_decay: 0.0005
snapshot: 5000
snapshot_prefix: "/home/a216/caffe-master/sloanqin/data/godpool/txt/caffenet_train"
solver_mode: GPU

ps:你要根据自己的路径做修改

知识点说明:查看我们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 香蕉麦乐迪相关推荐

  1. caffe 练习1:training LeNet on MNIST with Caffe/ 用LeNet识别手写字符集 Mnist------by 香蕉麦乐迪

    这个实验拿来入门最好了,很轻松,执行作者写好的脚本就可以: 官网链接:http://caffe.berkeleyvision.org/gathered/examples/mnist.html 跟着这个 ...

  2. 使用caffe自带模型训练cifar10数据集

      前面训练了mnist数据集!但caffe自带的数据集还有cifar10数据集.同样cifar10数据集也是分类数据集,共分10类.cifar10数据集中包含60000张32x32的彩色图片.(其中 ...

  3. 笔记:caffe ssd gpu训练自己的数据集

    caffe ssd GPU训练自己的数据集 一.caffe环境搭建 二.数据集 三.训练和测试 一.caffe环境搭建 环境搭建过程网上有很多教程,可能要踩些坑吧,正常,这里不多赘述,主要是我当时也没 ...

  4. 深度学习实战(七)——目标检测API训练自己的数据集(R-FCN数据集制作+训练+测试)

    TensorFlow提供的网络结构的预训练权重:https://cloud.tencent.com/developer/article/1006123 将voc数据集转换成.tfrecord格式供te ...

  5. 如何调用 caffe 训练好的模型对输入图片进行测试

    如何调用 caffe 训练好的模型对输入图片进行测试 该部分包括两篇文章 win10 下 caffe 的第一个测试程序(附带详细讲解) 主要讲解如何利用 caffe 来训练模型. 如何调用 caffe ...

  6. boost::test模块测试从数据集对主测试套件的访问

    boost::test模块测试从数据集对主测试套件的访问 实现功能 C++实现代码 实现功能 boost::test模块测试从数据集对主测试套件的访问 C++实现代码 #define BOOST_TE ...

  7. 一文多图搞定制作自己的VOC数据集+使用yolov4训练自己的数据集+封装video测试脚本(基于ubuntu)

    一文多图搞定制作自己的VOC数据集+使用yolov4训练自己的数据集+封装video测试脚本(基于ubuntu) 制作VOC数据集 标注自己的数据集 整理数据集路径格式 训练数据集 环境 在Linux ...

  8. 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载...

    人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统 微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的 ...

  9. 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载

    人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统 微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的 ...

最新文章

  1. MindSpore平台系统类
  2. [Step By Step]SAP HANA中使用Excel展示分析视图数据(带层次结构)
  3. pytorch方法测试——卷积(二维)
  4. LeetCode5-最长回文子串原理及Python实现
  5. secureCRT 右键的设置选中就copy or 选中即粘贴
  6. 代码流程图生成器_【进阶Python】第五讲:迭代器与生成器
  7. 1818国民经济核算
  8. lazada铺货模式的选品_lazada小白的运营难点→铺货与精细化运营的优劣势详解
  9. 阿里P8成长路线!我的头条面试经历分享,吊打面试官系列!
  10. C 实现 删除字符串空白符的函数 strtrim
  11. 安装.Net Standard 2.0, Impressive
  12. 嵌入式Linux上没有x-window系统环境运行qt程序的方法
  13. vue项目的安装与启动
  14. JavaScript 大小转化B KB MB GB等的转化
  15. java google翻译api接口_java 免费调用google 谷歌翻译api
  16. html中所用到的英语单词怎么写,8的英语单词怎么写
  17. 如何在uReport2的SQL语句中添加查询参数并且访问报表页面
  18. matlab如何设置自变量,matlab中如何指定一个函数的自变量
  19. 如何对接payjs的个人微信扫码支付接口
  20. 社会化商业的基础架构

热门文章

  1. 【Excel实战】--图表联动demo_001
  2. [笔记] 《互联网思维独孤九剑》
  3. Justin Frankel:Winamp的反斗奇星
  4. quot;走近日企,感受日本quot;中国大学生日本茶道体验记
  5. ol7源码学习之Geometry
  6. Oracle EBS R12经验谈(二)
  7. 百度全民VIP狂欢节打通优质内容平台:对于内容行业有三个启示
  8. java怎么定义char_java定义一个char数组
  9. 基于Android+Django+Python的服饰管理与个性化定制系统的设计与实现
  10. arduino学习——WS2812灯带