摘要:為了方便小伙伴們進行視頻場景的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”,相應的函數簽名約束如下: