squeezenet 訓練分類網絡

近期需要做移動端深度學習項目,首先調查了一下適合移動端的深度學習網絡,常用的主要有:SqueezeNet、MobileNet、ShuffleNet、Xception。

幾種網絡原理及性能對比詳見:

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

綜合評估SqueezeNet體量小運算速度較快,本文選擇SqueezeNet作爲分類網絡

 

  1. git clone https://github.com/DeepScale/SqueezeNet到caffe/examples下
  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圖片做訓練提高精度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章