CANN媒体数据处理
1.为什么我们要学习CANN的媒体数据处理
当然是速度快呀
媒体数据处理在不同的应用里面有不同的含义,今天我们说的媒体数据处理主要是指开发AI应用,为模型制造合适的数据,和模型推理完后后处理的一系列操作,一般包括图片的解码,编码,缩放,裁剪,视频的解码编码等等操作。
但是对深度学习了解一点的朋友可能都知道我们一般会用opencv等加速数据的处理,既然有解决办法了,再学习一种新的,有点多余吧?
NO,NO,No
我们都了解GPU可以加速神经网络模型的训练和推理,但是CPU也行啊,但是你了解他们之间的速度差异吗?二者效率相差可能达到几十倍甚至是上百倍,并不是CPU太逊了,也不是GPU太强了,这两种都是计算机的硬件都有着不同的特点.
CPU的可以形象的理解为有25%的ALU(运算单元)、有25%的Control(控制单元)、50%的Cache(缓存单元)
GPU可以形象的理解为90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)
二者天然就有非常大的差异,然而各种数据处理运算都要有ALU完成,但是CPU为了完成一系列复杂的控制功能,运算单元的数量相比于GPU其实很少,所以面对高密度的计算任务时GPU就有天然的优势。这就是硬件优势。
然而我们的主角昇腾AI处理器是NPU,是一种相比于GPU更加适合AI运算的硬件,通过NPU的加速又可以实现数量级的效率提升。因此数据处理的操作在NPU上进行专门的加速,就可以达到数倍提升效率的成果。当需要处理的数据比较多的时候,优势就会进一步体现。
2.在专门的芯片上进行媒体数据处理这么厉害,我要怎么学习呢
别急一步一步来 
1.第一招,摸清敌情
2.第二招,逐个击破
在计算机视觉领域我们处理的主要是图片和视频,因此我们先学习一下JPEG图片的编码和解码
-
先来个视频了解一下吧 老谭电音放送ACL数据预处理链接
-
然后再来个实验,操作一下,开开眼,过过瘾.[实验链接](昇腾CANN系列课程-AscendCL特性之图像和视频编解码(C++)-昇腾社区 (hiascend.com))
该体验的,观看的都已经完成了,下面该写代码了,诶嘿嘿…代码来喽!!
写代码最重要的就是讲究一个清楚流程,那么流程图它来喽
首先就是创建数据处理的通道,你可以把它理解为一个专为处理媒体数据的生产线,在这个生产线上会对媒体数据(图片,视频)进行加工
//1.创建和销毁图片数据处理的通道。
dvppChannelDesc_ = acldvppCreateChannelDesc();
aclError ret = acldvppCreateChannel(dvppChannelDesc_);
acldvppDestroyChannel(dvppChannelDesc_);
然后要为生产线准备原材料,也就是图片或者视频的源数据(把数据加载到显存里面)
//调用aclrtGetRunMode接口获取软件栈的运行模式,如果调用aclrtGetRunMode接口获取软件栈的运行模式为ACL_HOST,则需要通过aclrtMemcpy接口将输入图片数据传输到Device,数据传输完成后,需及时释放内存;否则直接申请并使用Device的内存
aclrtRunMode runMode;
ret = aclrtGetRunMode(&runMode);
if(runMode == ACL_HOST){
//申请Host内存inputHostBuff,并将