摘要:為了方便小夥伴們進行視訊場景的AI應用開發,Modelarts推理平臺將視訊推理場景中一些通用的流程抽取出來預置在基礎映象中,小夥伴們只需要簡單地編寫預處理及後處理指令碼,便可以像開發圖片型別的AI服務一樣開發視訊型別的AI服務了。
本文分享自華為雲社群《在Modelarts平臺上進行視訊推理》,原文作者:HW007。
熟悉Modelarts推理的小夥伴都知道,在Modelarts平臺上可以通過簡單地定製模型的預處理、推理及後處理指令碼,就可以輕鬆的部署一個AI服務,對圖片、文字、音視訊等輸入進行推理。但是對於視訊型別的推理,之前需要使用者在自己的指令碼中進行視訊檔案下載、視訊解碼、並自己將處理後的檔案傳到OBS中。為了方便小夥伴們進行視訊場景的AI應用開發,Modelarts推理平臺將視訊推理場景中一些通用的流程抽取出來預置在基礎映象中,小夥伴們只需要簡單地編寫預處理及後處理指令碼,便可以像開發圖片型別的AI服務一樣開發視訊型別的AI服務了。
一、總體設計說明
提取視訊場景的通用推理流程如下:
如上圖,視訊處理場景的流程可分為“視訊源輸入”、“視訊解碼”、“預處理”、“模型推理”、“後處理”、“推理結果輸出”六個部分。其中“視訊源輸入”、“視訊解碼”、“推理結果輸出”三個灰色的部分Modelarts已經提前準備好。“預處理”、“模型推理”、“後處理”三個部分可由使用者自由定製,具體定製方法如下:
1)定製模型:Modelarts已經提供好模型載入的方法,使用者只需要將自己“saved_model”格式的模型放置到指定的model目錄即可。
2)定製預處理:Modelarts會將解碼後的視訊幀資料提供給使用者,使用者只需通過重寫“customize_service.py”中“VideoService”類的靜態方法“_preprocess”便好,“_preprocess”函式的入參以及對出參的約束如下:
3)定製後處理:Modelarts會將模型推理後的輸出及解碼後的視訊幀資料提供給使用者,使用者只需通過重寫“customize_service.py”中“VideoService”類的靜態方法“_postprocess”便好,“_postprocess”函式的入參以及對出參的約束如下:
二、Demo體驗
1)下載本文附件,如下圖,附件提供了一個已除錯OK的視訊推理模型包“model”資料夾,同時也提供了基於tox框架寫好的驗證用例,供使用者線下除錯自己模型包是否OK。
2)將附件包中的“model”資料夾傳到華為雲OBS中。
將附件包中的“test/test_data/input”、“test/test_data/output”資料夾放到華為雲OBS與之前“model”資料夾放置同級的目錄下。
3)匯入模型:在Modelarts匯入模型介面,選擇從OBS匯入,選擇剛才傳到OBS中的model目錄。如下圖所示:
按下面操作配置好模型的各個配置後點選建立模型:
可以看到模型建立成功:
4).部署服務,將上述模型部署為線上服務,部署中要選擇有GPU的資源節點(公共池和專屬池都可以):
可以看到服務已經部署成功:
5)建立作業:在服務介面選擇建立作業
選擇輸入視訊,選到步驟2)中上傳到OBS中的input資料夾中的視訊檔案如下:
選擇輸出路徑,選到步驟2)中上傳到OBS中的output資料夾如下:
6)等待視訊處理完成:
檢視OBS中的output資料夾,可看到視訊已被拆成圖片後的推理結果了。
7)使用者根據自己需要,更換model資料夾下的“saved_model”格式的模型檔案,並修改“customize_service.py”中的“_preprocess”和“_postprocess”函式來完成自己的業務邏輯。修改完後可以先執行“test/run_test.sh”來提前驗證下修改後的模型包是否能正常推理,待線下除錯好,可正常推理後再按上述步驟將模型包提交到OBS中部署成Modelarts服務。
其中,視訊推理的模型包要求如下:
模型包結構要求:
└── model
├── config.json (必須,Modelarts推理相關的配置檔案)
├── customize_service.py (必須,推理檔案)
├── saved_model.pb (必須,SavedModel格式的模型檔案)
└── variables (必須,SavedModel格式的模型檔案)
├── variables.data-00000-of-00001
└── variables.index
其中config.json 檔案的格式遵循Modelarts的規範,https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0092.html
目前,只有tensorflow的“tf1.13-python3.7-gpu-async”runtime支援視訊推理,即config.json檔案中的"model_type"欄位必須為"TensorFlow", "runtime"欄位必須為 "tf1.13-python3.7-gpu-async"。
“customize_service.py”文中必須有一個“VideoService”類,“VideoService”類必須有兩個靜態方法“_preprocess”和“_postprocess”,相應的函式簽名約束如下: