各位论坛大佬好,我想在开发板上部署一个自己训练的Convnext模型,但是在使用rknntoolkit2进行模型转换并推理时遇到了问题。在关闭量化(ret = rknn.build(do_quantization=False)的情况下,模型的输出会是NaN,并且有如下提示超出FP16的表示范围: “W inference: The range [1.94334077835083, inf] of '/downsample_layers.3/downsample_layers.3.0/ReduceMean_1_output_0' is out of the float16! W inference: The range [1.9433603286743164, inf] of '/downsample_layers.3/downsample_layers.3.0/Add_output_0' is out of the float16!” 我根据该信息定位了模型相关的层,由于我在rknntoolkit2的文档中没有找到在非量化模式下可以打印逐层详细数据的接口,所以我使用转换前的ONNX模型输出了提示溢出的两层的输出张量,但是发现并没有超出FP16表示范围的数值。 值得注意的是,提示溢出的reducemean层和add层,我在rknntoolkit2的运行日志中并没有找到reducemean算子,而多了一个ReduceMean_1_2avgpool的算子。 此外,如果开启量化,则不会有溢出的问题,但是rknn模型输出的结果和原始的onnx模型不一致(量化校正数据集不管只传入一张输入数据还是50-100张数据都不对)。自己训练的模型传入的是预处理后的(1,6,224,224)排布的npy文件,使用官方的convnext模型则不会出现溢出和数据不一致的问题。 目前对这个问题不知道该如何下手,请问能否给一些解决的方法或建议?
|