peter 发表于 2018-8-1 11:27:30

使用和理解神经元计算SDK:mvNCCheck

神经计算SDK工具包:mvNCCheck英特尔®Movidius™神经计算软件开发套件(NCSDK)附带三个工具,旨在帮助用户使用英特尔®Movidius™神经计算棒(英特尔®Movidius™NCS)启动和运行:mvNCCheck,mvNCCompile和mvNCProfile 。在本文中,我们将旨在更好地理解mvNCCheck工具如何工作以及它如何适应Neural Compute SDK的整体工作流程。https://movidius.github.io/blog/images/mvNCCheck_block_diagram.png
快速通道:让我们使用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的输出
https://movidius.github.io/blog/images/mvNCCheck_output.png
我们来看看上面的mvNCCheck的输出。
[*]绿色框中的结果是英特尔NCS推断结果的前五位
[*]红框中的结果是Caffe或TensorFlow的前五个框架结果
[*]比较输出(以蓝色显示)显示了两个推断结果之间的各种比较
为了更详细地理解这些结果,我们必须理解,英特尔Movidius NCS和Caffe / TensorFlow的输出都存储在张量中(张量的更简化定义是值数组)。五个比较测试中的每一个都是两个张量之间的数学比较。传说:
[*]ACTUAL - 神经计算棒的张量输出
[*]预期 - 框架的张量输出(Caffe或TensorFlow)
[*]Abs - 计算绝对值
[*]最大值 - 从张量中找出最大值
[*]Sqrt - 查找值的平方根
[*]总和 - 查找值的总和

最小像素精度:该值表示两个输出张量值之间的最大差异。https://movidius.github.io/blog/images/min_pixel_accuracy.png平均像素精度:这是两个张量值之间的平均差异。https://movidius.github.io/blog/images/avg_pixel_accuracy.png错误值的百分比:
此值表示与框架张量相差超过2%的英特尔Movidius NCS张量值的百分比。https://movidius.github.io/blog/images/percentage_wrong_values.png
[*]为什么2%的门槛?2%的阈值来自将精度从fp32降低到fp16的预期影响。
像素方面的L2错误:
该值是整个输出张量的粗略相对误差。https://movidius.github.io/blog/images/pixelwise_L2_error.png总和差异:
英特尔Movidius NCS张量与框架张量之间所有差异的总和。https://movidius.github.io/blog/images/sum_difference.pngmvNCCheck是如何在没有输入的情况下进行推理的?当正向通过神经网络时,通常提供张量或数值数组作为输入。如果未指定输入,则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。不支持的图层并非所有神经网络架构和层都受到英特尔Movidius NCS的支持。如果在运行mvNCCheck后收到错误消息“不支持阶段详细信息”,则您选择的网络可能需要神经计算SDK尚不支持的操作或图层。有关所有支持的图层的列表,请访问Neural Compute Caffe支持和Neural Compute TensorFlow支持文档站点。错误错误结果的另一个可能原因是错误。请将所有错误报告给英特尔Movidius神经计算开发者论坛。更多mvNCCheck选项有关mvNCCheck参数的完整列表,请访问mvNCCheck文档网站。进一步阅读
[*]了解英特尔Movidius NCS的整个开发工作流程。
[*]这是关于网络配置的一个很好的记录,其中包括平均减法和缩放主题。




页: [1]
查看完整版本: 使用和理解神经元计算SDK:mvNCCheck