如何基于香橙派AIpro对视频/图像数据进行预处理

这篇具有很好参考价值的文章主要介绍了如何基于香橙派AIpro对视频/图像数据进行预处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文分享自华为云社区《如何基于香橙派AIpro对视频/图像数据进行预处理》,作者: 昇腾CANN。

受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域,这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不一致时,我们需要对其进行数据预处理。

昇腾AI硬件内置专门用于图像预处理的硬件单元,开发者通过其上层软件栈CANN能够更加便捷地发挥出硬件强大的媒体处理硬加速能力。香橙派AIpro开发板是香橙派联合昇腾打造的高性能AI开发板,开发者可以基于此,对不满足神经网络模型输入要求的数据进行预处理,从而更好地完成AI推理计算。

01 昇腾CANN数据预处理方式简介

昇腾CANN提供了两种专门用于数据预处理的方式:AIPP和DVPP。

AIPP(Artificial Intelligence Pre-Processing)在AI Core上完成数据预处理,主要功能包括改变图像尺寸(抠图、填充等)、色域转换(转换图像格式)、减均值/乘系数(改变图像像素)等。AIPP区分为静态AIPP和动态AIPP,您只能选择其中一种方式,不支持两种方式同时配置。
  • 静态AIPP:模型转换时设置AIPP模式为静态,同时设置AIPP参数,模型生成后,AIPP参数值被保存在离线模型(*.om)中,每次模型推理过程采用固定的AIPP预处理参数,无法修改。
  • 动态AIPP:模型转换时仅设置AIPP模式为动态,每次模型推理前,根据需求,在执行模型前设置动态AIPP参数值,然后在模型执行时可使用不同的AIPP参数。
DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括缩放、抠图、色域转换、图片编解码、视频编解码等。

总结一下,虽然都是数据预处理,但AIPP与DVPP的功能范围不同(比如DVPP可以做图像编解码、视频编解码,AIPP可以做归一化配置),处理数据的计算单元也不同,AIPP用的AI Core计算加速单元,DVPP就是用的专门的图像处理单元。

AIPP、DVPP可以分开独立使用,也可以组合使用。组合使用场景下,一般先使用DVPP对图片/视频进行解码、抠图、缩放等基本处理,再使用AIPP进行色域转换、归一化等处理。

02 如何使用AIPP功能

下文以此为例:测试图片分辨率为250*250、图片格式为YUV420SP,模型对图片的要求为分辨率224*224、图片格式为RGB,因此需要通过AIPP实现抠图、图片格式转换2个功能。关于各种格式转换,其色域转换系数都有模板,可从ATC工具使用指南中获取,请参见“昇腾文档中心”。

1、静态AIPP

(1)构造AIPP配置文件*.cfg。

  • 抠图,有效数据区域从左上角(0, 0)像素开始,抠图宽*高为224*224。
  • 图片格式转换,输入图片格式为YUV420SP_U8,输出图片格式通过色域转换系数控制。
aipp_op {
       aipp_mode : static                   # AIPP配置模式
       input_format : YUV420SP_U8           # 输入给AIPP的原始图片格式
       src_image_size_w : 250               # 输入给AIPP的原始图片宽高
       src_image_size_h : 250
       crop: true                           # 抠图开关,用于改变图片尺寸
       load_start_pos_h: 0                  # 抠图起始位置水平、垂直方向坐标
       load_start_pos_w: 0
       crop_size_w: 224                     # 抠图宽、高
       crop_size_h: 224
       csc_switch : true                    # 色域转换开关
       matrix_r0c0 : 256                    # 色域转换系数
       matrix_r0c1 : 0
       matrix_r0c2 : 359
       matrix_r1c0 : 256
       matrix_r1c1 : -88
       matrix_r1c2 : -183
       matrix_r2c0 : 256
       matrix_r2c1 : 454
       matrix_r2c2 : 0
       input_bias_0 : 0
       input_bias_1 : 128
       input_bias_2 : 128
}

(2)使能静态AIPP参数

使用ATC工具转换模型时,可将AIPP配置文件通过insert_op_conf参数传入,将其配置参数保存在模型文件中。

atc --framework=3 --soc_version=${soc_version} --model= $HOME/module/resnet50_tensorflow.pb --insert_op_conf=$HOME/module/insert_op.cfg --output=$HOME/module/out/tf_resnet50

参数解释如下:

  • --framework:原始网络模型框架类型,3表示TensorFlow框架。
  • --soc_version:指定模型转换时昇腾AI处理器的版本,可执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy。
  • --model:原始网络模型文件路径,含文件名。
  • --insert_op_conf:AIPP预处理配置文件路径,含文件名。
  • --output:转换后的*.om模型文件路径,含文件名,转换成功后,模型文件名自动以.om后缀结尾。

(3)调用AscendCL接口加载模型,执行推理,具体可参见如何基于香橙派AIpro开发AI推理应用。

2、动态AIPP

(1)构造AIPP配置文件*.cfg。

aipp_op
{
aipp_mode: dynamic
max_src_image_size: 752640  # 输入图像最大内存大小,需根据实际情况调整
}

(2)使能动态AIPP。

使用ATC工具转换模型时,可将AIPP配置文件通过insert_op_conf参数传入,将其配置参数保存在模型文件中。

atc --framework=3 --soc_version=${soc_version} --model= $HOME/module/resnet50_tensorflow.pb --insert_op_conf=$HOME/module/insert_op.cfg --output=$HOME/module/out/tf_resnet50

参数解释如下:

  • --framework:原始网络模型框架类型,3表示TensorFlow框架。
  • --soc_version:指定模型转换时昇腾AI处理器的版本。
  • --model:原始网络模型文件路径,含文件名。
  • --insert_op_conf:AIPP预处理配置文件路径,含文件名。
  • --output:转换后的*.om模型文件路径,含文件名,转换成功后,模型文件名自动以.om后缀结尾。

(3)调用AscendCL接口加载模型,设置AIPP参数后,再执行推理,具体可参见如何基于香橙派AIpro开发AI推理应用。

调用AscendCL接口设置AIPP参数的代码示例如下:

aclmdlAIPP *aippDynamicSet = aclmdlCreateAIPP(batchNumber);
aclmdlSetAIPPSrcImageSize(aippDynamicSet, 250, 250);
aclmdlSetAIPPInputFormat(aippDynamicSet, ACL_YUV420SP_U8);
aclmdlSetAIPPCscParams(aippDynamicSet, 1, 256, 0, 359, 256, -88, -183, 256, 454, 0, 0, 0, 0, 0, 128, 128);
aclmdlSetAIPPCropParams(aippDynamicSet, 1, 2, 2, 224, 224, 0);
aclmdlSetInputAIPP(modelId, input, index, aippDynamicSet);    
aclmdlDestroyAIPP(aippDynamicSet);

03 如何使用DVPP功能

昇腾AI处理器内置图像处理单元DVPP,提供了强大的媒体处理硬加速能力。同时,异构计算架构CANN提供了使用图像处理硬件算力的入口:AscendCL接口,开发者可通过接口来进行图像处理,以便利用昇腾AI处理器的算力。

DVPP内的功能模块如下表所示。

功能模块

描述

VPC(Vision Preprocessing Core)

处理YUV、RGB等格式的图片,包括缩放、抠图、色域转换、直方图统计等。

JPEGD(JPEG Decoder)

JPEG压缩格式-->YUV格式的图片解码。

JPEGE(JPEG Encoder)

YUV格式-->JPEG压缩格式的图片编码。

VDEC(Video Decoder)

H264/H265格式-->YUV/RGB格式的视频码流解码。

VENC(Video Encoder)

YUV420SP格式-->H264/H265格式的视频码流编码。

PNGD(PNG decoder)

PNG格式-->RGB格式的图片解码。

此处就以JPEGD图片解码+VPC图片缩放为例来说明如何使用DVPP功能。这里先通过一张图总览接口调用流程,包括资源初始化&去初始化、通道创建与销毁、解码、缩放、等待任务完成、释放内存资源等。

总览接口调用流程后,接下来我们以开发者更熟悉的方式“代码”来展示JPEGD图片解码+VPC图片缩放功能的关键代码逻辑。

// 创建通道
acldvppChannelDesc dvppChannelDesc = acldvppCreateChannelDesc();
acldvppCreateChannel(dvppChannelDesc);

// 在JPEGD图片解码前,准备其输入、输出
// …… 
// 创建解码输出图片描述信息,设置输出图片的宽、高、图片格式、内存地址等
acldvppPicDesc decodeOutputDesc = acldvppCreatePicDesc();
acldvppSetPicDescData(decodeOutputDesc, decodeOutputBuffer));
acldvppSetPicDescWidth(decodeOutputDesc, decodeOutputWidth);
acldvppSetPicDescHeight(decodeOutputDesc, decodeOutputHeight);
// 此处省略其它set接口……

// 执行JPEGD图片解码
acldvppJpegDecodeAsync(dvppChannelDesc, decodeInputBuffer, decodeInputBufferSize, decodeOutputDesc, stream);

// 5. 在VPC图片缩放前,准备其输入、输出
// 创建缩放输入图片的描述信息,并设置各属性值,解码的输出作为缩放的输入
acldvppPicDesc resizeInputDesc = acldvppCreatePicDesc();
acldvppSetPicDescData(resizeInputDesc, decodeOutputBuffer);
acldvppSetPicDescWidth(resizeInputDesc, resizeInputWidth);
acldvppSetPicDescHeight(resizeInputDesc, resizeInputHeight);
// 此处省略其它set接口……

// 创建缩放输出图片的描述信息,并设置各属性值
acldvppPicDesc resizeOutputDesc = acldvppCreatePicDesc();
acldvppSetPicDescData(resizeOutputDesc, resizeOutputBuffer);
acldvppSetPicDescWidth(resizeOutputDesc, resizeOutputWidth);
acldvppSetPicDescHeight(resizeOutputDesc, resizeOutputHeight);
// 此处省略其它set接口……

// 6. 执行VPC图片缩放
acldvppVpcResizeAsync(dvppChannelDesc, resizeInputDesc,
                     resizeOutputDesc, resizeConfig, stream);

// 7. JPEGD图片解码、VPC图片缩放都是异步任务,需调用以下接口阻塞程序运行,直到指定Stream中的所有任务都完成
aclrtSynchronizeStream(stream);

04 更多学习资源

更多学习资源,欢迎登录昇腾社区查阅:

[1]昇腾文档中心:https://www.hiascend.com/zh/document

[2]香橙派AIpro开源样例代码:https://gitee.com/ascend/EdgeAndRobotics

[3]香橙派AIpro学习资源一站式导航:https://www.hiascend.com/forum/thread-0285140173361311056-1-1.html

 文章来源地址https://www.toymoban.com/news/detail-855167.html

点击关注,第一时间了解华为云新鲜技术~

 

到了这里,关于如何基于香橙派AIpro对视频/图像数据进行预处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【无标题】基于视频图像进行血氧饱和度的测量

    主要的算法原理 通过视频预处理提取计算血氧饱和度所需的脉搏波信号。读取第一帧图像,检测并提取人脸区域后,根据人脸几何关系确定敏感区域。在视频的每一帧中获取敏感区域,然后在RGB三个通道分别 对人脸区域做灰度均值,并将灰度均值存储。在对每一帧做完灰度

    2023年04月08日
    浏览(33)
  • 深度学习中基于python的预处理和图像扩增方法

    容易出现的报错: 错误原因通常为保存的路径不正确: 应改为: 即第一个参数应该写到文件的名称,而不能只写到文件夹就停止。 灰度图片和黑白图片有些相似,但并不完全相同。 灰度图片是指每个像素点的颜色由灰度值来表示,通常使用8位无符号整数(0-255)表示。灰

    2024年02月08日
    浏览(45)
  • 【Computer Vision】图像数据预处理详解

    活动地址:[CSDN21天学习挑战赛](https://marketing.csdn.net/p/bdabfb52c5d56532133df2adc1a728fd) 作者简介 :在校大学生一枚,华为云享专家,阿里云星级博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程

    2024年02月06日
    浏览(51)
  • 比赛准备笔记 --- TensotFlow、软件调试、数据预处理(图像,csv数据)

    TensorFlow是由Google团队开发的一个开源深度学习框架,完全基于Python语言设计。它的初衷是以最简单的方式实现机器学习和深度学习的概念,结合了计算代数的优化技术,使计算许多数学表达式变得简单。 优势: 强大的计算能力,支持多种硬件和分布式计算 灵活的数据流模型

    2024年02月06日
    浏览(55)
  • Python数据分析与应用 |第4章 使用pandas进行数据预处理 (实训)

    编号 性别 高血压 是否结婚 工作类型 居住类型 体重指数 吸烟史 中风 9046 男 否 是 私人 城市 36.6 以前吸烟 是 51676 女 否 是 私营企业 农村 N/A 从不吸烟 是 31112 男 否 是 私人 农村 32.5 从不吸烟 是 60182 女 否 是 私人 城市 34.4 抽烟 是 1665 女 是 是 私营企业 农村 24 从不吸烟 是

    2024年04月23日
    浏览(46)
  • 【知识---如何进行图像数据的归一化呢(normalize)】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在做基于图像的目标检测遇到了图像的归一化操作,为此展开了一定的探讨: 图像归一化是指对图像进行了一系列标准的处理变换,使之变换为一固定标准形式的过程,该标准图像称作归一化图像。 这

    2024年01月19日
    浏览(53)
  • C3D行为识别(一):UCF101视频数据集预处理

    基于视频的行为识别常见的数据库有UCF101、HMDB-51、Something-Something V2、AVA v2.2、Kinetic-700等。其中UCF101的标记方式是针对一段视频做一个类别的标记,AVA v2.2的标记共包含五个部分,video_id(视频名称)、middle_Frame_timestam(关键帧位置)、person_box(视频中人物的边界框)、acti

    2023年04月24日
    浏览(55)
  • 机器学习笔记 - 基于自定义数据集 + 3D CNN进行视频分类

            这里主要介绍了基于自定义动作识别数据集训练用于视频分类的 3D 卷积神经网络 (CNN) 。3D CNN 使用三维滤波器来执行卷积。内核能够在三个方向上滑动,而在 2D CNN 中它可以在二维上滑动。         这里的模型主要基于D. Tran 等人2017年的论文“动作识别的时空卷积研

    2024年01月23日
    浏览(49)
  • 利用Python进行数据清洗与预处理:Pandas的高级用法【第147篇—Pandas的高级用法】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和机器学习领域,数据清洗和预处理是至关重要的步骤。Pandas库作为Python中最受欢迎的数据处理工具之一,提供了强大的功能来处

    2024年04月09日
    浏览(107)
  • 使用Elasticsearch进行图像和视频处理

    图像和视频处理是计算机视觉领域中的重要应用,它们涉及到大量的数据处理和存储。Elasticsearch是一个分布式搜索和分析引擎,它可以帮助我们更高效地处理和存储图像和视频数据。在本文中,我们将讨论如何使用Elasticsearch进行图像和视频处理,包括背景介绍、核心概念与

    2024年02月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包