Я пытаюсь использовать только определенные слои в сети Faster-RCNN с предварительным обучением факелу, инициализированной:
model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()
Это работает. Однако передача model.modules()
или model.children()
в nn.Sequential
приводит к ошибке. Даже прохождение всей модели приводит к ошибкам, например,
model = torch.nn.Sequential(*model.modules())
model.eval()
# x is a [C, H, W] image
y = model(x)
ведет к
AttributeError: 'dict' object has no attribute 'dim'
и
model = torch.nn.Sequential(*model.children())
model.eval()
# x is a [C, H, W] image
y = model(x)
ведет к
TypeError: conv2d(): argument 'input' (position 1) must be Tensor, not tuple
Это смущает меня, потому что я модифицировал другие предварительно обученные модели PyTorch, как это в прошлом. Как я могу использовать предварительно подготовленную модель FasterRCNN для создания новой (предварительно обученной) модели, которая использует только определенные слои, например, все слои, кроме последнего?