Python 为了从头开始训练pytorch模型,我需要更改哪些参数?

Python 为了从头开始训练pytorch模型,我需要更改哪些参数?,python,deep-learning,pytorch,Python,Deep Learning,Pytorch,我按照本教程培训了一个pytorch模型,用于实例分割: 我不想在完全不同的数据和类别上训练一个模型,这与COCO完全无关。我需要做哪些更改来重新培训模型。根据我的阅读,我猜除了有正确数量的课程外,我只需要训练这一行: model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True) 到 但是我注意到还有另外一个参数:pretrained\u backbone=True,trainiable\u backb

我按照本教程培训了一个pytorch模型,用于实例分割:

我不想在完全不同的数据和类别上训练一个模型,这与COCO完全无关。我需要做哪些更改来重新培训模型。根据我的阅读,我猜除了有正确数量的课程外,我只需要训练这一行:

model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)


但是我注意到还有另外一个参数:
pretrained\u backbone=True,trainiable\u backbone\u layers=None
它们是否也应该更改?

来自
maskrcnn\u resnet50\u fpn

  • 预培训(bool)-如果为真,则返回在COCO train2017上预培训的模型
  • 预训练主干(bool)–如果为真,则返回在Imagenet上预训练主干的模型
  • 可训练主干层(int)–从最终块开始的可训练(非冻结)resnet层的数量。有效值介于0和5之间,5表示所有主干层都是可训练的
因此,对于从头开始的培训,请使用:

model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, pretrained_backbone=False, trainable_backbone_layers=5, num_classes=your_num_classes)
或:

因为在源代码中:


函数签名是

torchvision.models.detection.maskrcnn\u resnet50\u fpn(预训练=假,进度=真,数量=91,预训练主干=真,可训练主干层=3,**kwargs)

设置
pretrained=False
将告诉PyTorch不要下载在COCO train2017上预先培训过的车型。你想要它,因为你对训练感兴趣

通常,如果您想在不同的数据集上进行训练,这就足够了

当您设置
pretrained=False
时,PyTorch将在ImageNet上下载pretrained ResNet50。默认情况下,它将冻结名为
conv1
layer1
的前两个块。这是如何在更快的R-CNN论文中完成的,该论文对预训练主干的初始层进行了冻结

(只需打印模型以检查其结构)

现在,如果您甚至不想冻结前两层,您可以设置
可训练的主干\u层=5
(在设置
预训练的主干=False
时自动完成),这将从头开始训练整个resnet主干

检查

model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, pretrained_backbone=False, trainable_backbone_layers=5, num_classes=your_num_classes)
model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, pretrained_backbone=False, num_classes=your_num_classes)
if not (pretrained or pretrained_backbone):
    trainable_backbone_layers = 5
layers_to_train = ['layer4', 'layer3', 'layer2', 'layer1', 'conv1'][:trainable_layers]