写点什么

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

  • 2023-04-03
    广东
  • 本文字数:1406 字

    阅读完需:约 5 分钟

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

本文分享自华为云社区《【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)


三个通道的计算如下:



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

发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
CANN训练:模型推理时数据预处理方法及归一化参数计算_人工智能_华为云开发者联盟_InfoQ写作社区