squeezenet 训练分类网络

各种教学视频或文档资料 +QQ:635992897

近期需要做移动端深度学习项目,首先调查了一下适合移动端的深度学习网络,常用的主要有:SqueezeNet、MobileNet、ShuffleNet、Xception。

几种网络原理及性能对比详见:

https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/79019191

综合评估SqueezeNet体量小运算速度较快,本文选择SqueezeNet作为分类网络

 

  1. git clone https://github.com/DeepScale/SqueezeNet到caffe/examples下(笔者发现本Git地址网络结构与标准网络不同可能会影响测试集准确率,后面文章会说明此处)
  2. 标记分类样本,将训练、测试照片分别放在SqueezeNet下子目录train和val下,
    创建train.txt和test.txt,格式如下:
    照片名 分类label
  3. 生成训练和测试数据集,编辑shell脚本createTrainLmdb.sh:
    #!/bin/bash
     
    ~/caffe/build/tools/convert_imageset –resize_height=227 –resize_width=227 –shuffle  ./train/  ./train.txt  ./lmdb/train_lmdb45
     
    createValLmdb.sh:
     
    #!/bin/bash
     
    ~/caffe/build/tools/convert_imageset –resize_height=227 –resize_width=227 –shuffle  ./val/  ./val.txt  ./lmdb/val_lmdb45
     
  4. 准备训练,使用SqueezeNet_v1.1目录网络训练,train_val.prototxt为训练模型文件,deploy.prototxt为测试模型文件,solver.prototxt为训练参数配置文件。
    修改train_val.prototxt,指定自己的训练集路径和batch_size(根据自己的GPU能力设置)
    data_param {
        source: "自己的绝对路径/lmdb/train_lmdb45"
        batch_size: 16
        backend: LMDB
      }
     data_param {
        source: "自己的绝对路径/lmdb/val_lmdb45"
        batch_size: 16 #not *iter_size
        backend: LMDB
      }

      修改train_val.prototxt最后一层卷积网络名称conv10为conv11(所有的conv10都需要改成conv11,因为我们采用imagenet的模型初始化当前模型,为了让模型初始化与imagenet模型相同的层),将conv10 output_num 1000改成2,top 5改成2。将deploy.prototxt中相同的参数做同样的修改。

调整solver.prototxt中的参数如学习率、迭代次数、Snapshot等其中学习率初步可以试下0.001

 

  1. 编辑shell脚本train.sh
    #!/bin/bash
    ~/caffe/build/tools/caffe train -solver SqueezeNet/SqueezeNet_v1.1/solver.prototxt -weights SqueezeNet/SqueezeNet_v1.1/squeezenet_v1.1.caffemodel  -gpu 0
     
    执行./train.sh开始训练
  2. 优化方法:用SSD提取目标保存目标ROI图片做训练提高精度

你可能感兴趣的:(深度学习)