打开微信,使用扫一扫进入页面后,点击右上角菜单,
点击“发送给朋友”或“分享到朋友圈”完成分享
SDK 应用开发系列课程已更新,以下为简介及课后练习答案:
一、《寒武纪 CNCV 使用介绍》
简介:介绍 CNCV 的功能特点及使用场景、通用基础概念、编程模型和常见应用场景的编程示例等。
链接:寒武纪 CNCV 使用介绍 – 寒武纪开发者社区 (cambricon.com)
课后习题:
Q1、简述 CNCV 的主要功能和特点。
Q2、CNCV 支持多 batch planar 图像的算子接口输入/输出图像数据是如何摆放的?
Q3、回顾 CNCV 编程模型,给出单算子调用的流程。
答案:
A1、CNCV 是⼀个基于 MLU 的图像、视觉算法加速库。主要功能特点:提供多种应用场景下的常用图像算子;支持业界标准的图像概念如图像格式、颜色空间等;结合 MLU 硬件架构特点,对算子进行了高度优化;提供 C 风格接口,端云一体的接口和编程模型。
A2、采用⼆级 MLU 数据指针形式,实质为 MLU 指针数组。多 batch 的 planar 图像依次按照每个 batch 的 plane 数据指针摆放。以n batch 的 NV12 为例:|img_0_y|img_0_uv|img_1_y|img_1_uv|...|img_n_y|img_n_uv|
A3、编程模型要点:主机端进行设备资源的申请、管理与释放,设备端负责执行 CNCV 算子的计算任务。单算子调用流程:
i. 初始化设备信息、创建任务队列;创建并初始化 CNCV 句柄
ii.
a) 、准备调用 CNCV 算子接口所需参数:包括 workspace 内存、输入输出图像内存、MLU数据指针数组等,并分别做将 CPU 上的图像数据、MLU数据指针数组拷贝至 MLU 上;
b) 、连续调用 CNCV 算子接口
c) 、同步任务队列获取计算后的结果
iii. 释放 CPU/MLU 内存、销毁 CNCV 句柄、销毁任务队列
二、《寒武纪 CNCodec-V3 使用介绍》
简介:讲解 Cambricon CNCodec-V3 视频编解码的过程,并通过简单示例展示视频编解码流程。
链接:寒武纪 CNCodec-V3 使用介绍 – 寒武纪开发者社区 (cambricon.com)
课后习题
Q1、简单描述 Cambricon CNCodec-V3 视频解码的流程。
Q2、简述异步编码和同步编码的区别。
答案
A1、
step 1,设计解码事件的回调函数cncodecCallback_t;
step 2,调用cncodecDecCreate接口创建一个异步模式的解码器实例;
step 3,调用cncodecDecSetParams接口配置解码器参数。对于视频解码,也可以先不调用该接口,在cncodecCallback_t回调函数处理CNCODEC_EVENT_SEQUENCE事件时根据解析得到的参数再调用cncodecDecSetParams接口来配置解码器参数
step 4,调用cncodecDecSendStream接口逐块发送数据给解码器解码
step 5,在cncodecCallback_t回调函数中处理CNCODEC_EVENT_NEW_ 事件,获取解码后的数据
step 6,解码最后一帧结束后,需先调用cncodecDecSetEos接口通知解码器实例,CNCodec输出所有数据后通过给cncodecCallback_t回调函数传递CNCODEC_EVENT_EOS事件,通知应用程序解码结束
step 7,解码结束后调用cncodecDecDestroy接口销毁解码器实例
A2、
异步解码的数据发送和解码是相互独立的,同步解码中解码需要等一帧数据发送完成后开始,并在该帧视频数据解码结束后发送下一帧数据。
三、《寒武纪 CNStream 使用介绍》
简介:第一讲:CNStream 概述、框架、内置模块和工具;第二讲:示例介绍、二次开发与实验操作。
链接:寒武纪 CNStream – 寒武纪开发者社区 (cambricon.com)
课后习题
1.CNStream的设计理念是什么?
2.Pipeline的主要功能是什么?
3.CN Info保存的信息有哪些?
4.CN Info可以被两个并行模块处理吗,如何做到同步信息?
5.parallelism参数是什么含义?
6.当输入 4 路视频时,当模块的 parallelism为 2 时,数据如何分配?
7.哪个模块可以作为起始模块?
8.如何动态的添加和移除输入流?
9.推理模块由哪几个部分组成?
10.平均性能和实时性能分别代表什么含义?
答案
1. 基于模块和流水线的思想。
2. 搭建 Pipeline;模块管理与调度执行;模块间数据传递;
3.CNData 原图;CNInferObjs推理结果;stream_id;timestamp等。也可在 collection中保存自定义信息。
4. 可以,CN Info以智能指针的形式在模块间流动。不同模块共享一份 CN Info。
当两个模块汇聚时,只有两个模块都处理完后,才会向下游模块传递 CN Info。
5.模块并行度,Pipeline会为每个模块启动 parallelism 数目的线程,执行 TaskLoop,即调用模块的 Process函数。
6.
•stream_0 -> TaskLoop0
•stream_1 -> TaskLoop1
•stream_2 -> TaskLoop0
•stream_3 -> TaskLoop1
7. DataSource
8. 在 PipelineStart的情况下,通过 AddSource和 RemoveSource接口动态添加移除输入流。
9. 前处理,推理和后处理。三者并行。但对于1份数据来说,依次进行前处理,推理和后处理。
10. 平均性能代表从进程启动开始到当前时刻的平均性能。 实时性能代表最近一段时间的实时性能,更能体现当前的性能。
热门帖子
精华帖子