想在边缘运行计算机视觉程序?先来迎接挑战!
作者 | 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云计算翻译,转载请注明出处
更多阅读推荐
你可能也会掉进这个简单的 String 的坑
亿级大表分库分表实战总结(万字干货,实战复盘)
赠书 | 华为数据底座的整体架构与建设策略
Python画出心目中的自己
超200家上市企业布局!从千余条备案信息看区块链产业
想在边缘运行计算机视觉程序?先来迎接挑战!相关推荐
- 想要在Mac 上运行 Windows 程序 不需要虚拟机也可以
很多在Mac OS X系统上使用虚拟机运行Windows程序的用户表示: 太慢了,太痛苦了 出现这一问题的主要原因是: 虚拟机在安装完成后占用空间较大 导致Mac磁盘空间被占用 软件运行极为卡顿. 而 ...
- 在PC端应用中运行小程序 没你想得那么难
互联网时代下,小程序逐渐打通所有应用场景,打破移动端和PC端的边界,解决了频繁在桌面设备和移动设备间跳转带来的「割裂感」,使用户在办公.学习.娱乐时带来极大便利.在未来,小程序将成为万物互联的连接器, ...
- 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...
第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...
- 设置PATH 环境变量、pyw格式、命令行运行python程序与多重剪贴板
pyw格式简介: 与py类似,我认为他们俩卫衣的不同就是前者运行时候不显示终端窗口,后者显示 命令行运行python程序: 在我学习python的过程中我通常使用IDLE来运行程序,这一步骤太过繁琐( ...
- linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数
文章目录 1.显示执行脚本花费的时间 2.在脚本退出时杀死后台运行的程序 3.在脚本退出时跳出循环 4.读取命令行参数来决定循环次数 1.显示执行脚本花费的时间 网址:bash - How to ge ...
- python编程在哪里写程序-教你如何编写、保存与运行Python程序的方法
第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...
- python输入完怎么运行-教你如何编写、保存与运行Python程序的方法
第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...
- python代码写完怎么运行-教你如何编写、保存与运行 Python 程序
第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...
- python运行软件-Python中四种运行其他程序的方式
在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...
最新文章
- 各类木材强度_层状磷酸锆/ 聚磷酸铵复合阻燃剂对木材的阻燃抑烟性能研究
- 打包镜像并同时压缩多个镜像
- OpenCV学习笔记之掩码操作
- HDU 2512 一卡通大冒险
- 如何选择LoRa产品
- 轻松搭建基于Serverless的Go应用(Gin、Beego 举例)
- Java8使用Stream的缺点是调试困难?教你一招你就不会这么认为了
- PIE SDK地图书签
- EverWeb for Mac(网页设计软件)
- 如何搭建前端开发环境
- FBI教你破解身体语言
- CSDN博客调整图片大小
- C语言快速互转HEX(16进制)和原始字符串/数组
- 【网络知识】3. 千兆网传输速度125MB/s、百兆网12.5MB/s,码率、比特率、带宽、文件大小M就是MB
- scrapy ,Selenium 企查查模拟登录
- tf神经网络模型预测泰坦尼克号生还
- Python自动打码,DdddOcr通用验证码自动识别库
- 李笑来:“我们不要过度乐观”
- 网络游戏排行榜计算机,十大pc游戏排行榜 英雄联盟位居第一,第三游戏体验感很强...
- 车辆派遣管理系统第一周档案管理驾驶员信息管理
热门文章
- docker安装elasticsearch_Elasticsearch amp; Kibana 部署安装 (Docker)
- while的用法java_java中的while循环和do while循环
- 卡扇区数据教程_分享一款硬盘分区和数据恢复软件
- Prime算法生成迷宫
- jq如何获取选中option的值_【分享】如何获取变量token的值
- python100以内自然数之和_python教程:利用while求100内的整数和
- 教育部:到2021年建设1万个左右国家级一流本科专业点
- 战胜柯洁战胜不了高中生?DeepMind挑战高中数学题,完败
- 这套网红试卷火了!数学老师您应该是文案出身吧?
- java中钩子方法 addShutdownHook 学习使用