我想請問如果依照KL730DemoGenericDataInference.py的做法做是不是不適合即時推論?因為我目前使用合併了blazeface及pfld的nef模型去做即時推論時,依照KL730DemoGenericDataInference.py的方法會遇到很嚴重得延遲,依照KL730DemoCamGenericImageInferenceDropFrame.py的方法會遇到韌體報錯編號108
Hello,
KL730DemoGenericDataInference.py與KL730DemoGenericImageInference.py.py這兩個範例的差異在於,模型的前處理是否透過KL730中的HW來進行加速運算。
從你使用KL730DemoCamGenericImageInferenceDropFrame.py會遇到錯誤來看,有可能你的模型前處理並非標準的格式所造成,所以只能使用Data Inference (此部分僅為推測),使用Data inference的優點是可以自由的定義前處理函式,相容性較高,但缺點是少了HW的加速,一切都透過cpu來運算,整體速度會明顯得比較慢
因此,KL730DemoGenericDataInference.py的做法要拿來進行即時推論的話,需要額外考慮幾點的
這邊列了幾個主要的項目讓你參考,可以依據你的應用所需速度規格來評估要從哪個部分來提升
那我是否可以透過更改模型前處理成為標準的格式來實踐KL730DemoCamGenericImageInferenceDropFrame.py?如果可以的話是否有相關格式資料可以參考?同時我發現我在設定config時沒有指定input_fmt,這是否會是影響我前處理透過KL730中的HW來進行加速運算報錯的原因?
若希望使用HW來完成標準格式的前處理,建議可以讓模型的input format為4W4C8B,可透過<Input Format (Optional)>來設定
https://doc.kneron.com/docs/#toolchain/manual_5_nef/#53-nef-combine-optional
但要指定成4W4C8B的話,模型須滿足下面條件
first layer要是conv 且 input channel <=4 && column stride <= 2 && column dilation == 1
模型須滿足此條件才可透過上述的input format來指定成4W4C8B
只有4W4C8B可以使用嗎?我記得doc裡面有一頁內容有說明各種格式對模型要求的條件,如果符合那些格式條件是否也可以一樣使用HW?
同時我之前用data inference 時主要延遲在於convert_onnx_data_to_npu_data這部分,那我是否能想辦法提升這部分的效能?
感謝您一直解答我的問題
HW preprocess的部分主要是針對傳統圖片來進行處理,所以會以4W4C8B為主,其餘的格式或許可以局部支援,但效果最好的會是4W4C8B,若要針對處理的話建議以此格式為主
convert_onnx_data_to_npu_data的部分主要是針對浮點轉定點的部分,確保輸入的資料符合KL730的NPU架構,若使用image inference的話HW會協助處理,但因為data inference時這部分會改透過cpu運算,所以速度會受到限制,這部分是data inference的限制無法更動,僅能修改你的前後處理來縮短時間
感謝您的建議,我嘗試將input format改為4W4C8B成功將blazeface與pfld混合模型在kneo-pi上real-time inference了,效果看起來很不錯。我透過程式將blazeface模型中第一層Transpose的部分移除並將輸入參數直接調成下一層conv需要的格式,藉由此滿足first layer要是conv 且 input channel <=4 && column stride <= 2 && column dilation == 1的條件
這是我的模型即kneo-pi上之推論程式,或許能給其他人參考
很開心能協助解決問題,也感謝你的分享!
Comments
Hello,
KL730DemoGenericDataInference.py與KL730DemoGenericImageInference.py.py這兩個範例的差異在於,模型的前處理是否透過KL730中的HW來進行加速運算。
從你使用KL730DemoCamGenericImageInferenceDropFrame.py會遇到錯誤來看,有可能你的模型前處理並非標準的格式所造成,所以只能使用Data Inference (此部分僅為推測),使用Data inference的優點是可以自由的定義前處理函式,相容性較高,但缺點是少了HW的加速,一切都透過cpu來運算,整體速度會明顯得比較慢
因此,KL730DemoGenericDataInference.py的做法要拿來進行即時推論的話,需要額外考慮幾點的
這邊列了幾個主要的項目讓你參考,可以依據你的應用所需速度規格來評估要從哪個部分來提升
那我是否可以透過更改模型前處理成為標準的格式來實踐KL730DemoCamGenericImageInferenceDropFrame.py?如果可以的話是否有相關格式資料可以參考?同時我發現我在設定config時沒有指定input_fmt,這是否會是影響我前處理透過KL730中的HW來進行加速運算報錯的原因?
若希望使用HW來完成標準格式的前處理,建議可以讓模型的input format為4W4C8B,可透過<Input Format (Optional)>來設定
https://doc.kneron.com/docs/#toolchain/manual_5_nef/#53-nef-combine-optional
但要指定成4W4C8B的話,模型須滿足下面條件
first layer要是conv 且 input channel <=4 && column stride <= 2 && column dilation == 1模型須滿足此條件才可透過上述的input format來指定成4W4C8B
只有4W4C8B可以使用嗎?我記得doc裡面有一頁內容有說明各種格式對模型要求的條件,如果符合那些格式條件是否也可以一樣使用HW?
同時我之前用data inference 時主要延遲在於convert_onnx_data_to_npu_data這部分,那我是否能想辦法提升這部分的效能?
感謝您一直解答我的問題
HW preprocess的部分主要是針對傳統圖片來進行處理,所以會以4W4C8B為主,其餘的格式或許可以局部支援,但效果最好的會是4W4C8B,若要針對處理的話建議以此格式為主
convert_onnx_data_to_npu_data的部分主要是針對浮點轉定點的部分,確保輸入的資料符合KL730的NPU架構,若使用image inference的話HW會協助處理,但因為data inference時這部分會改透過cpu運算,所以速度會受到限制,這部分是data inference的限制無法更動,僅能修改你的前後處理來縮短時間
感謝您的建議,我嘗試將input format改為4W4C8B成功將blazeface與pfld混合模型在kneo-pi上real-time inference了,效果看起來很不錯。我透過程式將blazeface模型中第一層Transpose的部分移除並將輸入參數直接調成下一層conv需要的格式,藉由此滿足first layer要是conv 且 input channel <=4 && column stride <= 2 && column dilation == 1的條件
這是我的模型即kneo-pi上之推論程式,或許能給其他人參考
很開心能協助解決問題,也感謝你的分享!