神经计算SDK工具包:mvNCCheck
英特尔®Movidius™神经计算软件开发套件(NCSDK)附带三个工具,旨在帮助用户使用英特尔®Movidius™神经计算棒(英特尔®Movidius™NCS)启动和运行:mvNCCheck,mvNCCompile和mvNCProfile 。在本文中,我们将旨在更好地理解mvNCCheck工具如何工作以及它如何适应Neural Compute SDK的整体工作流程。
快速通道:让我们使用mvNCCheck检查网络!你将学习…- 如何使用mvNCCheck工具
- 如何解释mvNCCheck的输出
你会需要…- 英特尔Movidius神经计算棒 - 何处购买
- 运行Ubuntu 16.04的x86_64笔记本电脑/台式机
- 如果您还没有,请在开发计算机上安装NCSDK。有关安装说明,请参阅“ Intel Movidius NCS快速入门指南”。
复制代码 检查网络步骤1 - 打开终端并导航到ncsdk / examples / caffe / GoogLeNet第2步 - 让我们使用mvNCCheck验证Intel Movidius NCS上的网络- mvNCCheck deploy.prototxt -w bvlc_googlenet.caffemodel
复制代码 第3步 - 你完成了!您应该看到类似下面的屏幕:- USB: Myriad Connection Closing.
- USB: Myriad Connection Closed.
- Result: (1000,)
- 1) 885 0.3015
- 2) 911 0.05157
- 3) 904 0.04227
- 4) 700 0.03424
- 5) 794 0.03265
- Expected: (1000,)
- 1) 885 0.3015
- 2) 911 0.0518
- 3) 904 0.0417
- 4) 700 0.03415
- 5) 794 0.0325
- ------------------------------------------------------------
- Obtained values
- ------------------------------------------------------------
- Obtained Min Pixel Accuracy: 0.1923076924867928% (max allowed=2%), Pass
- Obtained Average Pixel Accuracy: 0.004342026295489632% (max allowed=1%), Pass
- Obtained Percentage of wrong values: 0.0% (max allowed=0%), Pass
- Obtained Pixel-wise L2 error: 0.010001560141939479% (max allowed=1%), Pass
- Obtained Global Sum Difference: 0.013091802597045898
- ------------------------------------------------------------
复制代码 mvNCCheck做了什么以及为什么需要它?作为NCSDK的一部分,mvNCCheck有三个主要目的: - 确保数据从fp32转换为fp16时的准确性
- 快速了解网络是否与Intel NCS兼容
- 逐层快速调试网络
确保准确的结果
为了确保准确的结果,mvNCCheck比较了英特尔Movidius NCS与网络本机框架(Caffe / TensorFlow™)之间的推断结果。由于Intel Movidius NCS和NCSDK使用16位浮点数据,因此必须将传入的32位浮点数据转换为16位浮点数。从fp32到fp16的转换可能会导致推理结果中出现较小的舍入问题,这就是mvNCCheck工具可以派上用场的地方。mvNCCheck工具可以检查您的网络是否产生了准确的结果。
首先,mvNCCheck工具读入网络并将模型转换为Intel Movidius NCS格式。然后,它通过英特尔Movidius NCS上的网络进行推断,并且还使用网络的本机框架(Caffe / TensorFlow)进行推理。
最后,mvNCCheck工具显示一个简短的报告,该报告比较了英特尔Movidius NCS和本机框架的推断结果。这些结果可用于确认神经网络在英特尔Movidius NCS上的fp32到fp16转换后产生准确的结果。关于比较结果的进一步细节将在下面讨论。
确定与Intel Movidius NCS的网络兼容性mvNCCheck还可以用作简单检查网络是否与Intel Movidius NCS兼容的工具。有许多限制可能导致网络与Intel Movidius NCS不兼容,包括但不限于内存限制,不支持的层或不支持的神经网络架构。有关限制的更多信息,请访问TensorFlow和Caffe框架的英特尔Movidius NCS文档网站。此外,您还可以查看最新的NCSDK发行说明,以获取有关SDK的勘误表和新版本功能的更多信息。
使用mvNCCheck调试网络如果您的网络未按预期工作,则mvNCCheck可用于调试您的网络。这可以通过使用-in和-on选项运行mvNCCheck来完成。 - -in选项允许您将节点指定为输入节点
- -on选项允许您将节点指定为输出节点
将-in和-on参数与mvNCCheck一起使用,可以通过在逐层或二进制搜索分析中比较英特尔NCS结果与Caffe / TensorFlow来确定错误/差异可能源自哪个层。
调试示例:我们假设您的网络架构如下: - 输入数据
- conv1 - 卷积层
- pooling1 - 池层
- conv2 - 卷积层
- pooling2 - 池层
- Softmax - Softmax
让我们假装你在运行mvNCCheck时得到nan(而不是数字)结果。您可以使用-on选项通过运行以下命令来检查第一个Convolution层“conv1”的输出mvNCCheck user_network -w user_weights -in input -on conv1。对于大型网络,使用二进制搜索方法将有助于减少查找问题所在的层所需的时间。
了解mvNCCheck的输出
我们来看看上面的mvNCCheck的输出。 - 绿色框中的结果是英特尔NCS推断结果的前五位
- 红框中的结果是Caffe或TensorFlow的前五个框架结果
- 比较输出(以蓝色显示)显示了两个推断结果之间的各种比较
为了更详细地理解这些结果,我们必须理解,英特尔Movidius NCS和Caffe / TensorFlow的输出都存储在张量中(张量的更简化定义是值数组)。五个比较测试中的每一个都是两个张量之间的数学比较。 传说:- ACTUAL - 神经计算棒的张量输出
- 预期 - 框架的张量输出(Caffe或TensorFlow)
- Abs - 计算绝对值
- 最大值 - 从张量中找出最大值
- Sqrt - 查找值的平方根
- 总和 - 查找值的总和
最小像素精度:该值表示两个输出张量值之间的最大差异。 平均像素精度:这是两个张量值之间的平均差异。 错误值的百分比:
此值表示与框架张量相差超过2%的英特尔Movidius NCS张量值的百分比。 - 为什么2%的门槛?2%的阈值来自将精度从fp32降低到fp16的预期影响。
像素方面的L2错误:
该值是整个输出张量的粗略相对误差。 总和差异:
英特尔Movidius NCS张量与框架张量之间所有差异的总和。 mvNCCheck是如何在没有输入的情况下进行推理的?当正向通过神经网络时,通常提供张量或数值数组作为输入。如果未指定输入,则mvNCCheck使用从-1到1的随机浮点值的输入张量。还可以使用“-i”参数后跟图像文件的路径,使用mvNCCheck指定图像输入。 检查失败的案例如果运行mvNCCheck并且网络出现故障,则可能是以下原因之一。 输入缩放一些神经网络期望输入值被缩放。如果未缩放输入,则可能导致Intel Movidius NCS推断结果与框架推断结果不同。 使用mvNCCheck时,可以使用-S选项指定用于缩放输入的除数。图像通常与来自每个颜色通道的值一起存储,范围为0-255。如果神经网络期望值为0.0到1.0,则使用-S 255选项将所有输入值除以255并相应地将输入从0.0缩放到1.0。 -M选项可用于从输入中减去均值。例如,如果神经网络期望输入值介于-1到1之间,则可以同时使用-S 128和-M 128选项将网络从-1缩放到1。 不支持的图层错误更多mvNCCheck选项进一步阅读
|