MXNET模型進行部署時可以使用TensorRT,其過程通常爲將MXNET模型轉換爲ONNX,再通過TensorRT的ONNX解釋器轉換爲TensorRT的序列化文件。但此過程中,MXNET的OP不一定可以轉換爲ONNX的結果,而ONNX的OP也只有部分可以在TensorRT中實現。
TensorRT支持操作
可參照TensorRT官方文檔,這裏面除了介紹支持的OP操作外,還有關於支持的平臺和支持int8壓縮的層等信息。
可以看到,由於ONNX開源,應該可以找到通過重新編譯添加支持的操作,但未找到添加plugin的說明,從issues上看有人提這個問題,但目前沒有得到回覆。
ONNX支持操作
ONNX支持的操作可以在github的ONNX項目中查看,Operators.md中寫明瞭支持的操作及其說明。
按照TensorRT 4 基本介紹及TensorFlow模型轉化Uff格式導入(二)的說法,ONNX是不支持自定義層的。
MXNET支持操作
MXNET支持的操作可以在MXNET官網的NDArray API中查看,也寫命令支持的操作及其說明。
MXNET實際可以轉換爲ONNX的操作可以在github 的python/mxnet/contrib/onnx/mx2onnx/_op_translations.py中查看,需要注意的是這裏面出現的操作只能證明是通過master分支編譯的版本可以支持,而自己電腦中安裝的版本需要在python路徑相應位置下查看。比如master分支的作爲1.5.0未發佈版,新增了對Deconvolution等操作的支持,而當前發佈的到1.4.1不支持這些操作,如果只是臨時轉換模型,可以將master分支下的contrib/onnx整體替換自己python版本的文件。
查找問題解答
MXNET轉TensorRT遇到問題是很正常的事,可以多去github的issue和相關論壇查找下:
1、MXNET的issue
2、MXNET的論壇(有時候可能打不開…)
3、ONNX的issue
4、TensorRT的論壇