Почему предварительно обученная модель torchvision работает лучше, чем обученная с нуля?

#pytorch #image-segmentation #torchvision

#pytorch #сегментация изображений #факельное видение

Вопрос:

Я следовал руководству 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
 

введите описание изображения здесь

Прилично, но я хотел бы улучшить точность масок.

Поэтому я затем точно так же тренировался с pretrained=False and pretrained_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, импульс, отсев, размер пакета..
  • Архитектура сети MaskRCNN: рентабельность инвестиций, привязки..
  • Кое-что о моем наборе данных: добавление дополнения..

Я не уверен, где искать, чтобы понять, как я могу улучшить производительность. Каков достойный способ подойти к этому?

РЕДАКТИРОВАТЬ: Моя модель:

 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
 

Комментарии:

1. Они используют сеть пирамид объектов для извлечения объектов перед переходом в сеть предложений регионов. Что, я полагаю, делает их более точными, чем другие. И в моем случае, когда я попытался заменить resnet50 по умолчанию на vgg16, разница в точности была очень огромной. Я думаю, это помогает!

2. @SubashKharel Я не совсем уверен, что понимаю. Я отредактировал свой вопрос, чтобы показать, какую модель я использую

3. @SubashKharel вы хотите сказать, что vgg был большим улучшением по сравнению с resnet50 в качестве основы?

4. Нет, это другой путь.