如何用 美元以内的...

9
Point Grey 白皮系列 www.flir.com/mv 如何用 美元以内的 成本建立深度学习检查内容包括: 什么是深度学推断? 选择硬件 安装建、 训练和部署花卉分类器 量数据集 过转移学习训练您的模型 化并部署您的模型至 Movidius™ Myriad 2 VPU 在相机入中运行推断 ......有更多! 白皮系列

Upload: others

Post on 27-Jul-2020

23 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

Point Grey 白皮书系列

www.flir.com/mv

如何用 美元以内的

成本建立深度学习检查体

内容包括:

• 什么是深度学习推断?

• 选择硬件

• 安装软件

• 创建、 训练和部署花卉分类器

• 下载高质量数据集

• 通过转移学习训练您的模型

• 优化并部署您的模型至 Movidius™ Myriad 2 VPU

• 在相机输入中运行推断

• ......还有更多!

白皮书系列

Page 2: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

简介

深度学习的目的在于彻底改变机器视觉的局面。 它正在启用新的应用并影响已建立

的市场。 万事开头难,要从哪里入手呢?本文将提供一份易于理解的指南,指导如

何在 $1000美元的成本内建立一套深度学习推断体系。

什么是深度学习推断?

推断是指使用深度学习训练后的神经网络对新数据做出预测。 相较于基于规则的图

像分析,推断在回应复杂和主观问题上具备明显的优势。 通过优化网络以在低功率

硬件上运行,推断实现数据源边缘操作。 这使得系统不再依赖中央服务器进行图像

分析,从而降低延迟、 提高可靠性和安全性。

选择硬件

本指南的目标是建立可靠的高质量系统,以便在现场进行部署。 虽然传统计算机视

觉技术与深度学习推断的结合不在本指南内容范围内,但借鉴每一种方法的优势有

助于实现高精度和高计算效率。 Aaeon UP Squared-Celeron-4GB-32GB 单板机拥有符合

该方法要求的内存和 CPU 能力。 它的 X64 Intel CUP 运行与传统桌面 PC 一样的软

件,相较于基于 ARM 的单板计算机 (SBC),可以简化开发。

启用深度学习推断的代码使用分支逻辑;而专用硬件则可以大幅提升代码执行速

度。 Intel® Movidius™ Myriad™ 2 视觉处理单元 (VPU) 是一种非常强大和高效的推断加

速器。 小尺寸和低功率损耗使其可以集成到 Intel® 神经元计算棒(Neural Compute

Stick)或集成到用于 Aaeon UP2 SBC 的 Aaeon AI Core 微型 PCIE 扩充板。

准确和可信度高的推断取决于高质量的输入数据。 FLIR BFS-U3-16S2C-C 相机采用

Sony Pregius IMX273 传感器,在严苛的光线条件下也能生成清晰的图像。 Blackfly S 相

机具有丰富的板载功能,可实现精确触发和图像预处理。

Page 3: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

步骤 1: 设置硬件

安装相机

将相机连接到 USB 3.1 Gen. 1端口

安装镜头

安装深度学习加速器

将 AICore 连接到 mini PCIe插槽

将 Intel神经元计算棒安装到 USB端口

步骤 2: 安装软件

许多免费工具可供您构建、 训练和部署深度学习推断模型。 众多工具支持的 Ubuntu

16.04 操作系统 (http://releases.ubuntu.com/16.04/) 将用于该项目。 它由提供丰富支持

资源的大量活跃用户群提供支撑。 该示例使用一系列免费的开源软件。 每一个软件包

的安装指导均在相应网站提供。 本指南默认您熟知 Linux 控制台的基础知识。

部件 编号 价格

USB3 Vision 相机 BFS-U3-16S2C-C 345

Myriad 2 VPU UP AI Core 69

单板计算机 UP Squared-Celeron-4GB-32GB-PACK 239

3M USB 3 连接线 ACC-01-2300 10

更好的镜头? LENS-28C2-V100CS 90

C-CS 适配器 ACC-01-5004 5

显微镜 LED 环形灯 Amazon 30

软件 Ubuntu 16.04、 TensorFlow、 Intel

NCSDK、 Bazel、 FLIR Spinnaker SDK 0

总计 $788

Page 4: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

收集训练数据 训练网络

(增强可选)

评估表现 转换为

Movidius 图形

格式

部署至 Myriad

2 VPU

在捕捉的图像

上运行推断

图 1. 深度学习推断工作流程及每个步骤的相关工具。

1. 下载 Ubuntu 16.04 (ARM64 Desktop)

2. TensorFlow 是一种受欢迎的开源软件库,广泛用于深度学习应用。它提供易

用的 Python API,使用户轻松地建立和训练深度神经网络。安装说明可从

TensorFlow (https://www.tensorflow.org/install/install_linux) 获取。由于 Up

Squared board 没有 GPU,应安装免 Nvidia GPU 支持的变体。

3. Bazel 是免费工具,用于构建图形转换所需的 TensorFlow 工具。安装说明可从

开发者 (https://docs.bazel.build/versions/master/install-ubuntu.html) 获取。

4. 将神经网络转换为 Movidius™ 格式并上传至 Myriad 2 VPU 需要神经元计算棒

软件开发工具包 (NCSDK)。安装说明可从 Intel®

(https://github.com/movidius/ncsdk) 获取。

5. FLIR 的 Spinnaker SDK (https://www.ptgrey.com/support/downloads) 是一种

GenICam API 库,用于控制 FLIR 机器视觉相机。

步骤 3: 下载培训数据

该示例将 Google 出色的 TensorFlow for Poets 教程

(https://codelabs.developers.google.com/codelabs/tensorflow-for-poets) 作为起始。 克

隆本教程的 git 存储库以下载此示例中使用的脚本。

Page 5: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

git clone https://github.com/googlecodelabs/tensorflow-for-poets-2

cd tensorflow-for-poets-2

构建、 训练和部署花卉分类器

该示例中,您将训练神经网络如何分类几类常见花卉。 我们会使用 MobileNet 来完

成。 MobileNet 是一类深度神经网络,可在移动设备上实现准确结果和高能量效率,

是部署到 Myriad 2 VPU 的理想选择。

下载高质量数据集

训练神经网络的最重要的要求是拥有一组良好的标记训练数据。 其质量和数量都很

关键。 除了图像质量,数据标签必须准确且无噪声。 当一些标签与图像的无关度高

于其他标签时,就出现了噪声标签数据。

A. B. 图 2. 标记好 (A) 和标记差 (B) 的“花卉”训练数据。 虽然两组图像都包含花卉,但 B 组图像比 A 组图像更缺少与“花卉”

的相关性。

根据训练数据的质量和数量不同,可能需要进行预处理。 数据集图像的尺寸会对训

练网络所需的时间和一次性部署的速度产生很大影响。 所有图像的高宽比和尺寸应

当一致。

可选的预处理能提高训练速度和最终模型的准确性。 数据的标准化确保每个图像具

有类似的像素亮度值分布。

Page 6: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

A. B.

图 3. 使用 Y = (x - x.mean()) / x.std() 方法标准化图像数据可大幅提高训练速度和准确性。

对图像应用仿射变换(例如缩放、 旋转和剪切),数据增强会快速扩展数据集的大

小。 训练期间,将数据集暴露于更多变化中,增强可提升在有限数据集上训练的网

络性能。

A. B.

图 4. 源图像 (A) 的仿射变换 (B) 可快速生成更多的图像变体,以扩大训练数据集。

此处使用的数据集是一个广泛使用的示例。 这样的数据的质量和数量使得无需进一

步处理即可使用。 从 TensorFlow.org 下载数据集。

curl http://download.tensorflow.org/example_images/flower_photos.tgz \

| tar xz -C tf_files

步骤 4: 通过转移学习训练您的模型

如需在数据集上训练神经网络,请使用迁移学习。 它使用预训练图像分类器,并重

新训练它以使用基本任务作为起点识别新对象。 这比重新开始训练网络要快得多。

Page 7: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

深度神经网络的许多隐藏层用于特征抽取,无需从基本任务重新训练便可以让网络

适应新任务。

通过调整输入图像尺寸和模型的尺寸参数使精确度和速度保持平衡。 输入图像分辨

率更高的更大网络会更加精确,但也需要更强的计算能力,运行速度更慢。 用

224 px x 224 px 输入图像和 MobileNet 最大模型的 0.5 倍尺寸模型为例说明。

IMAGE_SIZE=224

ARCHITECTURE="mobilenet_0.50_${IMAGE_SIZE}"

使用 TensorBoard 工具监控训练过程。

tensorboard --logdir tf_files/training_summaries &

现在您已准备开始重新训练 MobileNet。

python -m scripts.retrain \

--bottleneck_dir=tf_files/bottlenecks \

--how_many_training_steps=500 \

--model_dir=tf_files/models/ \

--summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \

--output_graph=tf_files/retrained_graph.pb \

--output_labels=tf_files/retrained_labels.txt \

--architecture="${ARCHITECTURE}" \

--image_dir=tf_files/flower_photos

过程可能需要时间,您可通过 TensorBoard 工具监控。 模型重新训练后将保存为

tf_files/retrained_graph.pb。您可用训练数据集中的样图对其进行测试。

python -m scripts.label_image \

Page 8: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

--graph=tf_files/retrained_graph.pb \

--image=tf_files/flower_photos/daisy/21652746_cc379e0eea_m.jpg

如需在原始数据集之外的新图像上运行模型,请将--image标记指向至您想使用的图

像位置。 如果新图像尺寸与数据集图像不同,您需要添加--input_size=${IMAGE_SIZE}

标记至先前的 shell 命令或手动调整其大小。

步骤 5: 优化并部署您的模型至 Movidius™ Myriad 2 VPU

重新训练的模型在部署到 Intel® Movidius™ Myriad™ 2 之前,需为 Intel 的 NCSDK 进行

优化。 可使用 TensorFlow 和 Bazel 完成。

/home/username/Public/Projects/tensorflow/tensorflow/bazel-

bin/tensorflow/tools/graph_transforms/transform_graph \

--

in_graph=/home/username/Public/Projects/tf_poets/tf_files/retrained_graph.pb

\

--

out_graph=/home/username/Public/Projects/tf_poets/tf_files/optimized_graph.p

b \

--inputs='input' \

--outputs='final_result' \

--transforms='

strip_unused_nodes(type=float, shape="1,224,224,3")

remove_nodes(op=Identity, op=CheckNumerics, op=PlaceholderWithDefault)

fold_batch_norms

fold_old_batch_norms'

Bazel 可以轻松地对模型的性能进行基准测试。 该步骤非必需,但有助于您优化更复

杂的模型。

bazel run tensorflow/tools/benchmark:benchmark_model

--graph=/home/username/Public/Projects/tf_poets/tf_files/optimized_graph.pb

Page 9: 如何用 美元以内的 成本建立深度学习检查体vsdc.actintl.com.cn/eFocus/2018/1009/FLIR-MV-Deep...Point Grey 白皮书系列 如何用 美元以内的 成本建立深度学习检查体

白皮书系列

www.flir.com/mv

--show_flops

--input_layer=input

--input_layer_type=float

--input_layer_shape=1,224,224,3

--output_layer=final_result

结果图形文件现在可以转换为 Movidius™ 支持的格式并上传至 Myriad 2 VPU。

mvNCCompile -s 12 tf_files/optimized_graph.pb -in=input -on=final_result

步骤 6: 在相机输入中运行推断

图形文件上传至 VPU 后,您可随时在 FLIR Blackfly S 相机捕捉的图像上运行推断。 脚

本 (https://flir.box.com/s/v3idtzmruojmtcbzy7xamja7pgbey03z) 要求 Spinnaker API 获取

尺寸调整至匹配网络输入并标准化后的图像。 而后图像将传输至 Movidius VPU,基

于您训练后的神经网络进行分类。

python3 lic2.py --graph graph_filename --labels labels_camera_3classes.txt

结论和展望

现在是开展深度学习的最佳时机。 Intel® Movidius™ Myriad™ 2 VPU 为优势部署高精度

深度学习推断提供了一条简便的途径。 因为 Google 和 Intel® 提供的物美价廉的硬件

和免费工具,使得建立成本在 $1000 之内的基于推断的检查体系成为了可能。

在不久的将来,部署深度学习将更容易,占用空间更小。FLIR 将在今年的 VISION Stuttgart

展会上亮相产业内第一台启用推断的相机。即将推出的 FLIR Firefly® 将在相机上预集成

Myriad™ 2 处理器。您可以部署受训过的神经网络,用于相机推断。欢迎您来 1 号厅

1B42 展位观看我们的演示。