windows环境下,利用caffe框架,采用MoblieNet的图像识别

环境:
Win10+python3.5+CUDA8.0+Caffe1+GTX1060 3G

首先,环境搭建.

  1. 默认已装好cuda8.0+cuDNN6.0.
  2. caffe的安装参考我上一篇博文.

第二,数据准备.

  1. 准备好trainlmg和testlmg文件.
  2. 计算均值

第三,微调网络结构

name: "MOBILENET"
layer {
  name: "data_train"
  type: "ImageData"
  top: "data"
  top: "label"
  include {
    phase: TRAIN # TRAIN,表示训练时使用
  }
  transform_param {
    scale: 0.00390625 # 1/255,图像归一化
    mirror: true # 是否镜像,视情况而定
    crop_size: 224 # 输入到网络的图像的尺寸
    mean_value: [112.24, 115.46, 117.84] # 训练集的图像的三个通道的均值
  }
  image_data_param {
    source: "train_txt.txt" # 你的trainImg.txt,形如  0\0.jpg 0  
                                                    0\1.jpg 0
                                                    0\10.jpg 0
                                                    0\100.jpg 0
                                                    0\1000.jpg 0
                                                    0\1001.jpg 0
    batch_size: 10  # 你的batc size
    new_height: 224 # 如果设置了,就是把原始的输入图像resize成new_*的尺寸,前面的crop_size是随机采集的尺寸
    new_width: 224
    shuffle:true # 是否打散数据
    root_folder: "D:\\work\\data-backandcard\\trainImg\\" # 你训练图像的地址的前半段,
                                                                        # 其实某个图像的地址就是 root_folder + trainImg.txt,
                                                                        # 注意两个\\,或者一个/
  }
}
layer {
  name: "data_test"
  type: "ImageData"
  top: "data"
  top: "label"
  include {
    phase: TEST # TEST,表示测试时使用
  }
  transform_param {
    scale: 0.00390625
    mirror: true
    crop_size: 224
    mean_value: [112.24, 115.46, 117.84]
  }
  image_data_param {
    source: "test_txt.txt"
    batch_size: 10 
    new_height: 224
    new_width: 224
    shuffle:true
    root_folder: "D:\\work\\data-backandcard\\testImg\\"
  }
}


  • 针对最后一层
layer {
  name: "myfc7" # 原本是"fc7",最好改一下新的,有人说如果不改,可能不会改变模型结构
  type: "Convolution"
  bottom: "pool6"
  top: "myfc7" # 所有的"fc7"均改为新的,例如我的"myfc7"
  param {
    lr_mult: 10 # 把学习率调高,加速收敛
    decay_mult: 1
  }
  param {
    lr_mult: 20 # 把学习率调高,加速收敛
    decay_mult: 0
  }
  convolution_param {
    num_output: 13  # 修改你的输出类别数
    kernel_size: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "myfc7"  # 这里改
  bottom: "label"
  top: "loss"
}
layer {
  name: "top1/acc"
  type: "Accuracy"
  bottom: "myfc7" # 这里
  bottom: "label"
  top: "top1/acc"
  include {
    phase: TEST
  }
  accuracy_param {
    top_k: 1
  }
}
layer {
  name: "top5/acc"
  type: "Accuracy"
  bottom: "myfc7" # 这里
  bottom: "label"
  top: "top5/acc"
  include {
    phase: TEST
  }
  accuracy_param {
    top_k: 5
  }
}

  • 修改solver.prototxt, 用于定义训练的参数
net: "train.prototxt" # train.prototxt的路径,最好写绝对路径
test_iter: 170 # 你的 总测试样本数 / batchsize ,大约是这样,一个整数
test_interval: 2000 # 你的 总训练样本数 /batchsize

base_lr: 0.0001  # 初试学习率,对训练影响巨大,如果你的loss一直=87.3...,很可能是这个原因
lr_policy: "step" # 梯度下降的方式
gamma: 0.1 # 一般是这个值 
stepsize: 1999 # 每多少的iter下降一次学习率

display: 10 # 每多少iter打印一下loss
max_iter: 10000 # 最大迭代次数,一般是test_interval的3-6倍
momentum: 0.9 # 一般是这个
weight_decay: 0.0005 # 一般是这个
snapshot: 5000 # 每多少次iter保存一下caffe的model,同时也会打印top1 和 top5 准确率,如果你的硬盘空间充足可以设小一点,反正MobileNet很小,20M不到
snapshot_prefix: "./model/mobilenet" # caffemodel的保存路径和保存名称,如"model"文件夹下记得要新建,他的名字是mobilenet_iter_1000.caffemodel
solver_mode: GPU # 使用GPU训练
  • 训练,cmd下输入如下,回车
    D:\caffe\bin\caffe.exe train -solver .\solver.prototxt -weights D:\caffe\models\MobileNet\Mobilenet.caffemodel -gpu all
    具体的路径依自己的而定
  • 下一篇将介绍如何将caffe的模型与Opencv的Dnn模块结合起来使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值