AI辅助的实时视频处理

当涉及实时视频处理时,数据管道的处理变得更加复杂。我们正在努力将流视频的延迟降到最低。

本文是基于我们在构建实时视频处理产品方面的研究和专业知识,以及创建用于应用机器学习和深度学习模型的管道而编写的。

当涉及实时视频处理时,数据管道的处理变得更加复杂。而且我们正在努力将流式视频中的延迟降到最低。另一方面,我们还必须确保所实现模型的足够准确性。

总体而言,根据dailyesports.gg的统计数据,自去年以来,直播行业的观看小时数增长了99%。因此,这将完全改变粉丝的体验,游戏,远程医疗等。此外,Grand View Research报告称,到2027年,视频流市场的价值将达到1842.7亿美元。

AI驱动的实时视频处理用例

训练有素的模型能够检测某些对象,并不是一件容易的事。但是,对于幼儿园的孩子来说,安全是重中之重。这些模型可能有助于防止例如孩子逃跑或滑倒。或者,例如,也有关于逃亡的动物将离开农场,动物园或保护区的边界。

存储和处理面部图像以进行识别和认证的组织有时需要实施安全性解决方案,以确保隐私并满足GDPR数据保护要求。例如,在制造工厂和大型购物中心中通过YouTube,CCTV,私人频道或安全摄像机流媒体会议,会议等时,面部表情模糊。

基于AI的缺陷检测视觉检查的另一个领域已经在逐渐成为完全机器人化的制造工厂中实现。因此,计算机视觉使区分制造商的缺陷变得更加容易。借助视觉检查技术,深度学习方法的集成可以区分零件,异常和特征,从而在运行计算机系统时模仿人类的视觉检查。

如何加快实时视频处理? 

我们正在解决的一个技术问题是,在实时流式传输时,快速,准确地模糊视频对象的脸部,并且不会因使用人工智能而造成质量损失。

简而言之,视频处理可以概括为一系列后续过程:解码,计算和编码。尽管此串行过程的标准(例如速度,准确性和灵活性)可能会使第一个腮红撇脂的难易程度变得复杂。因此,最终分辨率在输入,输出和配置方面应该是灵活的。

为了使处理速度更快,可以通过以下几种方法将精度保持在合理的水平:1)并行执行某项操作;2)加快算法。

基本上,有两种方法可以并行执行这些过程:文件拆分和管道体系结构。

第一个是文件拆分,是使算法并行运行,因此可能有可能继续使用速度较慢但准确的模型。当视频被分割成多个部分并进行并行处理时,将实现该功能。以这种方式,拆分是一种虚拟文件生成,而不是真正的子文件生成。但是,此过程不太适合实时处理,因为可能很难在时间轴上将其暂停,恢复甚至移动到其他位置。

管道方法

第二种方法是管道体系结构,它要付出一定的努力来加速算法本身或算法的各个部分,而又不会显着降低准确性。流水线方法旨在拆分和并行化处理过程中执行的操作,而不是拆分视频。由于此过程,流水线方法更加灵活。

为什么管道方法更灵活?管道的好处之一是由于需求而易于操作组件。解码可以使用视频文件将帧编码为另一个文件来进行。

或者,输入可以是来自IP摄像机的RTSP流。输出可以是浏览器或移动应用程序中的WebRTC连接。有一个统一的体系结构,该体系结构基于视频流的所有输入和输出格式组合。计算过程不一定是整体操作。管道方法的灵活性

如何实施管道方法

作为项目之一,我们必须使用AI算法实时处理视频。

流水线由解码,面部检测,面部模糊和编码阶段组成。在这种情况下,系统的灵活性至关重要,因为不仅要处理视频文件,还要处理不同格式的视频直播。根据配置,它在30-60的范围内显示出良好的FPS。

跟踪插补

我们使用基于质心的跟踪算法,因为它更易于应用。但是,在需要时–可以使用其他算法,例如Deep SORT。但是,如果视频中的面孔过多,它们确实会影响速度。这就是为什么应该额外使用插值的原因。

插值帧的质量是多少?由于我们需要跳过某些帧,因此我们想知道插值帧的质量。因此,计算F1度量标准并确保不会因为插值而出现过多的误报和误报。对于大多数视频示例,F1值约为0.95。

共享记忆

此过程的下一个阶段是共享内存。通常,通过队列发送数据非常慢,因此在Python的各个进程之间执行数据确实是执行此过程的最佳方法。

PyTorch版本的多处理程序能够将张量句柄传递通过队列,以便另一个进程可以仅获取指向现有GPU内存的指针。因此,使用了另一种方法:基于POSIX API的共享内存的系统级进程间通信(IPC)机制。借助Python库(提供了使用此内存的接口),极大地提高了进程间通信的速度。

多工或多处理

最后,需要为管道组件添加多个工作程序,以减少处理所需的时间。这是在面部检测阶段应用的,也可以在不需要有序输入的所有繁重操作中完成。问题是,它实际上取决于在管道内部完成的操作。在这种情况下,人脸检测相对较快,并且在添加更多检测人员之后,FPS可能会降低。

管理一个以上流程所需的时间可能比我们添加该流程所花费的时间更长。除非为每个网络创建单独的流,否则在多个工作进程中使用的神经网络将在串行CUDA流中计算张量。

由于多个并发者的并发性,他们不能保证输入序列的顺序是相同的。因此,例如,在编码时,需要付出额外的努力来固定流水线阶段中的顺序。尽管如此,跳帧可能会导致相同的问题。

因此,只要我们有2名工作人员使用MobileNetv2主干运行模型,检测时间几乎减少了两倍。

管道架构

如何开发基于AI的实时视频处理系统

将AI应用于实时视频流有多复杂?对于基本方案,实施过程包括几个阶段:

  • 调整预训练的神经网络(或经过训练的)以能够执行所需的任务。
  • 设置云基础架构以启用视频处理并可以扩展到特定点。
  • 构建一个软件层以打包过程并实现用户方案(移动应用程序,Web和管理面板等)。

要创建这样的产品,使用预训练的NN和一些简单的应用程序层需要3-4个月来构建MVP。但是,细节至关重要,每种产品的范围和时间表都是独特的。

我们强烈建议客户从概念验证开始,探索主要和/或最复杂的流程。花几周时间探索最佳方法并获得成果,通常可以确保进一步的开发流程,并为客户和工程团队带来信心。

原创文章,作者:冰封一夏,如若转载,请注明出处:http://www.nncjzx.com/1262.html

关注本站公众号获取更多实时内容

本站微信公众号:二线码农