PyTorchでFaste R-CNNのbackboneを変更したい

実現したいこと

PyTorchでFPNなしでFaster R-CNNのbackboneをResNet50に変更したいのですが、どのように変更したらよいかわからず困っています。

前提

PyTorchのtorchvisionのFaster R-CNNでFPNなしでbackboneをResNet50に変更したいです。
いろいろ試しているのですが、上手くいきません。
詳しい方がいらっしゃいましたら、ご教授願います。

発生している問題・エラーメッセージ

AssertionError: Anchors should be Tuple[Tuple[int]] because each feature map could potentially have different sizes and aspect ratios. There needs to be a match between the number of feature maps passed and the number of sizes / aspect ratios specified.

該当のソースコード

python

1import torch 2import torchvision 3from torchvision.models.detection import FasterRCNN 4from torchvision.models.detection.rpn import AnchorGenerator 5from torchvision.models.detection.backbone_utils import _mobilenet_extractor, _resnet_fpn_extractor, _validate_trainable_layers, resnet_fpn_backbone 6 7trainable_backbone_layers = 3 #_validate_trainable_layers(is_trained, trainable_backbone_layers, 5, 3)8pretrained_backbone = False9#norm_layer = misc_nn_ops.FrozenBatchNorm2d if is_trained else nn.BatchNorm2d10 11backbone = torchvision.models.resnet50()12backbone = resnet_fpn_backbone('resnet50', pretrained_backbone, trainable_layers=trainable_backbone_layers)13 14anchor_generator = AnchorGenerator(sizes=((32, 64, 128, 256, 512),),15 aspect_ratios=((0.5, 1.0, 2.0),))16 17roi_pooler = torchvision.ops.MultiScaleRoIAlign(featmap_names=['0'],18 output_size=7,19 sampling_ratio=2)20 21model = FasterRCNN(backbone,22 num_classes=2,23 rpn_anchor_generator=anchor_generator,24 box_roi_pool=roi_pooler)25model.eval()26x = [torch.rand(3, 300, 400), torch.rand(3, 500, 400)]27predictions = model(x)

試したこと

サンプルコードに記載されていたように、backboneの部分を以下のように変更したら実行できることは確認しました。

python

1backbone = torchvision.models.mobilenet_v2(weights="DEFAULT").features

コメントを投稿

0 コメント