Tencent / ncnn

ncnn is a high-performance neural network inference framework optimized for the mobile platform
Other
20.11k stars 4.14k forks source link

HELP: fourier transform conversion from onnx error #1838

Open Alanjunhao opened 4 years ago

Alanjunhao commented 4 years ago

ncnn error: load_model error at layer 18, parameter file has inconsistent content Corresponding Pytorch Code:

def forward(self, input):
    """input: (batch_size, 1, time_steps, n_fft // 2 + 1)
    Returns:
      spectrogram: (batch_size, 1, time_steps, n_fft // 2 + 1)
    """
    (real, imag) = self.stft.forward(input)

    # spectrogram = real ** 2 + imag ** 2
    spectrogram = real * real + imag * imag

    if self.power == 2.0:
        pass
    else:
        spectrogram = spectrogram ** (power / 2.0)

    return spectrogram

After checking, it turns out that the power of imagination part returned by short term fourtier transform went wrong during conversion from onnx to ncnn. Specifically, the line "spectrogram = real 2 + imag 2" Tried using workaround such as "spectrogram = real real + imag imag", to replace pow OP with Mul, but it's not working.

Could you provide some solution please?

nihui commented 1 month ago

针对onnx模型转换的各种问题,推荐使用最新的pnnx工具转换到ncnn In view of various problems in onnx model conversion, it is recommended to use the latest pnnx tool to convert your model to ncnn

pip install pnnx
pnnx model.onnx inputshape=[1,3,224,224]

详细参考文档 Detailed reference documentation https://github.com/pnnx/pnnx https://github.com/Tencent/ncnn/wiki/use-ncnn-with-pytorch-or-onnx#how-to-use-pnnx