【CANN训练营第三季】2022年度第三季进阶班之AI目标属性编辑应用-数据预处理

news2024/9/25 8:28:15

了解华为的生态已经两年有余,用CANN做过两个模型的转换,跑过推理测试,但是感觉还是对CANN框架一知半解,恰巧看到2022年度第三季度训练营开班,赶紧报名参与上车。

本次课程是进阶版第一节正式课,主要讲解的是DVPP模块,可以从(1)上【CANN训练营第三季】- AI目标属性编辑应用(上)_哔哩哔哩_bilibili(2)【CANN训练营第三季】- AI目标属性编辑应用(下)_哔哩哔哩_bilibili下观看学习。

从这里可以看到完整版本的课件CANN训练营第三季_AI目标属性编辑应用-昇腾社区 (hiascend.com)

以下是本次课程的学习笔记。学习笔记中图像为视频课程截图,如果想浏览课程大体内容可以继续观看,但是截图清晰度不好,如果有深入学习需求强烈大家建议看原始视频。本次课授课老师是小虎老师。老师从昇腾生态逐步深入到硬件以及软件栈,最后引入DVPP模块,逐步深入。

目录

一、生态介绍

 二、数据预处理模块

三、基本概念及接口

 四、DVPP接口

 五、预处理案例分析


一、生态介绍

本次课程主讲数据预处理,主讲老师逐层深入,首先介绍了华为的全栈系列产品,如下图所示,华为提供不同计算能力的硬件平台,在此基础上提供统一异构计算平台释放硬件能力,可适配华为的MindSpore训练框架以及Pytorch、TensorFlow等其他第三方框架,继续往上走上层是应用使能,华为提供ModelArts一站式云平台,以及基于MindX的深度学习使能、智能边缘使能,优选模型库以及行业SDK,最上层是行业使能,赋能不同的行业应用满足行业需求。

华为提供各种不同算力的服务器,最底层依赖两款芯片,一款是昇腾910,一款是昇腾310,最新发布的还有昇腾310P

下表对华为的硬件做了一个简单的汇总,如有错误请各位指出。

昇腾310处理器是基于达芬奇架构的芯片,每颗芯片集成了2个AI Core负责计算密集型的矩阵运算。CPU子系统集成8个ARM A55,其中4个是AI CPU负责不适合跑在AI Core上的算子承担非矩阵类的复杂运算;4个事控制CPU(Control CPU)负责任务调度。还有一个专门的硬件加速的图像处理单元,也是本次课程的核心。

 

数据预处理的图像处理专用处理单元,如何调用底层资源呢,势必少不了软件的帮助。ACL提供了这个功能。ACL是昇腾平台上开发深度神经网络推理应用的基于C语言的API库,支持Python接口。其基本功能是运算资源的管理以及内存管理,关键的功能是数据预处理、DL推理以及算子加速计算。

 前面介绍了这么多背景知识,接下来到了硬核知识讲解部分。

 二、数据预处理模块

数据预处理一般是指视频图像的编解码、色域转换、图像分辨率转换、归一化等操作。

CANN提供了两种数据预处理的方式,其中AIPP是跑在AI Core上的(也有部分跑在AI CPU上),DVPP是跑在专门的硬件加速的预处理单元上。

下图演示了DVPP和AIPP在开发过程中位置,其中DVPP使用JPEGD模块对图像进行解码(注意输出分辨率有宽高对齐限制的,JPEG后面的D表示Decode解码),然后使用VPC模块进行缩放,最后调用AIPP进行色域转换以及对齐,此时的数据可以输入到网络进行模型推理。

AIPP分为静态AIPP和动态AIPP,静态AIPP中预处理参数都是固定的,写死在config配置文件内,动态AIPP配置文件只限制了输入最大图像的大小,在推理之前设置预处理参数。 

DVPP中首先使用JPEGD、VDEC、PNGD等模块进行解码,然偶转换到VPC模块进行预处理,最后使用JPEGE(JPEG后面的E表示Encode编码)、VENC模块进行编码输出图像。这几个模块对图像分辨率都有要求,开发时尤其注意最大分辨率。

昇腾310芯片上DVPP不支持色域转换,因此色域转换需要使用AIPP进行。

注意JPEG与VPC模块宽高对齐要求不同,昇腾310P上JPEGD对齐要求是64*16,昇腾310上JPEGD的对齐要求是128*16。

三、基本概念及接口

在介绍基本概念之前,先介绍一下什么是Host和Device,后续文档和课程中会频繁的用到这两个概念。Host表示宿主机或者服务器,Device表示昇腾310芯片

使用ACL开发应用程序的时候,一般的操作都是先初始化,然后执行所需的代码,比如预处理以及推理,推理结束拿到数据之后释放ACL申请的内存Release,这里叫去初始化Finalize。这是一套固定的操作模式。 

 

介绍一下Context以及Stream的概念,这个Context必须与用户线程绑定,一个用户线程对应一个Context,一个Context必须运行在唯一的Device上面,一个Device可以运行多个Context。每个Context里面有一系列的Stream,每个Stream具有严格的顺序,多个Stream可以并行执行。

这里必须注意,Context以及Stream推荐显示的创建,后续还可以使用进行异步操作,提升代码的可读性以及可维护性。也就是说创建Context以及Stream的时候必须显示调用CreateContext以及CreateStream接口。 

ACL中的异步操作,有一个同步等待接口,SynchronizeStream接口,等待异步操作执行完毕之后继续执行。 

 数据类型操作接口,也就是说替代了结构体对象的直接赋值,采用接口的形式赋值以及取值,减少兼容性问题。

 四、DVPP接口

这一节讲解的是DVPP模块的相关接口,包括DVPP接口、JPEGD以及VPC、PNGD等接口,小虎老师逐步讲解了接口协议并针对sample里面的演示代码进行了讲解。sample代码可以看这里:cplusplus/level2_simple_inference/0_data_process · Ascend/samples - 码云 - 开源中国 (gitee.com)

这一节最大的感受就是:流程化(严格遵守固定的流程开发)以及限制(图像宽高分辨率限制,以及不同硬件上的使用限制),使用的时候一定要详细阅读接口协议文档说明。简介-图像/视频数据处理-应用开发(C&C++)-推理应用开发-6.0.0.alpha003-CANN社区版-文档首页-昇腾社区 (hiascend.com)

 

 

  

 gitee上samples中提供了丰富的数据预处理样例可以参考。

 在看社区文档的时候,尤其要注意,V1和V2版本差异

 五、预处理案例分析

本节开始以真实案例讲解DVPP的使用操作

 

  

  

 

 

 

 

 最后小虎老师讲解了一个案例,StarGAN来说明整个流程,这个案例在samples里面没有,可以从Model Zoo中搜索并下载ModelZoo-昇腾社区 (hiascend.com),基本都是固定的常规操作,尤其要注意一点:数据排布格式,AIPP输出的数据排布格式是NHWC

  • 模型转换是否开启AIPP功能,执行推理业务时,对输入图片数据的要求:
    • 模型转换时开启AIPP:图像选择XRGB8888_U8或RGB888_U8,使用该种配置转换后的模型,在进行推理业务时,输入图片数据要求为NHWC排布。
    • 模型转换时没有开启AIPP,模型转换完毕,在进行推理业务时,输入图片数据要求为NCHW排布,因此需要用户自行把NHWC排布的原始图片数据转换为NCHW排布。

在华为云上有针对Atlas200、300以及500应用的AIPP样例,使用时可以参考。 

AIPP配置-华为云 (huaweicloud.com)

到此进阶版课程完结,本次课程主要是从DVPP为主线路,讲解华为的生态以及模型适配的全过程,强烈建议大家移步B栈观看视频学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础自学Python要多久才能学会?

零基础自学Python要多久?学习Python开发的周期因人而异,由于基础、学习效率不同有的人学习进度快,需要六个月到一年不等,有的人自律性较差可能需要更久的时间才能学会,今天小编分享下6个月学习周期内的自学Python的学习…

数据结构---计数排序

计数排序计数排序JAVA实现计数排序优化存在的问题1:存在的问题2JAVA实现局限性冒泡排序,还是快速排序,都是基于元素之间的比较来进行排序 有一些特殊的排序并不基于元素比较,如计数排序、桶排序、基数排序。 计数排序&#xff1a…

0. Arthas的基本安装和使用

我们慢慢寻找,直到找到我们的方向。 选择了方向,便一往无前。 我们爱那少年,一如爱我们自己。 Arthas 的简介 Arthas 的官方文档: https://arthas.aliyun.com/doc/ Arthas的官方命令文档: https://arthas.aliyun.com/doc/advanced-use.html …

数据结构-难点代码突破(C++实现图广度优先遍历,深度优先遍历,广度/深度优先遍历生成树和森林,广度优先遍历求单源非带权图两点最短路径)

注意:为了简便起见,这里采用邻接矩阵的方式储存图的边信息 文章目录1.邻接矩阵图的广度优先遍历单源非带权图的两点最短路径2. 邻接矩阵图的深度优先遍历3. 广度/深度优先遍历生成树和森林深度优先生成树与森林广度优先遍历生成树与森林图的遍历是指从图…

Compose回忆童年 - 手拉灯绳-开灯/关灯

一、前言 偶然间想到小时候顺着那白色开关垂下来的灯绳,拉一下“咔哒”一声,再拉一下又是“咔哒”一声。当时年龄小感觉新奇总是把灯开了关又关了开的拉着玩,以至于好几次拉坏了开关灯绳。 今天我们在手机上做一个拉不坏的灯绳&#x1f604…

毕业四年,我当初是如何走上编程这条路的!

感概万千,毕业已达4年之久。 想起在大学时期学习编程的事情,感觉很有意义,在此记录回顾一下。 希望自己初心未变,勇往向前 现状与过去 20210706 目前的我是在天津一家公司做前端开发,主要用Python。 从毕业实习到…

入门:容器工作机制概述

我们先来看看Docker的整体架构: 实际上分为三个部分: Docker 客户端:也就是我们之前使用的docker命令,都是在客户端上执行的,操作会发送到服务端上处理。 Docker 服务端:服务端就是启动容器的主体了&#x…

Java项目:SSM网上超市购物商城管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台,分为普通用户、管理员两种角色。前台普通用户登录,后台管理员登录; 管理员角色包含以下功…

毕业设计 单片机温湿度环境检测仪 - stm32 物联网 嵌入式

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码6 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长…

Dynamic RSA System 设计与实现

一、背景 在实现了静态的加解密工具后,感觉不够灵活,想设计一个动态生成 RSA KeyPair 的中间系统,暂且称为 Dynamic RSA System,以达到自动化维护信安高墙的效果。 加解密和签名校验工具_余衫马的博客-CSDN博客_校验和工具RSA加…

Zero-sho原先的升级版:hourglass网络:U-Net

ZMFF: Zero-shot multi-focus image fusion (ZMFF: Zero-shot 多聚焦图像融合) (本论文的先导片:ZERO-SHOT MULTI-FOCUS IMAGE FUSION) 这是我们之前的扩展工作。在ZMFF,我们做一些改动和改进相比原来的框架。首先&…

数学英语不好,新手学编程难吗?适合学Python吗?

英语不好,上学时考试从来没有超越40分。 数学也不可,很多的东西都还给老师了。 我还能学习编程吗??? 刚开始学习的时分,这个问题深深的困扰着我。以致于我其时报培训班之前犹疑了很长很长时刻。 由于在我…

[C语言数据结构]万字长文带你学习八大排序

📟作者主页:慢热的陕西人 🌴专栏链接:数据结构 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客讲解八大排序,及其优化 文章目录排序Ⅰ插入排序&…

配置SSH Keys到github,实现本地操作远程仓库的权限

文章目录第1步:创建SSH Key第2步:检查是否纯正.ssh目录第3步:复制id_rsa.pub的内容第4步:在你的github页面上配置SSH key第5步:验证是否可连接第1步:创建SSH Key 在用户根目录下,打开命令&…

非零基础自学Golang 第10章 错误处理 10.5 Go语言错误的应用 10.6 小结 10.7 知识拓展

非零基础自学Golang 文章目录非零基础自学Golang第10章 错误处理10.5 Go语言错误的应用10.6 小结10.7 知识拓展10.7.1 error接口的应用第10章 错误处理 10.5 Go语言错误的应用 10.4.2小节中的panic()和recover()虽然能模拟其他语言的异常机制,但是并不建议在Go语言…

广州特耐苏-广州风淋通道构造及特点

风淋通道构造及风淋通道特点-广州特耐苏-广州风淋通道-广州风淋通道规格-广州风淋通道置量-广州风淋通道价格-特耐苏拥有*的数控加工设备,技术力量雄厚,专业生产自动化/风淋室货淋室、 >>采用更适合洁净室原理的圆弧转角; >>系统自动控制运…

密码技术扫盲:非对称加密

个人博客 密码技术扫盲:对称加密🎯 密码技术扫盲:非对称加密密码技术扫盲:认证 在上一篇对称加密的介绍中,我们了解到对明文的加密需要使用到密钥,而解密时也必须用到同一把密钥,也就是说发送…

假如编程是魔法之零基础看得懂的Python入门教程

一、前言 几个月前编写了一份python语言入门的博文,近期重新审阅了一遍发现编写的质量太过随意,可能对于一部分人并不是非常友好,故此重新编写Python语言的零基础教程。 本篇教程将会尽量把一些专业术语给读者讲解清楚,并且让读者…

如何成为一个优秀的Python工程师?

众所周知,Python因其优雅而简洁的语言优势而备受程序员的青睐和追捧。随着人工智能、大数据技术的落地,Python工程师也成为了目前薪资待遇高,发展前景好的热门岗位。虽然,Python入门简单,对初学者友好,但是…

52 如何 尽可能的减少 自定义ClassLoader 造成的影响

前言 // 呵呵 很快又该总结 2022 了, 希望这一年也能总结出很多收获 接着 java.lang.Class/java.lang.ClassLoader/InstanceKlass/ClassloaderData 的卸载 可以先看一下 这一篇文章, 明确一下 上下文 这里 主要说的是 如果我们的场景中存在自定义的 classloader 的情况…