查看: 17608|回复: 0

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

[复制链接]

425

主题

253

回帖

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20626
发表于 2018-8-1 11:27:30 | 显示全部楼层 |阅读模式
神经计算SDK工具包:mvNCCheck
英特尔®Movidius™神经计算软件开发套件(NCSDK)附带三个工具,旨在帮助用户使用英特尔®Movidius™神经计算棒(英特尔®Movidius™NCS)启动和运行:mvNCCheck,mvNCCompile和mvNCProfile 。在本文中,我们将旨在更好地理解mvNCCheck工具如何工作以及它如何适应Neural Compute SDK的整体工作流程。

快速通道:让我们使用mvNCCheck检查网络!你将学习…
  • 如何使用mvNCCheck工具
  • 如何解释mvNCCheck的输出
你会需要…
  • 英特尔Movidius神经计算棒 - 何处购买
  • 运行Ubuntu 16.04的x86_64笔记本电脑/台式机
  1. 如果您还没有,请在开发计算机上安装NCSDK。有关安装说明,请参阅“ Intel Movidius NCS快速入门指南”。
复制代码
检查网络步骤1 - 打开终端并导航到ncsdk / examples / caffe / GoogLeNet第2步 - 让我们使用mvNCCheck验证Intel Movidius NCS上的网络
  1. mvNCCheck deploy.prototxt -w bvlc_googlenet.caffemodel
复制代码
第3步 - 你完成了!您应该看到类似下面的屏幕:
  1. USB: Myriad Connection Closing.
  2. USB: Myriad Connection Closed.
  3. Result:  (1000,)
  4. 1) 885 0.3015
  5. 2) 911 0.05157
  6. 3) 904 0.04227
  7. 4) 700 0.03424
  8. 5) 794 0.03265
  9. Expected:  (1000,)
  10. 1) 885 0.3015
  11. 2) 911 0.0518
  12. 3) 904 0.0417
  13. 4) 700 0.03415
  14. 5) 794 0.0325
  15. ------------------------------------------------------------
  16. Obtained values
  17. ------------------------------------------------------------
  18. Obtained Min Pixel Accuracy: 0.1923076924867928% (max allowed=2%), Pass
  19. Obtained Average Pixel Accuracy: 0.004342026295489632% (max allowed=1%), Pass
  20. Obtained Percentage of wrong values: 0.0% (max allowed=0%), Pass
  21. Obtained Pixel-wise L2 error: 0.010001560141939479% (max allowed=1%), Pass
  22. Obtained Global Sum Difference: 0.013091802597045898
  23. ------------------------------------------------------------
复制代码
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。
不支持的图层
并非所有神经网络架构和层都受到英特尔Movidius NCS的支持。如果在运行mvNCCheck后收到错误消息“不支持阶段详细信息”,则您选择的网络可能需要神经计算SDK尚不支持的操作或图层。有关所有支持的图层的列表,请访问Neural Compute Caffe支持Neural Compute TensorFlow支持文档站点。
错误
错误结果的另一个可能原因是错误。请将所有错误报告给英特尔Movidius神经计算开发者论坛
更多mvNCCheck选项
有关mvNCCheck参数的完整列表,请访问mvNCCheck文档网站
进一步阅读



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|风火轮WIKI|手机版|小黑屋|深圳风火轮团队 ( 粤ICP备17095099号 )

GMT+8, 2024-12-21 21:06 , Processed in 0.062509 second(s), 19 queries .

快速回复 返回顶部 返回列表
 
【客服1】 商务合作 15289193
【客服2】 业务洽谈 13257599
【客服3】 售前咨询 510313198
【邮箱】
smartfire@smartfire.cn