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

标签 image-processing machine-learning computer-vision pytorch object-detection

我尝试仅使用预训练的 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/

相关文章:

python - 调整图像大小时如何最大程度地减少模糊度?

python 设置将 (pdf) 转换为 jpeg 时的最大文件大小,例如棍棒

python - 机器学习: Classification on imbalanced data

python - 使用python opencv跟踪白色

ios - 你如何在 iOS 上的图像中找到特定颜色的区域?

python - 卷积网络上的二维矩阵

python - 矩阵转换为txt文件

opencv - 解决相机不良的反馈(水平线上下移动几条阴影)

c++ - findHomography 返回的 mask 参数值代表什么?

java - 使用Java压缩图像大小