我试图只使用预先训练过的火炬视觉中的某些层,更快-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预训练模型来创建一个新的(预训练的)模型,该模型只使用特定的层,例如,除了最后一个层之外的所有层?
发布于 2019-06-05 07:45:37
与其他简单的CNN模型不同,将基于R-CNN的检测器转换为简单的nn.Sequential模型并不简单。如果您查看RPN ('generalized_rcnn.py')的功能,您将看到输出特性(由FCN主干计算)不只是传递给RPN组件,而是与输入图像甚至目标(在培训期间)相结合。
因此,我想,如果您想要改变R更快的行为方式,就必须使用基类torchvision.models.detection.FasterRCNN(),并为它提供不同的roi池参数。
https://stackoverflow.com/questions/56455302
复制相似问题