摘要:在做基于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)
三個通道的計算如下:
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/549045.html
標籤:其他
下一篇:AI演算法測驗之淺談
