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



我遵循本教程训练了用于实例分割的pytorch模型:https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html

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

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

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

但我注意到还有另一个参数:pretrained_backbone=True, trainable_backbone_layers=None也应该更改吗?

函数签名是

torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, progress=True, num_classes=91, pretrained_backbone=True, trainable_backbone_layers=3, **kwargs)

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

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

当您设置pretrained=False时,PyTorch将在ImageNet上下载预训练的ResNet50。默认情况下,它将冻结名为conv1layer1的前两个块。这就是Faster R-CNN论文中的方法,该论文冻结了预训练主干的初始层。

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

layers_to_train = ['layer4', 'layer3', 'layer2', 'layer1', 'conv1'][:trainable_layers]

现在,如果您甚至不希望前两层冻结,可以设置trainable_backbone_layers=5(在设置pretrained_backbone=False时自动完成(,这将从头开始训练整个resnet主干。

检查PR#2160。

来自maskrcnn_resnet50_fpn文档:

  • 预训练(bool(–如果为True,则返回在COCO train2017上预训练的模型
  • pretrained_b主干(bool(–如果为True,则返回在Imagenet上预训练主干的模型
  • trainable_backbone_layers(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)

或:

model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, pretrained_backbone=False, num_classes=your_num_classes)

因为在maskrcnn_resnet50_fpn的源代码中:

if not (pretrained or pretrained_backbone):
trainable_backbone_layers = 5

最新更新