本系列的最后一篇,NCS这个东西感觉上跑demo是可用的,但是用在产品上开发工作量怕是不小,需要转换成IR文件。调用方式比较复杂,支持的东西不太全。Intel的文档已经算可以了,但是还是少。算力的话标准的边缘端算力,被别人的i7完爆,和我的i7一样,哭。
模型在树莓派上的部署过程
- 选择预训练模型;
- 使用模型优化器,来转换模型;
- 最后在树莓派上推理模型。
五、如何训练自己的模型
准备和优化训练好的模型
推断引擎可以部署经过任何受支持深度学习框架训练的网络模型:Caffe、TensorFlow、Kaldi、MXNet 或转换为 ONNX* 格式。要执行推断,推断引擎不使用原始模型操作,而是使用其中间表示文件 (IR),后者已为在目标端点设备上执行进行过优化。要为训练好的模型生成中间表示文件,会使用模型优化器工具。
模型优化器如何工作
模型优化器将模型加载到内存中、读取模型、构建模型的内部表示文件、优化模型,并生成中间表示文件。中间表示文件是推断引擎接受的唯一格式。
注意:模型优化器不推断模型。模型优化器是推断发生之前运行的一种离线工具。
模型优化器有两个主要用途:
- 生成有效的中间表示文件。如果这个主要转换文件无效,则推断引擎无法运行。模型优化器的主要责任是生成构成中间表示文件的两个文件(
.xml
和.bin
)。 - 生成优化的中间表示文件。预训练的模型包含对于训练至关重要的层,如
Dropout
层。这些层在推断过程中毫无用处,反而可能增加推断时间。在许多情况下,这些操作可以自动从由此产生的中间表示文件中移除。但是,如果可以将一组操作表示为单个数学操作,然后成为模型图表中的单个操作节点,那么模型优化器会识别这一模式并用该单个操作节点代替这一组操作节点。结果就是一个运行节点数量比原始模型少的中间表示文件。这就降低了推断时间。
要生成有效的中间表示文件,模型优化器必须能够读取原始模型包含的操作、处理它们的属性,并以中间表示文件的格式表示它们,同时保持所产生的中间表示文件的有效性。由此产生的模型由操作规格中描述的操作组成。
有关模型,需要了解哪些内容
在已知的框架和神经网络拓扑中存在着许多普通层。这类层的例子包括Convolution
、Pooling
和Activation
。要读取原始模型并生成模型的中间表示文件,模型优化器必须能够处理这些层。
它们的完整列表取决于框架,并可以在受支持的框架层部分中找到。如果您的拓扑仅包含来自层列表的层,像大多数用户所使用的拓扑一样,那么模型优化器便可以轻松创建中间表示文件。在这之后,您就可以继续使用推断引擎。
但是,如果您使用的拓扑含有模型优化器无法识别的层,请查看模型优化器中的自定义层以了解如何处理自定义层。
模型优化器目录结构
在使用 OpenVINO™ 工具套件或英特尔® Deep Learning Deployment Toolkit 进行安装后,模型优化器文件夹具有以下结构:
1 | |-- model_optimizer |
with the 2017R3 release)
1 | |-- kaldi - Front-End Kaldi-specific transformations and Kaldi operations extractors |
replacements configuration files.
1 | |-- middle - Middle-End framework agnostic transformations (layers output shapes are defined). |
以下部分提供了有关如何使用模型优化器的信息,从配置工具、生成针对给定模型的中间表示文件,到根据您的需求定制工具:
- 配置模型优化器
- 将模型转换为中间表示文件
- 模型优化器中的自定义层
- 模型优化技术
](https://docs.openvinotoolkit.org/cn/latest/_docs_MO_DG_prepare_model_Model_Optimizer_FAQ.html)
第一步:
找到label文件
C:\Users\(你的用户名)\Documents\Intel\OpenVINO\openvino_models\ir\public\squeezenet1.1\FP16\squeezenet1.1.labels。
找到模型文件
C:\Users\(你的用户名)\Documents\Intel\OpenVINO\openvino_models\models\public\squeezenet1.1\squeezenet1.1.caffemodel
找一个input
C:\Program Files (x86)\IntelSWTools\openvino_2019.3.379\deployment_tools\demo\car.png
第二步:
转换模型,用到model_optimizer下的mo.py. 把上面的文件拷到了D:OPENVN下,用下面的代码转换。就能转换出.xml的文件。
第三步:
跑转换好的文件。。由于这一步骤其实主要是展示如何转换模型。。。所以我们还是用demo自带的业务逻辑。在这个文件夹夹下有刚才建立好的classification_sample_async.exe文件。。。下面这个文件夹下找。
C:\Users
cd到上面这个文件夹。
然后运行
.\classification_sample_async.exe -i “D:\OPENVN\car.png” -m “D:\OPENVN\squeezenet1.1.xml” -d MYRIAD