写点什么

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:231966

评论

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

JNPF低代码平台详解 -- 系统架构

树上有只程序猿

低代码 应用开发 JNPF

低代码不适合做哪些应用?

代码生成器研究

spring核心功能与他们的实现总结

想要飞的猪

springboot是如何解决这些问题的?

想要飞的猪

ZK的数据结构以及协议

想要飞的猪

企业数字化转型,如何战略性的使用数据和 IT ?

飞算JavaAI开发助手

Logii 指纹浏览器中如何设置代理

Geek_bf375d

爬虫 https IP 代理IP 代理IP设置

如何为 Windows 8.1 设置代理

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

348字节实现精简版吃豆人小游戏

南城FE

JavaScript 前端 游戏

关于低代码的常见误解

代码生成器研究

国内开源的低代码框架有哪些?

代码生成器研究

微服务常用的组件与相关问题

想要飞的猪

spring中的设计模式

想要飞的猪

技术人的 2023 总结|火山引擎开发者社区联合 InfoQ 写作社区第四届有奖征文获奖公布!

InfoQ写作社区官方

云原生 音视频 火山引擎 热门活动 #大模型

全面预算管理平台:让企业管理智慧升级

智达方通

智慧管理 全面预算管理

mysql的索引以及优化时的注意项

想要飞的猪

为什么美国程序员工作比中国程序员工作轻松、加班少?

代码生成器研究

IT服务外包的优点有哪些?

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

2023年度盘点:10款好用的AI图片生成工具推荐!总有一款是你的菜。

彭宏豪95

人工智能 设计 在线白板 AIGC AI绘画

kafka的核心组件以及特点

想要飞的猪

当我遇见腾讯混元大模型|社区征文

法医

大模型

IT外包助力企业数字化转型案例分享

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

彻底搞懂Redis事务机制

程序员花卷

缓存 分布式数据库 后端 事务 redis 精讲

如何在没有 Root 权限的 Android 上设置IP代理

Geek_bf375d

爬虫 https 代理IP 代理IP设置 跨境电商

SDK对比测评|如何科学做直播产品技术选型?

音视频开发_AIZ

音视频 技术选型 直播推流 音视频技术 测评对比

谁说低代码做不了复杂的企业应用?

代码生成器研究

springMVC是如何处理请求的与Spring容器有何关系?

想要飞的猪

如何在VMMask指纹浏览器中设置代理

Geek_bf375d

爬虫 https IP 跨境电商 TikTok

redis高可用的方案都有哪些?

想要飞的猪

低代码开发平台真的靠谱吗?

代码生成器研究

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