寒武纪CNStream介绍

CNStream简介

  CNStream是面向MLU设备的流处理SDK,可以大大简化MLU提供的推理能力和其他处理(如视频解码)的集成。CNStream在兼顾灵活性的同时,可以充分发挥MLU的硬件解码和机器学习算法运算的性能。CNStream提供了一套插件系统,用户可以根据CNStream提供的API实现自己的组件,通过组件之间的互连灵活地实现自己的需求。

CNStream 基于模块化和流水线的思想,提供了一套基于 C++ 语言的接口来支持流处理多路并发的Pipeline 框架。为用户提供可自定义的模块机制以及通过高度抽象的 DataFrame 类型进行模块间的数据传输,满足用户对性能和可伸缩性的需求。CNStream 支持在 MLU270 和 MLU220 M.2 平台上使用。

 

CNStream特点

CNStream 构建了一整套寒武纪硬件平台上的实时数据流分析框架。框架具有多个基于寒武纪思元处理器的硬件加速模块,可将深层神经网络和其他复杂处理任务带入流处理管道。开发者只需专注于构建核心深度学习网络和 IP(Intellectual Property),并用寒武纪特定模型转换器生成寒武纪平台能执行的模型,无需再从头开始设计端到端的解决方案。

CNStream 具有以下几个特点:
• 简单易用的模块化设计。内置模块及正在扩充的模块库可以让用户快速构建自己的业务应用,无需关心实现细节。
• 高效的流水线设计。区别于 Gstreamer 等框架庞大的结构及传统的视频处理流水线结构, CNStream设计了一套伸缩灵活的流水线框架。每一个模块的并行度及队列深度可以根据时延要求及数据吞吐量而定制。根据业务需求,通过配置 JSON 文件就可以很方便地进行调整。
• 丰富的原生模块。为提高推理效率,根据寒武纪神经网络推理芯片设计特点,内置了从数据源解码、前后处理及推理、追踪等模块。其中推理模块、前后处理模块、编解码模块和追踪模块充分利用了寒武纪芯片设计特点和内部 IP 核心间 DMA 的能力, 使用后极大的提高了系统整体吞吐效率。
• 支持分布式架构,内置 Kafka 消息模块,帮助客户快速接入分布式系统。

  • 支持常见分类以及常规目标检测神经网络,比如: YOLO、 SSD、 ResNet、 VGG 等。高效支持低位宽(INT8) 和稀疏权值运算。
    图形化界面方式生成 pipeline。整个框架支持图形化拖拽方式生成 pipeline,帮助用户快速体验寒武纪数据流分析框架。
    灵活布署。使用标准 C++ 11 开发,可以将一份代码根据设备能力,在云端和边缘侧集成。



针对常规视频结构化分析(IVA)领域,使用 CNStream 开发应用可以带来如下便捷:
数据流处理能力。具有少冗余、高效率的特点。
由于 TensorFlow、 Caffe 等深度学习框架,强调框架算子的完整性及快速验证深度学习模型的能力,在生产系统中无法利用硬件性能达到最高效率。然而, CNStream 内置 CNInfer 模块直接基于寒武纪运行时库(CNRT)设计,能够高效利用底层硬件能力,快速完成组件的开发。
内置 Tracker 模块提供了经过寒武纪芯片加速优化后的 KCF 算法,使多路并行比运行在 CPU 上的Deepsort 效率更好。
良好的本地化支持团队、持续的迭代开发能力以及内建开发者社区提供了快速的客户响应服务。

 

CNStream 应用框架

使用 CNStream SDK 开发一个应用的典型框架如下图:

                                                          典型视频结构化场景架构图

核心框架

CNStream SDK 基于管道(Pipeline)和事件总线(EventBus)实现了模块式数据处理流程。Pipeline 类似一个流水线,把复杂问题的解决方案分解成一个个处理阶段,然后依次处理。一个处理阶段的结果是下一个处理阶段的输入。 Pipeline 模式的类模型由三部分组成:


• Pipeline:代表执行流。
• Module:代表执行流中的一个阶段。
• Context:是 Module 执行时的上下文信息。


EventBus 模式主要用来处理事件,包括三个部分:
• 事件源(Event Source):将消息发布到事件总线上。
• 事件监听器(Observer/Listener):监听器订阅事件。
• 事件总线(EventBus):事件发布到总线上时被监听器接收。


Pipeline 和 EventBus 模式实现了 CNStream 框架。相关组成以及在 CNStream SDK 实现中对应关系如下:
• Pipeline:对应 cnstream::Pipeline 类。
• Module:Pipeline 的每个处理阶段是一个组件,对应 cnstream::Module 类。每一个具体的 module都是 cnstream::Module 的派生类。
• FrameInfo:Pipeline 模式的 Context,对应 cnstream::CNFrameInfo 类。
• Event‑bus 和 Event:分别对应 cnstream::EventBus 类和 cnstream::Event 类。

CNStream 既支持构造线性模式的 pipeline,也支持搭建非线性形状的 pipeline,例如 split、 join 模式,如下所示:


内置模块

针对常规的视频结构化领域, CNStream 提供了以下核心功能模块:
• 数据源处理模块:依赖于 CNCodec SDK(MLU 视频解码 SDK),用于视频 demux 和视频解码。支持多种协议的解封装及对多种格式的视频压缩格式进行解码。视频压缩格式和图片硬解码支持详情,请参考“Cambricon‑CNCodec‑Developer‑Guide”文档手册。
• 神经网络推理模块:依赖于寒武纪实时运行库(CNRT),支持多种神经网络离线模型对图像数据进行神经网络推理。CNStream 的模块式设计,为用户提供了在视频流解码和推理之后的进一步数据加工和处理。
• 追踪模块:使用针对寒武纪平台优化的 FeatureMatch 和 KCF 算法,在保证精度的前提下减少 CPU 使用率,提高了模块性能。
除以上核心模块外, CNStream 还提供了自定义示例模块: OSD 模块、编码模块、多媒体显示模块和帧率统计模块等。
• OSD(On‑Screen Display)模块:支持内容叠加和高亮物件处理。
• 编码模块:支持在 CPU 上编码。
• 多媒体显示模块:支持屏幕上显示视频。

编程模型

CNStream 作为寒武纪视频结构化分析特定领域的框架,在整个寒武纪应用软件栈中起着承上启下的作用。 CNStream 能快速构建自己的视频分析应用,并获得比较高的执行效率。用户无需花费精力在一些底层的细节上,从而有更多时间关注业务的发展。下图展示了 CNStream 在软件栈中的位置关系。

                             寒武纪软件栈框图

参考文档

       1.CNStream官方开源地址:https://github.com/Cambricon/CNStream

       2.《Cambricon-CNStream-User-Guide-CN.pdf》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论