【2023 · CANN訓(xùn)練營(yíng)第一季】——模型推理時(shí)數(shù)據(jù)預(yù)處理方法及歸一化參數(shù)計(jì)算
前言:
????????對(duì)待推理圖片執(zhí)行模型推理前,需要對(duì)圖片進(jìn)行預(yù)處理,以滿足模型的輸入要求。我們可以通過(guò)閱讀模型訓(xùn)練代碼,查看預(yù)處理的方法。在做基于Ascend CL模型推理時(shí),通常使用的有OpenCV、AIPP、DVPP這三種方式,或者是它們的混合方式,本文比較了這三種方式的特點(diǎn),并以Resnet50的pytorch模型為例,結(jié)合訓(xùn)練營(yíng)提供的sample,說(shuō)明了分別是如何實(shí)現(xiàn)預(yù)處理的。本文還介紹了AIPP做減均值/乘系數(shù) 的參數(shù)是如何計(jì)算的。
一、查找模型訓(xùn)練時(shí)的預(yù)處理方式
????????這一步對(duì)我這樣的新手有些難度,在訓(xùn)練營(yíng)可以直接問(wèn)授課老師,或者是無(wú)所不曉的老班(帥高),亦或是無(wú)所不能的小助手??
????????以Resnet50的pytorch模型為例,這里模型需要的數(shù)據(jù)預(yù)處理方法,再講述兩種查找方法。
????????Resnet50模型,需要對(duì)待推理圖片的數(shù)據(jù)預(yù)處理是:縮放到224*224;以RGB的順序存放;對(duì)像素/255.0,變換到[0.0,1.0]范圍內(nèi);再按三個(gè)通道,分別做減均值,乘系數(shù)的運(yùn)算,三個(gè)通道的均值是[0.485, 0.456, 0.406],對(duì)應(yīng)系數(shù)分別是:[0.229, 0.224, 0.225]。
1、方法一:在昇騰官方的modelzoo去查。https://gitee.com/ascend/modelzoo

然后選擇用于訓(xùn)練的模型

在搜索框中,輸入Resnet50,找到對(duì)應(yīng)的模型文件

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

2、方法二:到pytorch官網(wǎng)去查
https://pytorch.org/vision/stable/models/generated/torchvision.models.resnet50.html#torchvision.models.resnet50

二、數(shù)據(jù)預(yù)處理的方式
????????確定好了輸入圖片需要做哪些預(yù)處理,接下來(lái)就需要選擇合適的實(shí)現(xiàn)方式。Ascend CL常用的有三種:Opencv、AIPP、DVPP。這三種方式的特點(diǎn)如下表所示:

????????本次訓(xùn)練營(yíng),勤勞的小虎老師貼心的給大家準(zhǔn)備了三種方式,供大家學(xué)習(xí)和掌握。代碼在: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

三、減均值/乘系數(shù) 用AIPP實(shí)現(xiàn)的計(jì)算
????????Pytorch官方的計(jì)算方法:

1、將圖像數(shù)據(jù)調(diào)整到[0.0, 1.0]之間,相當(dāng)于(/255.0)——torchvision.transforms.ToTensor
2、將數(shù)據(jù)x = (x - mean(x))/std(x)——torchvision.transforms.Normalize
用數(shù)學(xué)公式表達(dá):
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):計(jì)算輸出值;
????? ?pixel_in_chx(i):原始像素值,取值范圍[0, 255];
? ? ?? mean_i:均值,3個(gè)顏色通道分別?。篬0.485, 0.456, 0.406]
? ? ? ?std_i:系數(shù),3個(gè)顏色通道分別?。?span id="s0sssss00s" class="font-size-16">[0.229, 0.224, 0.225]
AIPP減均值乘系數(shù)的計(jì)算公式:
pixel_out_chx(i)=[pixel_in_chx(i)-mean_chn_i-min_chn_i]*var_reci_chn (公式二)
注:pixel_out_chx(i):計(jì)算輸出值;
????? ?pixel_in_chx(i):原始像素值,取值范圍[0, 255];
????????mean_chn_i表示每個(gè)通道的均值;
????????min_chn_i表示每個(gè)通道的最小值;
????????var_reci_chn表示每個(gè)通道方差的倒數(shù)
mean_chn_i和min_chn_i可以任意使用1個(gè),另一個(gè)為0。令mean_chn_i=0,
公式一和公式二的像素經(jīng)過(guò)計(jì)算后的值相等,所以公式的右邊也相等,計(jì)算可得出:
min_chn_i = mean_i*255
var_reci_chn = 1/(255*std_i)
三個(gè)通道的計(jì)算如下:
