了解AscendCL數(shù)據(jù)預(yù)處理的兩種方式:AIPP和DVPP
01?數(shù)據(jù)預(yù)處理的典型使用場景
受網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練方式等因素的影響,絕大多數(shù)神經(jīng)網(wǎng)絡(luò)模型對輸入數(shù)據(jù)都有格式上的限制。在計(jì)算機(jī)視覺領(lǐng)域,這個限制大多體現(xiàn)在圖像的尺寸、色域、歸一化參數(shù)等。如果源圖或視頻的尺寸、格式等與網(wǎng)絡(luò)模型的要求不一致時,我們需要對其處理,使其符合模型的要求,這個操作,一般稱之為數(shù)據(jù)預(yù)處理。

02?AIPP、DVPP,它們都能做什么
CANN提供了兩套專門用于數(shù)據(jù)預(yù)處理的方式:AIPP和DVPP。
AIPP: Artificial Intelligence Pre-Processing
AIPP在AI Core上完成數(shù)據(jù)預(yù)處理,主要功能包括改變圖像尺寸(摳圖、填充等)、色域轉(zhuǎn)換(轉(zhuǎn)換圖像格式)、減均值/乘系數(shù)(改變圖像像素)等。
AIPP區(qū)分為靜態(tài)AIPP和動態(tài)AIPP,您只能選擇其中一種方式,不支持兩種方式同時配置。
- 靜態(tài)AIPP:模型轉(zhuǎn)換時設(shè)置AIPP模式為靜態(tài),同時設(shè)置AIPP參數(shù),模型生成后,AIPP參數(shù)值被保存在離線模型(*.om)中,每次模型推理過程采用固定的AIPP預(yù)處理參數(shù),無法修改。
- 動態(tài)AIPP:模型轉(zhuǎn)換時僅設(shè)置AIPP模式為動態(tài),每次模型推理前,根據(jù)需求,在執(zhí)行模型前設(shè)置動態(tài)AIPP參數(shù)值,然后在模型執(zhí)行時可使用不同的AIPP參數(shù)。
DVPP: Digital Vision Pre-Processing
DVPP是昇騰AI處理器內(nèi)置的圖像處理單元,通過AscendCL媒體數(shù)據(jù)處理接口提供強(qiáng)大的媒體處理硬加速能力,主要功能包括縮放、摳圖、色域轉(zhuǎn)換、圖片編解碼、視頻編解碼等。
總結(jié)一下,雖然都是數(shù)據(jù)預(yù)處理,但AIPP與DVPP的功能范圍不同(比如DVPP可以做圖像編解碼、視頻編解碼,AIPP可以做歸一化配置),處理數(shù)據(jù)的計(jì)算單元也不同,AIPP用的AI Core計(jì)算加速單元,DVPP就是用的專門的圖像處理單元。
AIPP、DVPP可以分開獨(dú)立使用,也可以組合使用。組合使用場景下,一般先使用DVPP對圖片/視頻進(jìn)行解碼、摳圖、縮放等基本處理,但由于DVPP硬件上的約束,DVPP處理后的圖片格式、分辨率有可能不滿足模型的要求,因此還需要再使用AIPP進(jìn)行色域轉(zhuǎn)換、摳圖、填充等處理。
例如,在昇騰310 AI處理器,由于DVPP僅支持輸出YUV格式的圖片,如果模型需要RGB格式的圖片,則需要再使用AIPP進(jìn)行色域轉(zhuǎn)換。
03?如何使用AIPP功能
下文以此為例:測試圖片分辨率為250*250、圖片格式為YUV420SP,模型對圖片的要求為分辨率224*224、圖片格式為RGB,因此需要通過AIPP實(shí)現(xiàn)摳圖、圖片格式轉(zhuǎn)換2個功能。關(guān)于各種格式轉(zhuǎn)換,其色域轉(zhuǎn)換系數(shù)都有模板,可從《ATC工具使用指南》獲取,參見“昇騰文檔中心[1]”。
靜態(tài)AIPP
1. 構(gòu)造AIPP配置文件*.cfg。
摳圖:有效數(shù)據(jù)區(qū)域從左上角(0, 0)像素開始,摳圖寬*高為224*224。
圖片格式轉(zhuǎn)換:輸入圖片格式為YUV420SP_U8,輸出圖片格式通過色域轉(zhuǎn)換系數(shù)控制。
2. 使能靜態(tài)AIPP。?
使用ATC工具轉(zhuǎn)換模型時,可將AIPP配置文件通過insert_op_conf參數(shù)傳入,將其配置參數(shù)保存在模型文件中。
參數(shù)解釋如下:
- framework:原始網(wǎng)絡(luò)模型框架類型,3表示TensorFlow框架。
- soc_version:指定模型轉(zhuǎn)換時昇騰AI處理器的版本,例如Ascend310。
- model:原始網(wǎng)絡(luò)模型文件路徑,含文件名。
- insert_op_conf:AIPP預(yù)處理配置文件路徑,含文件名。
- output:轉(zhuǎn)換后的*.om模型文件路徑,含文件名,轉(zhuǎn)換成功后,文件名自動以.om后綴結(jié)尾。
3. 調(diào)用AscendCL接口加載模型,執(zhí)行推理。
可參考往期的技術(shù)文章,請參見“基于昇騰計(jì)算語言AscendCL開發(fā)AI推理應(yīng)用”。
動態(tài)AIPP
1. 構(gòu)造AIPP配置文件*.cfg。
2. 使能動態(tài)AIPP。
使用ATC工具轉(zhuǎn)換模型時,可將AIPP配置文件通過insert_op_conf參數(shù)傳入,將其配置參數(shù)保存在模型文件中。
參數(shù)解釋如下:
- framework:原始網(wǎng)絡(luò)模型框架類型,3表示TensorFlow框架。
- soc_version:指定模型轉(zhuǎn)換時昇騰AI處理器的版本,例如Ascend310。
- model:原始網(wǎng)絡(luò)模型文件路徑,含文件名。
- insert_op_conf:AIPP預(yù)處理配置文件路徑,含文件名。
- output:轉(zhuǎn)換后的*.om模型文件路徑,含文件名,轉(zhuǎn)換成功后,文件名自動以.om后綴結(jié)尾。
3. 調(diào)用AscendCL接口加載模型,設(shè)置AIPP參數(shù)后,再執(zhí)行推理。
模型加載、執(zhí)行可從參考往期的技術(shù)文章,請參見“基于昇騰計(jì)算語言AscendCL開發(fā)AI推理應(yīng)用”。
調(diào)用AscendCL接口設(shè)置AIPP參數(shù)的代碼示例如下:
04?如何使用DVPP功能
昇騰AI處理器內(nèi)置圖像處理單元DVPP,提供了強(qiáng)大的媒體處理硬加速能力。同時,異構(gòu)計(jì)算架構(gòu)CANN提供了使用圖像處理硬件算力的入口:AscendCL接口,開發(fā)者可通過接口來進(jìn)行圖像處理,以便利用昇騰AI處理器的算力。
DVPP內(nèi)的功能模塊如下所示:
VPC(Vision Preprocessing Core)? ?
處理YUV、RGB等格式的圖片,包括縮放、摳圖、色域轉(zhuǎn)換、直方圖統(tǒng)計(jì)等。
JPEGD(JPEG Decoder)
JPEG壓縮格式-->YUV格式的圖片解碼。
JPEGE(JPEG Encoder)
YUV格式-->JPEG壓縮格式的圖片編碼。
VDEC(Video Decoder)
H264/H265格式-->YUV/RGB格式的視頻碼流解碼。
VENC(Video Encoder)
YUV420SP格式-->H264/H265格式的視頻碼流編碼。
PNGD(PNG decoder)
PNG格式-->RGB格式的圖片解碼。
此處就以JPEGD圖片解碼+VPC圖片縮放為例來說明如何使用DVPP功能。這里先通過一張圖總覽接口調(diào)用流程,包括資源初始化&去初始化、通道創(chuàng)建與銷毀、解碼、縮放、等待任務(wù)完成、釋放內(nèi)存資源等。

總覽接口調(diào)用流程后,接下來我們以開發(fā)者更熟悉的方式“代碼”來展示JPEGD圖片解碼+VPC圖片縮放功能的關(guān)鍵代碼邏輯。
本節(jié)通過接口調(diào)用流程、示例代碼帶大家了解了DVPP的功能開發(fā),更多DVPP的功能介紹及使用請參見“昇騰文檔中心[1]”。
05?更多介紹
[1]昇騰文檔中心:https://www.hiascend.com/zh/document
[2]昇騰社區(qū)在線課程:https://www.hiascend.com/zh/edu/courses
[3]昇騰論壇:https://www.hiascend.com/forum?
06?往期鏈接
基于昇騰計(jì)算語言AscendCL開發(fā)AI推理應(yīng)用