pytorch upsample層到onnx,以及到tensorRT的轉換(二)
阿新 • • 發佈:2020-07-08
之前的部落格介紹了upsample層轉換到tensorRT出錯的解決方法,就是回退onnx版本到1.5.0。雖然暫時解決了問題,但無法使用高版本的pytorch和onnx,https://www.cnblogs.com/hypnus-ly/p/12932110.html
最近又上github,發現更簡單的解決方法,就是修改下upsample層初始化時的引數就可以了。突然發現之前的部落格好low啊,還是需要多多學習,發現問題的根源,找到本質解決方法。
if self.training: x = F.interpolate(x, scale_factor=2, mode="nearest") # 使用 scale_factor 動態引數時,轉換tensorRT會報錯
else: # hack in order to generate a simpler onnx
x = F.interpolate(x, size=[int(2 * x.shape[2]), int(2 * x.shape[3])], mode='nearest') # 如要轉換tensorRT模型的話,需要使用 size 引數,靜態的指定圖片大小
upsample函式修改方式和上述程式碼一樣
在使用upsample函式時,經常會先定義upsample module
m = nn.Upsample(scale_factor=2, mode="nearest")
然後在前向推理時,才動態的輸入資料,此時沒法預先設定 size 大小,解決方法:
在進行前向推理時,先獲取輸入的大小,再改變函式引數:
n,c,h,w = input.size() size = (h*2, w*2) m.scale_factor=None m.size = (h * 2, w * 2) output = m(input)
主要:scale_factor 引數 和 size 引數不能同時存在,所以要將scale_factor 設定為 None