Movidius的深度学习入门

2023-11-22 03:30
文章标签 学习 入门 深度 movidius

本文主要是介绍Movidius的深度学习入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.Ubuntu虚拟机上安装NC SDK

   cd /home/shine/Downloads/mkdir NC_SDKgit clone https://github.com/movidius/ncsdk.gitmake install

   通过运行测试例程判断是否正确安装

   make examples

 2.激活USB设备

  在启动ubuntu前,请不要插入movidius,等ubuntu启动以后,再插入(知乎用户经验,笔者测试不影响)

3.测试工程

   cd /home/shine/Downloads/NC_SDK/ncsdk/examples/apps/hello_ncs_cpp/make runcd /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/ncappzoogit checkout dogsvscats 

   以猫和狗的分类任务为例

  • 数据集的准备(在百度网盘中共享测试数据集和训练数据集)

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

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

   cd ncappzoo/apps/dogsvscatsmkdir datamv /home/shine/Downloads/test1.zip ~/Downloads/ncappzoo/apps/dogsvscats/data/mv /home/shine/Downloads/train.zip ~/Downloads/ncappzoo/apps/dogsvscats/data/cd ncappzoo/apps/dogsvscatsmake 

   上述操作主要执行

   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-masterdiff -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 modecd ~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/orgvim 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 colfaxmkdir 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 allecho "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/orgmv 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.caffemodelfirefox output_report.html

   

 

  • 模型调优

   作者对比了dogsvscats例程中改进的网络和GoogLenet原始网络,通过Caffe自带的Python工具分别绘制对应网络拓扑

  cd ~/Downloads/ncappzoo/apps/dogsvscats/bvlc_googlenet/orgpython ~/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/custompython ~/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 parametersNCAPPZOO_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-classifierpython3 image-classifier.py

  得到结果如下

  ------- predictions --------Prediction for : dog with 100.0% confidence in 89.67 msPrediction 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

转载于:https://www.cnblogs.com/WaitingForU/p/9043737.html

这篇关于Movidius的深度学习入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407178

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操