解决SiamRPN预训练模型的问题

加入预训练模型,若是报类似以下的错误:

 Unexpected key(s) in state_dict: "layer1.0.weight", "layer1.0.bias", "layer1.1.weight", "layer1.1.bias", "layer1.1._var", "layer2.0.weight", "layer2.0.bias", "layer2.1.weight", "layer2.1.bias", "layer2.1.running_mean", "layer2.1.running_v0.bias", "layer3.1.weight", "layer3.1.bias", "layer3.1.running_mean", "layer3.1.running_var", "layer4.0.weight", "layer4.0.4.1.bias", "layer4.1.running_mean", "layer4.1.running_var", "layer5.0.weight", "layer5.0.bias", "layer5.1.weight", "layer5., "layer5.1.running_var".

最直接的方法,放与代码网络匹配的预训练模型!!!
其他的比较好找,就不提供了。这里提供一个匹配Tularov Arbi复现的SiamRPN预训练模型,链接如下:
https://pan.baidu.com/s/1road7tNSIc65VRjtiDSTiw提取码:69nq

还是要推荐一下Tularov Arbi复现的SiamRPN代码。这个代码看着很舒服、很整洁。比较容易看懂。

下面解决的方法就比较复杂了!!!
出现上述错误,因为我们构建的网络模型和加入的预训练模型的key值不对应。说key值可能不太好理解。用下面例子简单说一下:
预训练模型构建的网络:
解决SiamRPN预训练模型的问题_第1张图片
我们自己构建的网络:
解决SiamRPN预训练模型的问题_第2张图片
如上所示,self.layer1就好比keys。 而我们的是self.featureExtractd,这两是没有办法对应上的。所以运行的时候就报出现意外的keys的错误。

我们按着预训练模型keys值的结构,重新构建我们的网络就可以了。还有一点这样重新构建可以解决上述问题。但是想运行通可能还需要改一些地方的代码,这就需要按着你的代码要求去修改了!

最后放一个查看模型key值的代码:

checkpoint = torch.load(config.pretrained_model, map_location='cpu')
        for k,v in checkpoint.items():
          print(k)
        print("hcc-wyq")

你可能感兴趣的:(人工智能,python,神经网络,深度学习,pytorch)