Movidius的深度學習入門


1.Ubuntu虛擬機上安裝NC SDK

   cd /home/shine/Downloads/
   mkdir NC_SDK
   git clone https://github.com/movidius/ncsdk.git
   make install

   通過運行測試例程判斷是否正確安裝

   make examples

 2.激活USB設備

  在啟動ubuntu前,請不要插入movidius,等ubuntu啟動以后,再插入(知乎用戶經驗,筆者測試不影響)

3.測試工程

   cd /home/shine/Downloads/NC_SDK/ncsdk/examples/apps/hello_ncs_cpp/
   make run
   cd /home/shine/Downloads/NC_SDK/ncsdk/examples/apps/hello_ncs_py/
   make run

  正常結果顯示

   Hello NCS! Device opened normally.
   Goodbye NCS!  Device Closed normally.
   NCS device working.

 4.訓練工程

  ncappzoo中提供了大量的工程樣例提供分析,為開發者的模型選擇提供了極大的便利,在選擇模型的時候需要綜合權衡訓練樣本的類型、大小以及部署后的運行速度。

   cd /home/shine/Downloads/NC_SDK/ncsdk/
   git clone https://github.com/ashwinvijayakumar/ncappzoo
   git checkout dogsvscats 

   以貓和狗的分類任務為例

  • 數據集的准備(在百度網盤中共享測試數據集和訓練數據集)

    https://pan.baidu.com/s/1mtXYfB61Czkadjrgs4RXzw

    https://pan.baidu.com/s/1ZD4Hocgk4bMcl8tQGkTHcQ

   cd ncappzoo/apps/dogsvscats
   mkdir data
   mv /home/shine/Downloads/test1.zip ~/Downloads/ncappzoo/apps/dogsvscats/data/
   mv /home/shine/Downloads/train.zip ~/Downloads/ncappzoo/apps/dogsvscats/data/
   cd ncappzoo/apps/dogsvscats
   make 

   上述操作主要執行

   Image pre-processing - resizing , cropping , histogram equalization (圖像預處理)    Shuffling the images (圖像打亂)    Splitting the images into training and validation (圖像分割為訓練集和測試集)    Creating an lmdb database of these images (格式轉換)    Computing image mean -a common deep learning technique used to normalize data (計算圖像均值)  
  • 模型對比

  ①比較模型的差異

   export CAFFE_PATH=~/Downloads/caffe-master
   diff -u $CAFFE_PATH/models/bvlc_googlenet bvlc_googlenet/org  
  • 數據訓練

  ①下載caffe預訓練模型,使用本地CPU或GPU進行訓練,CAFFE_PATH需要替換為本地安裝目錄

   $CAFFE_PATH/scripts/download_model_binary.py $CAFFE_PATH/models/bvlc_googlenet
   $CAFFE_PATH/build/tools/caffe train --solver bvlc_googlenet/org/solver.prototxt --weights $CAFFE_PATH/models/bvlc_googlenet/bvlc_googlenet.caffemodel 2>&1 | tee bvlc_googlenet/org/train.log  

 

    #錯誤1:Cannot use GPU in CPU-only Caffe: check mode
    cd ~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/org
    vim solver.prototxt
    將其中的 solver_mode: GPU改為 solver_mode: CPU 或者將caffe重新編譯成GPU模式

    #錯誤2:Check failed: error == cudaSuccess (2 vs. 0) out of memory
     由於博主使用的是GTX 650Ti 顯存只有979Mb,執行GPU運算的時候出現顯存不足的現象 

   ②使用Intel AI Cloud 加速訓練

    如上文所述,在本地訓練數據是一個巨大的運算量,常常需要幾周或幾個月,因此使用Intel提供的雲服務器可以極大縮短訓練的時間

    在terminal中使用如下語句登陸到AI Cloud 服務器

    ssh colfax
    mkdir dogsvscats   

   登陸成功后即顯示

    ########################################################################
    # Welcome to Intel AI DevCloud!             
    ######################################################################## 

   將訓練dogsvscats工程所需的數據集及shell命令上傳到服務器(請根據實際目錄進行調整,若上傳速度較慢請嘗試雲服務器wget直接下載開放數據集)

   scp /home/shine/Downloads/ncappzoo/apps/dogsvscats/data/train.zip colfax:/home/u14673/ncappzoo/apps/dogsvscats/data/
   scp /home/shine/Downloads/ncappzoo/apps/dogsvscats/data/test1.zip .zip colfax:/home/u14673/ncappzoo/apps/dogsvscats/data/ 

   將對應的shell文件和Makefile上傳到服務器用於訓練數據預處理(請根據實際目錄進行調整)

   scp /home/shine/Downloads/ncappzoo/apps/dogsvscats/Makefile colfax:/home/u14673/ncappzoo/apps/dogsvscats/
   scp /home/shine/Downloads/ncappzoo/apps/dogsvscats/create-labels.py colfax:/home/u14673/ncappzoo/apps/dogsvscats/
   scp /home/shine/Downloads/ncappzoo/apps/dogsvscats/create-lmdb.sh colfax:/home/u14673/ncappzoo/apps/dogsvscats/ 

   使用Makefile進行預處理,由於Makefile中deps含有sudo apt-get -y install unzip和sudo pip install pyyaml,且sudo apt-get在AI Cloud中無法運行

   vi Makefile 

   將deps更改為

     @echo "Installing dependencies..."
   #      sudo apt-get -y install unzip
   #      sudo pip install pyyaml 

   :wq!保存后退出,創建任務用於數據預處理

   vi data_process.sh 

   在打開的界面中輸入(請根據實際目錄進行調整)

    echo "Start Data Process"
    cd /home/u14673/ncappzoo/apps/dogsvscats/
    make all
    echo "Data Process Finished"  

   :wq!保存后退出,提交任務開始數據預處理

    qsub data_process.sh 

    使用qstat可以查看任務完成的情況,完成后會在當前目錄中生成對應的日志文件 

   將訓練所需的prototxt及預訓練模型上傳至AI Cloud

   scp -r /home/shine/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet colfax:/home/u14673/ncappzoo/apps/dogsvscats/
    scp /home/shine/Downloads/caffe/models/bvlc_googlenet/bvlc_googlenet.caffemodel colfax:/home/u14673/ncappzoo/apps/dogsvscats/ 

    創建任務用於數據訓練

   vi data_train.sh  

     在打開的界面中輸入如下語句(請根據實際目錄進行調整)      

   cd /home/u14673/ncappzoo/apps/dogsvscats/
   echo 'Start Trainning'
   # >&表示所有的標准輸出和標准錯誤輸出都將被重定向
   /glob/intel-python/python3/bin/caffe train --solver bvlc_googlenet/org/solver.prototxt --weights /home/u14673/ncappzoo/apps/dogsvscats/bvlc_googlenet.caffemodel 2>&1 | tee bvlc_googlenet/org/train.log    

   關於caffe train命令的定義,標准的范例如下

 caffe train \ --solver=solver_1st.prototxt \ --weights=VGG/VGG_ILSVRC_16_layers.caffemodel \ --gpu=0,1,2,3 2>&1 | tee log_1st.txt

   其中--solver為必要的參數,配置solver文件
   如果從頭開始訓練模型,則無需配置--weights
   如果從快照中恢復,則需要配置--snapshot
   如果是fine-tuning,則需要配置
--weights

   :wq!保存后退出,提交任務開始訓練,訓練完成后在當前目錄可以看到日志文件

   qsub data_train.sh   

   查看日志,日志保存在 bvlc_googlenet/org 目錄,使用如下命令將數據拷貝到本地

   scp colfax:/home/u14673/ncappzoo/apps/dogsvscats/bvlc_googlenet/org/train.log ./   

   使用caffe自帶的工具繪制(位於caffe/tools/extra目錄)訓練數據,caffe中支持很多種曲線繪制,通過指定不同的類型參數即可,具體參數如下

  Notes:   1. Supporting multiple logs.   2. Log file name must end with the lower-cased ".log".   Supported chart types:   0: Test accuracy vs. Iters   1: Test accuracy vs. Seconds   2: Test loss vs. Iters   3: Test loss vs. Seconds   4: Train learning rate vs. Iters   5: Train learning rate vs. Seconds   6: Train loss vs. Iters   7: Train loss vs. Seconds  

   解析日志並生成Test accuracy  vs. Seconds曲線(實際應該為Test Loss,參考https://www.cnblogs.com/WaitingForU/p/9130327.html的解析)

    cd ~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/org    
    cp -r /home/shine/Downloads/caffe/tools/extra ~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/org
   mv train.log ./extra/
   ./plot_training_log.py.example 0 save.png ./train.log

     

                   Test Loss Vs Seconds 

    

                    Train Loss Vs Seconds

   從上述兩張圖來看,似乎訓練過程並未收斂,對於這一問題,原作者並未給出原因,而是建議去掉--weights重新進行訓練   

  /glob/intel-python/python3/bin/caffe train --solver bvlc_googlenet/org/solver.prototxt 2>&1 | tee bvlc_googlenet/org/train_withoutweights.log

   

                      Test Loss Vs Iters

   

                    Test Accuracy Vs Iters

    將訓練后的模型拷貝到本地

  scp colfax:/home/u14673/ncappzoo/apps/dogsvscats/bvlc_googlenet/org/bvlc_googlenet_iter_40000.caffemodel /home/shine/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/org/
  cd ~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/org/

   本地機器(需要安裝NCSDK)查看網絡分析,大致可以得到如下的圖形,顯示了各層連接的帶寬和運行時間

  mvNCProfile -s 12 deploy.prototxt -w bvlc_googlenet_iter_40000.caffemodel
  firefox output_report.html

   

 

  • 模型調優

   作者對比了dogsvscats例程中改進的網絡和GoogLenet原始網絡,通過Caffe自帶的Python工具分別繪制對應網絡拓撲

  cd ~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/org
  python ~/Downloads/caffe/python/draw_net.py train_val.prototxt train_val_plot.png
  eog train_val_plot.png
  cd
~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/custom   python ~/Downloads/caffe/python/draw_net.py train_val.prototxt train_val_plot.png
  eog train_val_plot.png

   使用python-caffe自帶的工具draw_net.py時可能會遇到如下錯誤

  #錯誤1 ImportError: No module named google.protobuf (沒有安裝python-protobuf) 
      sudo apt-get install python-protobuf

  #錯誤2 ImportError: No module named _caffe (caffe源碼編譯的時候沒有編譯pycaffe)
      cd ~/Downloads/caffe/
      sudo make pycaffe

  #錯誤3 ImportError: No module named skimage.io (沒有安裝python-skimage) 
      sudo apt-get install python-skimage

  #錯誤4 ImportError: No module named pydot (沒有安裝python-pydot)
      sudo apt install python-pydot python-pydot-ng graphviz
  • 模型部署

根據最新訓練的結果,生成graph文件

  cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/org (由於前面訓練過程未能收斂,使用該模型預測時會出現Nan的結果)
  mvNCCompile -s 12 deploy.prototxt -w bvlc_googlenet_iter_40000.caffemodel -o dogsvscats-org.graph
  cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/custom (定制優化后的網絡)
  mvNCCompile -s 12 deploy.prototxt -w bvlc_googlenet_iter_40000.caffemodel -o dogsvscats-org.graph
  • 模型測試

  修改ncappzoo/apps/image-classifier.py,原文件如下

  # User modifiable input parameters
  NCAPPZOO_PATH           = '../..'
  GRAPH_PATH              = NCAPPZOO_PATH + '/caffe/GoogLeNet/graph'
  IMAGE_PATH              = NCAPPZOO_PATH + '/data/images/cat.jpg'
  CATEGORIES_PATH         = NCAPPZOO_PATH + '/data/ilsvrc12/synset_words.txt'
  IMAGE_MEAN              = numpy.float16( [104.00698793, 116.66876762, 122.67891434] )
  IMAGE_STDDEV            = ( 1 )
  IMAGE_DIM               = ( 224, 224 )

  修改后的文件如下

  NCAPPZOO_PATH           = '../..'
  GRAPH_PATH              = NCAPPZOO_PATH +'/apps/dogsvscats/bvlc_googlenet/custom/dogsvscats-org.graph'
  IMAGE_PATH              = NCAPPZOO_PATH +'/apps/dogsvscats/data/test1/173.jpg'
  CATEGORIES_PATH         = NCAPPZOO_PATH +'/apps/dogsvscats/data/categories.txt'
  IMAGE_MEAN              = numpy.float16( [106.202, 115.912, 124.449] )
  IMAGE_STDDEV            = ( 1 )
  IMAGE_DIM               = ( 224, 224 )

  使用生成的graph測試准確率(注意是python3,使用python image-classifier.py時會報錯,具體原因待查明)

  cd ~/Downloads/ncappzoo/apps/image-classifier
  python3 image-classifier.py

  得到結果如下

  ------- predictions --------   Prediction for : dog with 100.0% confidence in 89.67 ms   Prediction for : cat with 0.0% confidence in 89.67 ms

  那么關於本步驟部署,系統具體作了哪些事情呢,深入查看image-classifier.py我們可以得知

  # ---- Step 1: Open the enumerated device and get a handle to it -------------
  #  枚舉Movidius神經元計算棒
  # ---- Step 2: Load a graph file onto the NCS device -------------------------
  #  加載graph文件
  # ---- Step 3: Offload image onto the NCS to run inference -------------------
  #  加載image文件
  # ---- Step 4: Read & print inference results from the NCS -------------------
  #  讀取並打印運算結果
  # ---- Step 5: Unload the graph and close the device -------------------------
  #  關閉神經元計算棒
  • 模型調優  

 

 

 

  • 參考文獻:

   1.https://movidius.github.io/blog/deploying-custom-caffe-models

   2.https://communities.intel.com/community/tech/intel-ai-academy

   3.https://www.kaggle.com/khorchanov/dogsvscats


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM