torch模型使用eval模式测试时,可能精度下降非常大,我也遇到了这个问题,在不使用eval()的情况下,模型识别是期望的结果,但是一旦加上eval就会变得很差。
我也找了许多参考资料,大致明白是模型结构里有 BatchNorm 或者 DropOut 导致的问题,但是没找到适合我的解决方式。
然后,这里仅仅是我自己瞎改,找资料后瞎改的,我也不知道细致的原因,也不想知道
我是使用预训练好的模型做测试的,
那么我这里的解决方式就是:
batch_norm = BatchNorm1d(略, 略,track_running_stats=False)
将模型结构里的BatchNorm的track_running_stats设为False,
然后加载模型权重参数时:
model.load_state_dict(load(weight_path, map_location=device), strict=False)
加上 strict = False,这样设置后,使用model.eval()后就没问题了,具体原因我不知道
这仅仅是一个解决问题的小小参考。
如果模型使用eval()会导致精度有问题的话,那么在部署模型为onnx时,onnx模型会和使用eval出现同样的精度问题,也就是说,如果onnx模型的精度大幅下降,也可能是原本torch模型使用eval就有精度问题。
最后,这些只是我,瞎猫碰死耗子的解决方式。