CANN训练:模型推理时数据预处理方法及归一化参数计算

cann,训练,模型,推理,数据,预处理,方法,归一化,参数,计算 · 浏览次数 : 115

小编点评

**摘要** 本文介绍了在基于Ascend CL模型推理时三种预处理方法的比较,并以Resnet50的pytorch模型为例,结合训练营提供的sample,说明了分别是如何实现预处理的。 **方法一:在昇腾官方的modelzoo去查** * 在模型zoo去查,选择用于训练的模型PyTorch目录在搜索框中,输入Resnet50,找到对应的模型文件然后在modelarts / train_start.py里查到的处理代码。 **方法二:到pytorch官网去查** * 在pytorch官网去查,搜索“torchvision.models.resnet50”。 **数据预处理的方式确定好了输入图片需要做哪些预处理,接下来就需要选择合适的实现方式。 **Ascend CL常用的有三种预处理方法:** * OpenCV * AIPP * DVPP

正文

摘要:在做基于Ascend CL模型推理时,通常使用的有OpenCV、AIPP、DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合训练营提供的sample,说明了分别是如何实现预处理的。

本文分享自华为云社区《【2023 · CANN训练营第一季】——模型推理时数据预处理方法及归一化参数计算》,作者: dayao。

前言:

对待推理图片执行模型推理前,需要对图片进行预处理,以满足模型的输入要求。我们可以通过阅读模型训练代码,查看预处理的方法。在做基于Ascend CL模型推理时,通常使用的有OpenCV、AIPP、DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合训练营提供的sample,说明了分别是如何实现预处理的。本文还介绍了AIPP做减均值/乘系数的参数是如何计算的。

一、查找模型训练时的预处理方式

这一步对我这样的新手有些难度,在训练营可以直接问授课老师,或者是无所不晓的老班(帅高),亦或是无所不能的小助手

以Resnet50的pytorch模型为例,这里模型需要的数据预处理方法,再讲述两种查找方法。

Resnet50模型,需要对待推理图片的数据预处理是:缩放到224*224;以RGB的顺序存放;对像素/255.0,变换到[0.0,1.0]范围内;再按三个通道,分别做减均值,乘系数的运算,三个通道的均值是[0.485, 0.456, 0.406],对应系数分别是:[0.229, 0.224, 0.225]。

1、方法一:在昇腾官方的modelzoo去查。https://gitee.com/ascend/modelzoo

然后选择用于训练的模型PyTorch目录

在搜索框中,输入Resnet50,找到对应的模型文件

然后在modelarts / train_start.py里查到的处理代码如下:

2、方法二:到pytorch官网去查

https://pytorch.org/vision/stable/models/generated/torchvision.models.resnet50.html#torchvision.models.resnet50

二、数据预处理的方式

确定好了输入图片需要做哪些预处理,接下来就需要选择合适的实现方式。Ascend CL常用的有三种:Opencv、AIPP、DVPP。这三种方式的特点如下表所示:

本次训练营,勤劳的小虎老师贴心的给大家准备了三种方式,供大家学习和掌握。代码在:https://gitee.com/ascend/samples/tree/master/inference/modelInference。分别是:纯open CV;CV+AIPP;DVPP+AIPP。如下表所示:

1、CV方式:sampleResnetQuickStart

2、cv+AIPP方式:sampleResnetAIPP.cpp​

3、DVPP+AIPP方式:sampleResnetDVPP

三、减均值/乘系数 用AIPP实现的计算

Pytorch官方的计算方法:

1、将图像数据调整到[0.0, 1.0]之间,相当于(/255.0)——torchvision.transforms.ToTensor

2、将数据x = (x - mean(x))/std(x)——torchvision.transforms.Normalize

用数学公式表达:

pixel_out_chx(i)=[pixel_in_chx(i)/255 - mean_i]/std_i

=[pixel_in_ch(i) - mean_i*255]/(255*std_i) (公式一)

注:pixel_out_chx(i):计算输出值;

pixel_in_chx(i):原始像素值,取值范围[0, 255];

mean_i:均值,3个颜色通道分别取:[0.485, 0.456, 0.406]

std_i:系数,3个颜色通道分别取:[0.229, 0.224, 0.225]

AIPP减均值乘系数的计算公式:

pixel_out_chx(i)=[pixel_in_chx(i)-mean_chn_i-min_chn_i]*var_reci_chn (公式二)

注:pixel_out_chx(i):计算输出值;

pixel_in_chx(i):原始像素值,取值范围[0, 255];

mean_chn_i表示每个通道的均值;

min_chn_i表示每个通道的最小值;

var_reci_chn表示每个通道方差的倒数

mean_chn_i和min_chn_i可以任意使用1个,另一个为0。令mean_chn_i=0,

公式一和公式二的像素经过计算后的值相等,所以公式的右边也相等,计算可得出:

min_chn_i = mean_i*255

var_reci_chn = 1/(255*std_i)

三个通道的计算如下:

 

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

与CANN训练:模型推理时数据预处理方法及归一化参数计算相似的内容:

CANN训练:模型推理时数据预处理方法及归一化参数计算

摘要:在做基于Ascend CL模型推理时,通常使用的有OpenCV、AIPP、DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合训练营提供的sample,说明了分别是如何实现预处理的。 本文分享自华为云社区《【2023 · CA

理论+实践,揭秘昇腾CANN算子开发

摘要: 本文介绍了CANN自定义算子开发的几种开发方式和算子的编译运行流程。然后以开发一个DSL Add算子为例,讲解算子开发的基本流程。 本文分享自华为云社区《昇腾CANN算子开发揭秘》,作者:昇腾CANN 。 开发者在利用昇腾硬件进行神经网络模型训练或者推理的过程中,可能会遇到以下场景: 训练场

一文详解TensorFlow模型迁移及模型训练实操步骤

摘要:本文介绍将TensorFlow网络模型迁移到昇腾AI平台,并执行训练的全流程。然后以TensorFlow 1.15训练脚本为例,详细介绍了自动迁移、手工迁移以及模型训练的操作步骤。 本文分享自华为云社区《将TensorFlow模型快速迁移到昇腾平台》,作者:昇腾CANN。 当前业界很多训练脚本

Ascend C sqrt算子实战

摘要:编写一个Ascend C的sqrt算子,并通过内核调用方式在cpu和npu模式下进行验证。 本文分享自华为云社区《【2023 · CANN训练营第一季】——Ascend C sqrt算子实战》,作者:dayao。 前言 编写一个Ascend C的sqrt算子,并通过内核调用方式在cpu和npu

手把手教你在昇腾平台上搭建PyTorch训练环境

摘要:在昇腾平台上运行PyTorch业务时,需要搭建异构计算架构CANN软件开发环境,并安装PyTorch 框架,从而实现训练脚本的迁移、开发和调试。 本文分享自华为云社区《手把手教你在昇腾平台上搭建PyTorch训练环境》,作者:昇腾CANN。 PyTorch是业界流行的深度学习框架,用于开发深度

又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

摘要:上海人工智能实验室的浦视开源算法体系(OpenMMLab)团队基于昇腾AI发布了MMDeploy 0.10.0版本,该版本已支持OpenMMLab算法仓库在昇腾异构计算架构CANN上的推理部署。 本文分享自华为云社区《又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速》,作者:昇腾

在昇腾平台上对TensorFlow网络进行性能调优

摘要:本文就带大家了解在昇腾平台上对TensorFlow训练网络进行性能调优的常用手段。 本文分享自华为云社区《在昇腾平台上对TensorFlow网络进行性能调优》,作者:昇腾CANN 。 用户将TensorFlow训练网络迁移到昇腾平台后,如果存在性能不达标的问题,就需要进行调优。本文就带大家了解

带你掌握如何查看并读懂昇腾平台的应用日志

摘要:本文介绍了昇腾平台日志分类、日志级别设置、日志内容格式,以及如何获取日志文件的方法。 本文分享自华为云社区《如何查看并读懂昇腾平台的应用日志》,作者:昇腾CANN。 当您完成训练/推理工程开发后,将工程放到昇腾平台运行,以调试工程是否正常运行,此时,可能会出现各种各样、五花八门的异常状况。 当

深度解读昇腾CANN模型下沉技术,提升模型调度性能

如何减少Host Bound模型的Device空闲时间,从而优化模型执行性能显得尤其重要,GE(Graph Engine)图引擎通过图模式的Host调度和模型下沉调度的方式,可提升模型调度性能,缩短模型E2E执行时间。

深度解读昇腾CANN多流并行技术,提高硬件资源利用率

GE(Graph Engine)图引擎采用多流并行算法,在满足计算图任务内部依赖关系的前提下,支持高效并发执行计算任务,从而大大提高硬件资源利用率和AI计算效率。