写点什么

Redis 另一技术栈——RedisEdge

  • 2019-10-24
  • 本文字数:2034 字

    阅读完需:约 7 分钟

Redis 另一技术栈——RedisEdge


上面的剪辑是一个仪表盘记录,演示了 Redis 中的实时视频分析。在过去的几个月里,我们在 Redis 实验室做了几个激动人心的报告,包括 RedisGears(动态执行框架),RedisAI(用于深度学习模型执行)和 RedisTimeSeries(时间序列数据库)。这些都是基于 Redis v5 版本和新的 Redis Streams 数据结构,共同组成了我们称之为的 RedisEdge 框架,用于物联网(IoT)边缘的专用多模型数据库。


RedisEdge 背后的理念是,它要使得在物联网边缘开发,部署和运行复杂的数据处理任务变得简单,尽可能接近实际的事物本身。任何类型的传感器都可以将其数据上传给数据库,它不仅可以存储,还可以处理它们以供进一步消费或转储。我们从概念验证开始,以确保我们既有确切的数字来支持这个承诺,又有一个很好的用户界面来可视化这一切。


任何证明都需要一个用例,我们就以在实时视频流中计算人数的应用为例。为了对视频帧中的物体(比如人物)进行检测,我们使用了一种名为 YOLO(“你只被看一次”)的现代机器学习模型。该目标检测系统因其相对较好的性能和准确性而闻名,所以我们剩下要做的就“只是”将它连接到 RedisEdge(更多关于这个主题请参考:“RedisAI: Thor’s Stormbreaker for Deep Learning Deployment”)。


下图描述了该系统的组装结果:


RedisEdge 用例步骤

  1. 该系统的驱动程序是视频捕获进程(左上角),它从摄像机或文件中获取输入视频流,并提取其组成帧。捕获进程将标准 redis-py 客户端连接到 RedisEdge 服务器,并通过调用“XADD”将每个捕获的帧作为新消息附加到 Redis Stream。此消息由帧的编号(用于调试)和原始编码用 JPEG 字节表示的帧组成。

  2. 向 Redis Stream 添加消息会触发 RedisGears 脚本的执行。该脚本实现了一系列操作,概念上由以下三个主要部分组成:下采样输入流的帧速率,在帧上运行模型以及存储检测各种指标。

  3. 第一部分,下采样,通过 Python 中实现的限流机制来维护性能。最理想的情况是,我们希望尽快处理所有帧,以便提供准确、及时的结果。但是,即使处理单个帧也需要时间,当帧输入速率高于处理速率时,就会出现处理积压并最终爆发。因此,为了避免在辉煌的火焰中发生爆炸,我们通过丢弃一些输入帧来,牺牲完整性并对输入帧速率进行下采样,只留下一部分帧要处理。测量的处理帧速率动态地确定这些样本应该有多大。

  4. 在脚本的第二部分中,下采样过滤器未丢弃的帧通过 YOLO 模型运行。在此之前,需要从 JPEG 格式解码帧,调整大小并进行标准化。所有这些任务再次通过使用传统的 Python 代码和通常用于数字阵列(numpy),图像(pillow)和计算机视觉(opencv)的标准库来实现。然后将处理后的帧转换为 RedisAI 张量。RedisGears 对 RedisAI 的所有调用使用直接 API 来实现最佳性能,而不是通过 Redis 的密钥空间进行通信,并且直接发送到 TensorFlow YOLO 模型。执行模型,然后返回包含来自帧的对象检测的回复张量。然后使用 RedisAI PyTorch 脚本进一步处理模型的回复,该脚本对检测到的边界框执行交叉和非最大值抑制。然后,按标签过滤这些框以排除所有非人检测并将其坐标转换回框架的原始尺寸。

  5. 系统的最后部分将模型的处理输出存储在另一个 Redis Stream 中。输出 Redis Stream 中的消息包括对原始输入流中帧的 ID 的引用,检测到的人数以及各自边界框的列表。通过读取输入和输出 Redis Streams,视频服务器可以渲染由输入帧和在其中检测到的人组成的图像。除了填充输出流之外,系统还存储计数的人数,以及作为 RedisTimeSeries 数据的各种性能度量(例如,帧速率和不同步骤的执行时间)。这提供了一种简单的方法来将管道输出具体化并集成到任何第三方报告/仪表盘/监控应用程序或服务,例如本例中的 Grafana。

  6. 基本上就是这样 - 数据进入,被处理,存储并且有时被回送 - 就像许多其他系统一样。

是什么让 RedisEdge 如此特别?

我是 Redis 的极客。对我来说,Redis 是我生活的另一重要部分,就像我的家庭一样。


当人们问我为什么 Redis 很特别时,我总是说:“因为它快速而有趣。”RedisEdge 很快,因为,它是 Redis,你可以依靠它来获得不错的性能。相信我:将所有数据存储在内存中的专用数据结构中是性能的最佳选择。


当然,硬件在性能方面也起着重要作用。这在执行深度学习模型时更是如此。YOLO 虽然现代和高性能但是仍然需要一个不错的 GPU 来跟上 HD60fps 视频流而不丢帧。另一方面,一个不错的 RedisEdge CPU 可以处理标准的 30fps 网络摄像头,丢弃率不超过 5%。因此,如果有合适的硬件和输入,它可以很快,非常快。


RedisEdge 很有趣吗?当然!请试着向上滚动并查看漂亮的方框和图形。这是最原始的形式,真正核心的部分是它的完全可重复和可修改。因为一切都是通过基本脚本实现的,所以我可以通过很少的更改来计算蝙蝠。或者更实用的东西,比如汽车。或者我可以用移动网络取代 YOLO——一种识别动物的不同模型——虽然它已经完成。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/dKuldlHuH2gk1L_AAnGw0A


2019-10-24 10:232294

评论

发布
暂无评论
发现更多内容

maven pom 中有用的两个配置

JefferLiu

一个 go-sql-driver 的离奇 bug

SOFAStack

IoTDB 可实现的基本操作 : 数据导入、基本查询、聚合查询 | 小白教程文档(三)

Apache IoTDB

国产时序数据库

WorkPlus移动办公平台,助力企业随时随地“指尖办公”

BeeWorks

【提升团队运营效率】交易履约之订单中心实践

京东科技开发者

平台搭建 平台赋能 数智创新 效能提升 企业号 1 月 PK 榜

利用 IoTDB 替换 Druid.io 服务太极股份电厂、军工制造类项目,采集精度达纳秒级

Apache IoTDB

时序数据库 国产数据库

技术型创业公司如何把握发展与管理的节奏感?

石云升

极客时间 1月月更 技术领导力实战笔记

Cloud Kernel SIG月度动态:建立社区第三方驱动研发流程、发布ANCK 4.19-027版本 | 龙蜥 SIG

OpenAnolis小助手

内核 龙蜥社区 sig 版本发布 anck

玖章算术CEO叶正盛:程序员必须掌握的数据库原理

NineData

数据库 程序员 开发 dba 数据库技术

Sealer 0.9 :帮助集群和分布式应用实现 Build、 Share、Run

阿里巴巴云原生

阿里云 开源 云原生 sealer

Kyligence 成功签约阿斯利康,助力提升商业洞察质量和决策效率

Kyligence

数据分析 指标中台

MySQL性能优化浅析及线上案例

京东科技开发者

MySQL 性能优化 索引性能 数据库· 企业号 1 月 PK 榜

企业内部沟通,即时通讯软件要怎么选?

BeeWorks

TDengine 时序数据特色查询语法详解,助力时序场景下的应用开发

TDengine

数据库 tdengine 时序数据库

阿里云云边一体容器架构创新论文被云计算顶会 ACM SoCC 录用

阿里巴巴云原生

阿里云 容器 云原生

如何利用极狐GitLab 轻松管理NPM依赖发布与更新?

极狐GitLab

node.js DevOps npm 依赖 极狐GitLab

IoTDB 可实现的基本操作 —— 数据写入、删除、导出、元数据管理、时区设置 | 小白教程文档(四)

Apache IoTDB

时序数据库 国产数据库

特定领域知识图谱(DKG)融合方案:技术知识前置【一】-文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评KG生产质量保障

汀丶人工智能

自然语言处理 知识图谱 实体对齐

理想问鼎销冠,数据库能帮助新能源车企赢得下半场么?

YMatrix 超融合数据库

案例分享 新能源汽车 造车新势力 超融合数据库 YMatrix

适配 Laravel 多版本的开源项目版本号规划

ModStart

北邮一号卫星搭载 IoTDB 成功发射!高效轻量数据管理,助力航天观测分析

Apache IoTDB

数据库 时序数据库 国产数据库

被面试官问住了,MySQL两阶段提交是什么鬼?

程序员拾山

MySQL 面试

服务网格领域的百花齐放,是否存在一个更优解?

API7.ai 技术团队

Service Mesh 服务网格 APISIX

安卓影像飞升时刻:vivo X90 Pro+打通HDR任督二脉

脑极体

Vivo 蔡司影像

小场景解决大问题|明道云在京东方的落地实践

明道云

Databend v0.9.0 版本发布

Databend

一次偶然机会发现的MySQL“负优化”

骑牛上青山

MySQL 数据库 索引

致 Tapdata 开源贡献者:聊聊 2022 年的进展和新一年的共建计划

tapdata

CuPL 利用大规模的语言模型,更高效地生成提示

Zilliz

OpenHarmony如何切换横竖屏?

OpenHarmony开发者

OpenHarmony

Redis 另一技术栈——RedisEdge_文化 & 方法_中间件小哥_InfoQ精选文章