查看原文
其他

想在边缘运行计算机视觉程序?先来迎接挑战!

alwaysAI CSDN云计算 2020-12-18

作者 | alwaysAI
翻译 | 火火酱~,责编 | 晋兆雨
出品 | CSDN云计算
头图 | 付费下载于视觉中国

 

人工智能可以让计算机聪明地行动,并且在真实环境中快速做出决策,同时收获相对理想的效果。

当然,这个概括性的定义较为宽泛和模糊,而且涉及多个领域,计算机视觉便是其中的典型例子。在计算机视觉领域中,计算机可以像人类一样处理图像,并对图像内容进行推断,之后计算机程序便可以利用这些信息做出最有利的决策。

如今,将计算机视觉等人工智能应用程序集成到新的商业模式和产品中的情况越来越常见。计算机视觉在现实世界中的应用十分广泛:分析交通模式、检测行为变化、统计地区的人数,等等。

无论是构建哪种计算机视觉应用,其学习过程都要经历一段十分陡峭的学习曲线,而且将其部署到边缘则需要更为复杂的操作。

虽然近年来在云中部署和运行应用程序变得愈加流行,但这并不总是最好的解决方案——特别是对于需要大量处理或使用敏感数据的应用程序来说,而这两种情况在计算机视觉应用程序中非常常见。

在这种情况下,最好的选择往往是将应用程序部署到边缘中。在边缘中部署计算机视觉应用程序的好处非常多,我们将在下文中详细介绍。同时,我们也将讨论在边缘中运行计算机视觉时要面临的挑战,以及如何克服它们。


“边缘”是什么


一般来说,边缘设备都是小型、轻量级的设备,可以在其上部署和运行计算机视觉应用程序。如今,许多边缘设备甚至具有图形处理单元(Graphical Processing Unit,GPU)或视觉处理单元(Visual Processing Unit,VPU),这使其能适用于更多的模型和更复杂的应用程序。

本文中的边缘设备是指Raspberry Pi、Jetson Nano 或NVIDIA Jetson Xavier NX等NVIDIA Jetson 设备或各种物联网(Internet of Things,IoT)设备,这些边缘设备具有一定的感知或评估能力,且能实现与使用环境间的交互。


在边缘运行计算机视觉的好处


在边缘运行计算机视觉应用程序有三大好处:时间、安全和成本。

1. 减少延迟

虽然可以使用互联网连接来部署应用程序,但一旦应用在边缘设备上部署完成后,云端链接就无用武之地了。这意味着,应用程序可以在边缘设备上(而不是云端)完成所有推断,进而大大减少了应用程序将推断转化为操作所花费的时间。这一优势对于某些用例而言是必不可少的,如自动驾驶汽车或安全摄像头。在云端接收和发送数据可能会存在数据丢失的风险,此外,云端所需的额外时间可能意味着无法及时响应任务,这对于自动驾驶等任务来说,或许会带来灾难性的后果。

此外,一些特殊的外围设备(例如摄像头)本身没有互联网连接,边缘设备借助它们来提高性能或扩展应用程序功能。此类设备对边缘处理概念的应用更加出神入化:它们不是通过USB将图像数据传输到边缘设备进行处理,而是将处理器集成到摄像机本身,进一步减少处理延迟。

2. 提升安全性

其次,有了边缘部署,便不再需要将数据传输到云端,所有数据都可以留在设备本身的封闭电路中。边缘计算将暴露风险分散到多个设备上,并且可以在不连接中央服务器的情况下完成所有处理——这种架构更为安全和私密。例如,安装在家里的边缘设备可以处理实时数据,且不需要依赖可能损害人们日常活动隐私的共享云服务。由于计算机视觉数据可能会涉及私人或其他敏感数据,因此使用边缘计算会更加安全。

3. 降低成本

最后,由于不需要云处理,在边缘部署CV应用程序的成本要低得多,毕竟云计算公司会对每分钟每个端点的所有推断进行收费。对于那些想要“按需付费”的机构来说,这是或许是一个很好的、灵活的选择,但对于需要进行大量实时处理的机构来说,就成了一种负担——比如需要24小时运行摄像头和传感器的智能城市、医院或仓库。


在边缘运行计算机视觉所面临的挑战


构建计算机视觉应用程序有其自身需要克服的挑战,而且这往往是一个反复迭代的过程,因此,用于构建计算机视觉应用程序的所有管道都必须足够灵活,以应对用于承载应用程序部署的模型、库、或设备可能会出现的变化。

下面,我们将通过一个故事来了解在边缘部署计算机视觉应用程序要面临的的挑战。首先,我们可以通过以下两种方式来建立计算机视觉模型:1)在网上搜索符合需要的开源模型;2)建立一个图像数据集并训练自己的模型。在第二个方法中,我们需要收集自己的数据集,单这一项的工作量就已经非常大了,同时,我们还需要对图像标注工具和训练本身有一定的了解。

接下来,我们要开始构建应用程序了。假设,我们已经有了一个工作模型,要构建计算机视觉应用程序的原型。目前常用的计算机视觉库是OpenCV。

大家可以使用OpenCV的c++或Python应用程序编程接口(api)。例如,可以通过pip install opencv-python轻松访问Python OpenCV API。

我们花了一些时间来学习这个API,并且获得了一个可以很好地与模型输出集成的程序原型。

现在,我们在完成了应用程序后,要它部署到一个边缘设备上,比如Raspberry Pi。首先,我们会发现我们使用的OpenCV构建与Raspberry Pi处理器不兼容。其他依赖项也可能存在相同的问题。这样一来,我们就需要在Raspberry Pi上编译OpenCV。

然后,要需要弄清楚如何查看结果!借助cv2.imshow(),我们可以在自己的笔记本电脑上轻松实现这一点,但如果使用的是无头设备(没有图形接口)的话,则需要寻找另一种方法。

OK,现在我们的应用程序已经可以启动并运行了,你会发现,曾经在笔记本电脑上看到的惊人的快速性能早已不复存在。当然,没有人会指望一台35美元的单板电脑的性能可以超过Macbook,但我们依然想要更好的性能。

我们了解到可以使用因特尔的Neural Compute Stick 2来提高Pi的性能,但是现在还需要构建OpenVINO。由于OpenVINO的接口与OpenCV不同,所以需要决定是要重写应用程序以利用NCS2,还是要重建OpenCV以使其能够运行OpenVINO推理引擎。当所有这些都完成后,我们可能会发现模型需要做更多的调整,输出可能会发生变化,我们也可能会不断循环执行以上这些步骤!


如何克服这些挑战


要想克服这些挑战,除了需要计算机视觉知识外,还需要具备一定的物联网经验。然而,这些问题也可以通过像alwaysAI这样的开发者平台来解决。在alwaysAI,其唯一使命就是尽可能简化构建和部署计算机视觉应用程序到边缘设备的过程,包括训练模型,构建应用,并部署应用到边缘设备,如Raspberry Pi、Jetson Nano等等。

有了alwaysAI,你只需要知道一些基本的命令,剩下的都可以交给我们的命令行界面(CLI):收集数据,标注数据,训练一个模型,并部署和启动你的应用程序。

  • 获取计算机视觉模型

alwaysAI有一个公开可用的模型目录,与所有用我们的管道构建的应用程序都可以协同工作。你也可以使用alwaysAI模型训练工具包来训练自己的对象检测模型。该工具包以TensorFlow作为后端框架,并在mobilnet_ssd上进行迁移学习,它是在COCO数据集上训练的。

该模型训练工具包可以协助用户在无需学习新的API或手动安装任何额外模块的情况下开始使用TensorFlow。工具包中还包含了计算机视觉注释工具(Computer Vision Annotation Tool,CVAT),因此用户可以直接标注新的数据集,而不需要从头开始下载并安装CVAT。

  • 开发自己的应用程序

我们有自己的Python API,名为edgeiq,它具备一些OpenCV的核心功能,可以与之进行交互。这表示,大家只需要知道一个API,就可以启动并运行计算机视觉应用程序。

因为我们自己喜欢使用OpenCV,所以我们将其内置为边缘运行环境的核心部分,这样一来,大家可以将“import cv2”添加到所有alwaysAI应用程序中,并且直接在自己的应用程序中使用OpenCV,无论你选择的部署设备是什么。

  • 部署自己的应用程序

我们通过Docker镜像和Python虚拟环境进行容器化操作。因此,无论使用何种设备,都可以轻松部署应用程序。同时,我们可以使用Dockerfile或requirements.txt文件,轻松添加应用程序可能出现的任何必要需求。

在边缘运行计算机视觉既可以节省时间和成本,又可以提供更高的安全性。尽管开发和部署任何计算机视觉应用程序都要面临其自身的挑战,但在边缘部署时尤其如此。

原文链接:https://hackernoon.com/the-challenges-of-running-computer-vision-on-the-edge-9h3t3wpx

本文由CSDN云计算翻译,转载请注明出处


更多阅读推荐

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存