tinyvision / SOLIDER-REID

MIT License
55 stars 12 forks source link

用预训练模型做微调 #5

Open linhh29 opened 1 year ago

linhh29 commented 1 year ago

您好! 请问怎么样用您的在market上预训练好的模型(swin_small_market.pth)来进行微调呢? 我根据readme的步骤可以用swin_small.pth来微调,但是将MODEL.PRETRAIN_PATH设为swin_small_market.pth会报错 image

cwhgn commented 1 year ago

您好,感谢关注。我们当时的代码只为了读取SOLIDER训练的初始化模型,没有适配SOLIDER-REID训练的模型作为初始化。如果你希望用SOLIDER-REID训练的模型(比如swin_small_market.pth)作为初始化,可以把下面代码进行下替换:https://github.com/tinyvision/SOLIDER-REID/blob/c35c07671ceb16f72bb7c8fd94929ef436b9406b/model/make_model.py#L193

替换成下面类似代码:

param_dict = torch.load(model_path)
for i in param_dict:
    self.state_dict()[i].copy_(param_dict[i])
linhh29 commented 1 year ago

您好!按您所说替换之后,还是报错了 image

cwhgn commented 1 year ago

这是因为你训练的数据类别和market不一致,导致classifier参数无法载入。你可以改成如下代码:

param_dict = torch.load(model_path)
for i in param_dict:
    if 'classifier' in i:
        continue
    self.state_dict()[i].copy_(param_dict[i])
linhh29 commented 1 year ago

好的,感谢您!非常棒的工作