微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Torchvision 预训练模型比从头训练的模型表现更好?

如何解决为什么 Torchvision 预训练模型比从头训练的模型表现更好?

我遵循了 torchvision 教程 (https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html),并在我自己的航拍图像数据集上训练了一个分割模型。其中只有 2 个类。结果是:

Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.640
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.700

enter image description here

不错,但我想提高面具的准确性。

然后我用 pretrained=Falsepretrained_backbone=False 进行了完全相同的训练,并且非常惊讶地发现性能大约是预训练模型的一半。

Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.328
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.472

我正在尝试了解为什么会出现这种情况以及我应该将努力改进模型的方向:

  • 训练参数,如:lr、momentum、dropout、batch size ..
  • MaskRCNN 网络的架构:roi、anchors ..
  • 关于我的数据集的一些事情:添加增强..

我不知道去哪里了解如何提高性能。有什么好的方法可以解决这个问题?

编辑:我的模型是:

def get_model_instance_segmentation(num_classes):
    # load an instance segmentation model pre-trained pre-trained on COCO
    model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)

    # get number of input features for the classifier
    in_features = model.roi_heads.Box_predictor.cls_score.in_features
    # replace the pre-trained head with a new one
    model.roi_heads.Box_predictor = FastRCNNPredictor(in_features,num_classes)

    # Now get the number of input features for the mask classifier
    in_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channels
    hidden_layer = 256
    # and replace the mask predictor with a new one
    model.roi_heads.mask_predictor = MaskRCNNPredictor(in_features_mask,hidden_layer,num_classes)
    return model

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。