gpt4 book ai didi

image-processing - 仅使用预训练的 torchvision 网络的某些层

转载 作者:行者123 更新时间:2023-11-30 08:42:17 28 4
gpt4 key购买 nike

我尝试仅使用预训练的 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 预训练模型来创建仅使用某些层的新(预训练)模型,例如除了最后一层之外的所有层?

最佳答案

与其他简单的 CNN 模型不同,将基于 R-CNN 的检测器转换为简单的 nn.Sequential 模型并非易事。如果您查看 R-CNN ( 'generalized_rcnn.py' ) 的功能,您会发现输出特征(由 FCN 主干计算)不仅传递到 RPN 组件,而且与输入图像甚至与目标(训练期间)。

因此,我想如果你想改变更快的 R-CNN 行为方式,你必须使用基类 torchvision.models.detection.FasterRCNN()并为其提供不同的 roi 池化参数。

关于image-processing - 仅使用预训练的 torchvision 网络的某些层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56455302/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com