预训练模型的加载机理pytorch版

在做二维目标检测时,我们会对神经网络的部分地方进行修改,比如增加CBAM,或者修改FPN等等。但是将修改后的网络进行训练时,加载预训练权重过程却不会报错,甚至修改网络后性能不增反降。这里面蕴含的知识点在这篇文章做做一个总结。

pytorch中网络导入预训练权重的代码很简单:

net = model()
net.to(device)
net.load_state_dict(torch.load('params.pth'))

其中:

  • torch.load('params.pth')只是加载了模型参数,并没有将参数放入网络中。这里是将参数以键值对的方式加载到了内存中。
  • load_state_dict方法才是将参数字典放入网络中。

当我们对网络做了修改后,我们只需要按下面的方式做,就可以将之前的预训练权重加载到新网络中。在mmdetection或者一些大牛的开源代码中,修改网络后仍然能加载预训练权重也是因为以下原因

上一篇:.net core 设置跨域以及实施部署常遇到的跨域访问失败问题


下一篇:【零声教育】FFmpeg编程入门