预训练模型的加载机理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或者一些大牛的开源代码中,修改网络后仍然能加载预训练权重也是因为以下原因

猜你喜欢

转载自blog.csdn.net/qq_42308217/article/details/123140481