Post on 27-Jul-2020
Point Grey 白皮书系列
www.flir.com/mv
如何用 美元以内的
成本建立深度学习检查体
系
内容包括:
• 什么是深度学习推断?
• 选择硬件
• 安装软件
• 创建、 训练和部署花卉分类器
• 下载高质量数据集
• 通过转移学习训练您的模型
• 优化并部署您的模型至 Movidius™ Myriad 2 VPU
• 在相机输入中运行推断
• ......还有更多!
白皮书系列
白皮书系列
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 相
机具有丰富的板载功能,可实现精确触发和图像预处理。
白皮书系列
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
白皮书系列
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 存储库以下载此示例中使用的脚本。
白皮书系列
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 组图像更缺少与“花卉”
的相关性。
根据训练数据的质量和数量不同,可能需要进行预处理。 数据集图像的尺寸会对训
练网络所需的时间和一次性部署的速度产生很大影响。 所有图像的高宽比和尺寸应
当一致。
可选的预处理能提高训练速度和最终模型的准确性。 数据的标准化确保每个图像具
有类似的像素亮度值分布。
白皮书系列
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: 通过转移学习训练您的模型
如需在数据集上训练神经网络,请使用迁移学习。 它使用预训练图像分类器,并重
新训练它以使用基本任务作为起点识别新对象。 这比重新开始训练网络要快得多。
白皮书系列
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 \
白皮书系列
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
白皮书系列
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 展位观看我们的演示。