码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何基于香橙派AIpro对视频/图像数据进行预处理


    合集 - AI(86)
    1.CutMix&Mixup详解与代码实战2023-04-272.绘画手残党的福音:涂鸦线稿秒变绝美图像2023-05-053.探讨AIGC的崛起历程,浅析其背后技术发展2023-05-104.创新 = 颠覆?AI创新如何做大蛋糕2023-07-195.实践分析丨AscendCL应用编译&运行案例2023-07-266.Inpaint Anything:一键进行多种图像修补2023-07-277.RT-DETR:可以满足实时性要求的DETR模型2023-07-318.华为云盘古大模型辅助药物设计,西交大的新型抗生素研发之路2023-08-019.解决大模型“开发难”,昇思MindSpore自动并行技术应用实践2023-08-0310.一文详解TextBrewer2023-08-0811.基于Pair-wise和CrossEncoder训练单塔模型2023-08-0912.基于卷积神经网络的MAE自监督方法2023-08-1113.晋级名单公布!“域见杯”复赛今日火热开启2023-08-1614.CutLER:一种用于无监督目标检测和实例分割的方法2023-08-1715.带你读论文丨S&P21 Survivalism: Living-Off-The-Land 经典离地攻击2023-08-1816.使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能2023-08-2117.带你读论文丨Fuzzing漏洞挖掘详细总结 GreyOne2023-08-2218.用案例带你认识决策树,解锁洞察力2023-08-2219.带你读论文丨S&P2019 HOLMES Real-time APT Detection2023-08-2320.中国图数据库,领导者!2023-08-2421. 【干货】华为云图数据库GES技术演进2023-08-2422.带你上手基于Pytorch和Transformers的中文NLP训练框架2023-08-2823.开放同飞,华为云发布盘古大模型全域协同生态2023-08-3124.Ascend C保姆级教程:我的第一份Ascend C代码2023-08-3125.纯干货!一文get昇腾Ascend C编程入门全部知识点2023-09-0126.3天上手Ascend C编程丨带你认识Ascend C基本概念及常用接口2023-09-0527.PanGu-Coder2:从排序中学习,激发大模型潜力2023-09-0628.昇腾实践丨ATC模型转换动态shape问题案例2023-09-0829.3天上手Ascend C编程丨通过Ascend C编程范式实现一个算子实例2023-09-1130.华为云盘古大模型加码生物医药,为行业插上“数字翅膀”2023-09-1431.如何用华为云ModelArts平台玩转Llama22023-09-1532.教你用API插件开发一个AI快速处理图片小助手2023-09-1933.大模型时代,如何快速开发AI应用2023-09-2034.超详细API插件使用教程,教你开发AI垃圾分类机器人2023-09-2035.三步实现BERT模型迁移部署到昇腾2023-09-2136.手敲,Ascend算子开发入门笔记分享2023-10-0937.全域Serverless+AI,华为云加速大模型应用开发2023-10-0938.教你如何基于MindSpore进行ChatGLM微调2023-10-1639.从基础到实践,回顾Elasticsearch 向量检索发展史2023-10-2340.昇腾CANN 7.0 黑科技:大模型训练性能优化之道2023-10-2341.知识图谱与大模型相结合的3种方法,1+1>22023-11-0142.IoT与鸿蒙、低代码、生成式AI,引爆技术浪潮——华为云开发者日南京站成功举办2023-11-0143.带你认识一下多模态对比语言图像预训练CLIP2023-11-0244.昇腾迁移丨4个TensorFlow模型训练案例解读2023-11-0645.MoE:LLM终身学习的可能性2023-11-0746.理论+实践详解最热的LLM应用框架LangChain2023-11-0747.昇腾CANN DVPP硬件加速训练数据预处理,友好解决Host CPU预处理瓶2023-11-0948.昇腾CANN 7.0 黑科技:大模型推理部署技术解密2023-11-1049.从HumanEval到CoderEval: 你的代码生成模型真的work吗?2023-11-1350.告别繁琐,ModelArts一键解决车牌号识别难题2023-11-1651.四载磨砺,一群青年“识瘤者”以AI助力医疗创新2023-11-1752.一种全新的日志异常检测评估框架:LightAD2023-11-2153.学生开发者勇担青年使命,用AI守护少数人的“视界”2023-11-2154.教你如何使用PyTorch解决多分类问题2023-11-2255.三大基础方案和AI出海计划重磅发布!加速盘古大模型生态发展2023-11-2356.带你了解大语言模型的前世今生2023-11-2757.基于AI的架构优化:创新数据集构造法提升Feature envy坏味道检测与重构准确率2023-12-0158.一种全新的日志异常检测评估框架:LightAD2023-12-0459.从HumanEval到CoderEval: 你的代码生成模型真的work吗?2023-12-0460.揭秘华为研发代码大模型是如何实现的2023-12-0561.大语言模型底层架构丨带你认识Transformer2023-12-0662.深入解析LLaMA如何改进Transformer的底层结构2023-12-0763.语言模型:GPT与HuggingFace的应用2023-12-0864.一文掌握Ascend C孪生调试2023-12-1265.大模型那么火,教你一键Modelarts玩转开源LlaMA(羊驼)大模型2023-12-1566.大语言模型训练数据常见的4种处理方法2023-12-1967.听6位专家畅谈AI大模型落地实践:场景和人才是关键01-1168.从工程化角度,详解鹏程·脑海大模型训练过程01-1269.如何使用MindStudio轻松搞定大模型全流程开发01-1970.带你熟悉NLP预训练模型:BERT01-2271.三个方面浅析数据对大语言模型的影响01-2572.4个大语言模型训练中的典型开源数据集02-0173.动手实践丨轻量级目标检测与分割算法开发和部署(RK3568)02-2674.手把手带你快速上手香橙派AIpro03-0175.想做大模型开发前,先来了解一下MoE03-0476.一键Run带你体验扩散模型的魅力03-0877.万字带你了解ChatGLM03-1378.Sora Opera:天图万境联合华为云共筑AI生成式视频音效新高度03-1579.鸿蒙x昇腾云:华为打造智能时代最佳AI基础设施03-1880.从模型到部署,教你如何用Python构建机器学习API服务04-0881.Ascend C 自定义PRelu算子04-0882.Ascend C 自定义算子 Kernel Launch调用入门04-0983.物联网中的预测分析:当IoTDA遇上ModelArts04-0984.基于香橙派AIpro将开源框架模型转换为昇腾模型04-1285.“大模型驱动的软件研发” 华为云助推企业研发智能化升级04-12
    86.如何基于香橙派AIpro对视频/图像数据进行预处理04-19
    收起

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

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

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

    1.jpg

    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功能。这里先通过一张图总览接口调用流程,包括资源初始化&去初始化、通道创建与销毁、解码、缩放、等待任务完成、释放内存资源等。

    2.jpg

    总览接口调用流程后,接下来我们以开发者更熟悉的方式“代码”来展示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

     

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

     

  • 相关阅读:
    【Kubernetes系列】Kubernetes相关概念介绍
    【王道】数据结构与算法之排序算法(十一)
    Oracle Audit Vault部署
    wmware14虚拟机安装麒麟操作系统
    codeWarrior中乘法运算问题记录
    通过私钥连接腾讯云,实现免密远程登录
    Educational Codeforces Round 133 (Rated for Div. 2)A.B
    springboot毕设项目宠物社区网站mud2d(java+VUE+Mybatis+Maven+Mysql)
    怎么把webm转换成mp4?
    windows service项目里关于定时器的用法
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/18145173
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号