一、问题描述
- 需要将mmpose框架下训练的模型单独保存出来,做后续处理。
- 用torch.save()直接保存模型mmpose_model.pt,然后重新搭建模型,把保存的模型参数加载进去,得到scratch_model.pt
- 使用scratch_model.pt进行推理,与mmpose_model.pt推理结果不同。二者都转成onnx模型后,推理结果与mmpose_model.pt的推理结果相同。
二、问题分析
mmpose_model.pt与scratch_model.pt的数据预处理以及输出的后处理是一致的,所以应该是模型加载的时候有问题。
查资料发现,使用scratch_model.pt进行推理的时候,没有加model.eval()
二、model.train()与model.val()区别
- 参考https://blog.csdn.net/libaominshouzhang/article/details/119741474
- 参考https://blog.csdn.net/qq_38410428/article/details/101102075
model.train()与model.val()在处理BatchNormalization和Dropout层时候的机制不同。
model.train()时,BatchNormalization的参数会根据输入更新,Dropout使输入以p的概率参与计算
model.eval()时,BatchNormalization的参数则会固定,与保存的值一致,Dropout不起作用,所有输入参与计算