MNN模型輸出與ONNX模型輸出對不上

夢墜凡塵發表於2020-11-18

如題,本次bug原因是MNN的輸出格式是NC4HW4,需要將其轉為NCHW即可。

附上MNN文件原始碼如下:

import MNN.expr as F
vars = F.load_as_dict("model.mnn")
inputVar = vars["input"]
# 檢視輸入資訊
print(inputVar.shape)
print(inputVar.data_format)
# 修改原始模型的 NC4HW4 輸入為 NCHW,便於輸入
if (inputVar.data_format == F.NC4HW4):
    inputVar.reorder(F.NCHW)
# 寫入資料
inputVar.write(numpy.ones([1, 3, 224, 224], dtype="float32").tolist())

# 檢視中間結果的值
midVar = vars['mid']
print(midVar.shape)
# 切換佈局便於檢視結果
if (midVar.data_format == F.NC4HW4):
    midVar = F.convert(midVar, F.NCHW)
print(midVar.read())

# 檢視輸出結果
outputVar = vars['output']
print(outputVar.shape)
# 切換佈局便於檢視結果
if (outputVar.data_format == F.NC4HW4):
    outputVar = F.convert(outputVar, F.NCHW)
print(outputVar.read())

# 將關注的變數數值儲存為 mnn 模型,可用 MNNDump2Json 列印檢視
midVar.fix_as_const()
outputVar.fix_as_const()

F.save([midVar, outputVar], "outputs.mnn")

轉換程式碼如下:

if (outputVar.data_format == F.NC4HW4):
    outputVar = F.convert(outputVar, F.NCHW)

進行MNN推理時最好先檢視MNN模型輸入輸出的格式是否正確!

相關文章