计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决
Any problem in computer science can be solved by anther layer of indirection.
1. 背景
在AI落地应用的重要关口,机器人在成本控制、批量生产、AI功能应用等方面面临着诸多挑战。如何在降低机器人成本的同时,满足其工业生产和生活中的性能需求?如何平衡机器人现有成本和性能,是每个机器人AI从业者都需要仔细思考的问题。
Intel针对AI实际应用场景,推出了Intel® OpenVINO Toolkit开源工具包。Intel® OpenVINO Toolkit是基于卷积神经网络(CNN)提供的一整套深度学习推断和神经网络优化的工具链和方法集,并提供了接口统一的跨Intel硬件及其加速器的异构计算框架,将DL算力水平发挥到最大,获得了业界认可。
ROS(机器人操作系统)是最流行的开源机器人软件框架,为机器人(特别是移动机器人)提供了一整套接口统一、分布式、功能齐全的全栈软硬件解决方案,拥有健全的生态系统和高度活跃的贡献者社区。
因此,搭载intel硬件的机器人使用ROS+OpenVINO是一个很好的选择。
然而,在实际开发过程中,开发人员需要面对以下问题:
-
在ROS机器人上部署OpenVINO并实现对应的AI功能,首先需要有接口上的支持:代码如何调用OpenVINO的底层接口?如何将AI视觉相关功能封装成ROS所能实现的接口?
-
智能机器人需要处理的数据是多种多样的。以AI视觉为例,机器人可能要处理视频、图片、多种图像传感器(RGB摄像头、深度相机)数据。由于机器人数据采集的多样性,如何将所有的相关数据统一整合成机器人需要的结构化输入数据,并将整合后的数据导入给 OpenVINO Toolkit 来进行底层处理?
-
针对不同的业务场景,进行AI推理的硬件也有可能不同。能否只在软件层面上进行极少量的修改,即可快速切换机器人AI推理的硬件,使开发和验证更具有效率?
-
OpenVINO可以选定使用同步/异步推理。针对于不同的机器人业务场景,能否选用不同的策略模式,拓展 OpenVINO 使用过程中标准化、流水(批量)化处理的实现?
-
对于用户而言,总是希望能够自主开发和扩展,针对自身产品进行功能定制。那么如何给用户提供标准的软件实现接口和归纳,让机器人开发人员能对产品功能快速迭代和更新?
-
之前工程中编写好的代码和新版本OpenVINO的接口API不兼容,进行代码更新和维护需要花费很多精力和时间。如何针对新版本的OpenVINO进行快速二次开发?
…
正如《程序员的自我修养——链接、装载和库》一书中所提到,计算机系统软件体系结构采用一种层的结构,计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决(Any problem in computer science can be solved by anther layer of indirection.)
对于大批量的开发而言,OpenVINO的接口依赖会非常多,工程需要不断的理解、修改、扩展和维护,需要花费大量的时间和精力。因此机器人开发人员期望将ROS和OpenVINO以及普通的深度学习框架进行隔离,在软件层次上进行提炼,使其更专注于机器人感知和控制决策开发。
因此,ros_openvino_toolkit
应运而生,为上述问题提供解决方案。
2. ros_openvino_toolkit应用流程:
ros_openvino_toolkit会遵循OpenVINO的基本操作模式:通过第三方的方法,训练出一个模型(train a model),然后基于 OpenVINO 的模型优化器,可将模型转化成 OpenVINO 可识别的IR格式。随后基于OpenVINO推理引擎(Inference Engine)来做出目标识别,这个流程是标准的OpenVINO流程。
从流程图中橙色部分可以看出, ros_openvino_toolkit作为OpenVINO到其他ROS应用的一个中间环节,需要起到了很好的抽象和隔离作用。
3. ros_openvino_toolkit功能简介与优势分析
-
ros_openvino_toolkit
实现了OpenVINO Toolkit与ROS之间的功能封装并实现接口。
ros_openvino_toolkit
对 OpenVINO 进行技术上的隔离、封装,完成对ROS环境的接口支持,提供对应接口。
-
支持多种数据输入方式,例如普通USB摄像头、Intel Realsense深度摄像头、ROS Image topic、图片或视频文件等等。
-
支持多种常见的视觉推断功能,例如人脸识别(表情、年龄、性别、头部朝向等等)、物体识别、基于交通场景的车辆、行人和道路识别以及物体分割等等功能。
-
推断结果的多种结构化输出,包括ROS Topic,OpenCV的image window,Rviz 机器人视觉呈现工具等等。
-
硬件加速与软件优化:ros_openvino_toolkit
继承自 OpenVINO ,实现了硬件加速功能和软件编程思路上的优化。
-
灵活的推理流水线管理及用户扩展:可以在工程中选择流水线的同/异步运行机制,针对于不同的机器人业务场景,可以选择不同的应对策略。
-
模块化设计,即插即用 :ROS 本身即是一个基于模块化的设计。ros_openvino_toolkit
把 OpenVINO 做成一个模块化的设计,提高功能模块的内聚度并降低耦合度,使开发更加简单和高效,更有利于其推广使用,也体现出其扩展方面的灵活性。
-
基于配置文件的流水线化模块管理,用户只需要修改yaml配置文件,即可对整个pipeline的运行机制进行重新定义,这样可以轻松响应多变的场景、部署需求。
4. ROS + OpenVINO 的应用场景
对于常见深度学习应用场景而言来说,最标准和常见的输入数据来自于摄像头(RGB,3D点云等),从摄像头输入的数据经过ros_openvino_toolkit的pipeline机制,传递给深度学习推理硬件(比如CPU、GPU、FPGA、NCS2等)。得到的推理结果再经过 ros_openvino_toolkit的封装成ROS topic、ROS Service、Rviz、Image Window等输出,推理结果可以被广泛运用于机器人、机械臂、无人机、自动驾驶等应用场景…
参考资料
- 6月20日直播回放 | OpenVINO + ROS 加速机器人应用 - 英特尔物联网技术大咖在线分享: https://www.bilibili.com/video/BV1iv411B7Lg
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)