【发布时间】:2019-10-20 15:47:28
【问题描述】:
我正在尝试仅使用预训练的 torchvision 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 预训练模型创建仅使用某些层的新(预训练)模型,例如除了最后一层之外的所有层?
【问题讨论】:
-
@Shai 我想删除 RoI-pooling 层,所以将所有内容保留在第一个 RoIHead 之前。换句话说:我希望将两个 Faster-RCNN 阶段作为两个独立的网络。
标签: image-processing machine-learning computer-vision pytorch object-detection