CANN訓練:模型推理時資料預處理方法及歸一化引數計算

華為雲開發者聯盟發表於2023-04-03
摘要:在做基於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

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

然後選擇用於訓練的模型PyTorch目錄

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

在搜尋框中,輸入Resnet50,找到對應的模型檔案

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

然後在modelarts / train_start.py裡查到的處理程式碼如下:

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

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

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

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

二、資料預處理的方式

確定好了輸入圖片需要做哪些預處理,接下來就需要選擇合適的實現方式。Ascend CL常用的有三種:Opencv、AIPP、DVPP。這三種方式的特點如下表所示:

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

本次訓練營,勤勞的小虎老師貼心的給大家準備了三種方式,供大家學習和掌握。程式碼在:https://gitee.com/ascend/samples/tree/master/inference/modelInference。分別是:純open CV;CV+AIPP;DVPP+AIPP。如下表所示:

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

1、CV方式:sampleResnetQuickStart

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

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

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

3、DVPP+AIPP方式:sampleResnetDVPP

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

三、減均值/乘係數 用AIPP實現的計算

Pytorch官方的計算方法:

CANN訓練:模型推理時資料預處理方法及歸一化引數計算

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訓練:模型推理時資料預處理方法及歸一化引數計算

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章