使用TPU-MLIR進行模型轉換的時候我們會在各個階段對比模型每一層輸出的相似度,以確保模型轉換的正確性,同時也能夠在適配過程中更方便地定位問題來源。
但我們并不知道轉換后的模型精度如何,特別是INT8量化后的模型輸出,往往與原模型輸出存在較大的區別(當然這個區別是在可接受的范圍內的),光靠對比輸出的相似度我們并不能看出INT8模型的表現究竟怎么樣。所以,TPU-MLIR也提供了精度驗證的接口,來檢驗轉換后的模型表現。
在進行精度驗證前,首先我們需要準備好用于驗證的數據集,因為TPU-MLIR里沒有自帶完整的測試集,所以用于精度驗證的數據集需要大家自行下載,對于分類網絡主要使用的是IMAGENET2012的驗證集,一共有5w張圖片,而目標檢測網絡使用的是COCO2017的驗證集,共5k張圖。TPU-MLIR后續還會逐步支持更多類型,例如NLP領域的網絡,未來也會開放。
另外,對于分類數據集的擺放方式,是將5w張圖片分別放在1000個子目錄中,對應imagenet里的1000個類別,每個類別下有50張屬于該類別的圖片,這類擺放方式自然就不再需要額外的標簽文件;
對于COCO數據集的話相對比較簡單,所有的圖片都是放在一個目錄下,每張圖片的類別信息都會從對應的json文件中提取;
準備好數據集后,我們就可以直接使用model_eval這一接口對mlir模型進行精度驗證,主要會用到這五個參數:
model_file與dataset參數用于提供模型與數據集路徑
count用于明確我們要用來驗證精度的圖片數量,默認情況下是使用整個目錄下的數據集
dataset_type則是根據驗證的模型類型用于指定對應數據集的加載方式
postprocess_type則是用來明確輸出的后處理方式,然后用相應的metrics來計算精度
那這里不需要提供預處理信息嗎?
其實在mlir模型的input_op里就已經包含了對數據的預處理信息,主要包括mean, scale, resize的尺寸與resize時是否保持高寬比, 輸入圖片數據的pixel_format等,其中Mean和scale用于對輸入的pixel value進行線性變換,與大家常用的mean與std相似,只不過它把normalize的部分融合進了mean與std中。
而對于模型的評估方式,分類網絡我們主要使用的是Top1與Top5 accuracy,也就是看模型輸出的概率中排序最高與前五的類別里是否包含了正確的類別,而目標檢測網絡我們使用的則是COCO官方的12個評估指標,從不同方面去驗證mlir模型的精度。
先將模型輸出的檢測框經過non-maximum suppression剔除掉重疊與概率較低的候選框后再用剩下的計算與ground truth bounding box的IoU,然后根據不同指標的計算規則計算出相應的average precision與average recall。比如第一個指標是指從IoU=0.5到0.95每間隔0.05計算一次模型針對單個類別的precision, 然后取平均數,再將所有類別的precision累加起來取平均數,這其實就是mAP的其中一種計算方式,而其它兩個指標只采用了單個IoU threshold來計算AP。
COCO數據集還會按照物體所占的像素數量來區分大中小物體,TPU-MLIR也會分別對這些不同尺寸物體的檢測結果計算AP與AR來驗證mlir模型在檢測大中小物體上的精度
至于這個AR max=1,10和100指的是分別限制每張圖片只有1,10和100個概率最高的檢測結果,然后與第一個AP的計算方式相似,按照IoU threshold從0.5到0.95,每隔0.05計算一次單個類別的AR,先取AR在不同IoU下的平均值,再取AR在不同類別下的平均值。
TPU-MLIR目前在github上發布了一系列待解決的問題,非常歡迎對AI編譯器感興趣且想要在空閑時間豐富自己開源項目經歷的朋友們來參與,與我們一起完善TPU-MLIR這個新一代的AI編譯器。
審核編輯:彭菁
-
網絡
+關注
關注
14文章
7386瀏覽量
88207 -
數據集
+關注
關注
4文章
1197瀏覽量
24531 -
模型轉換
+關注
關注
0文章
3瀏覽量
5180 -
nlp
+關注
關注
1文章
481瀏覽量
21932
發布評論請先 登錄
相關推薦
評論