首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只使用预先训练过的火炬视觉网络的某些层

只使用预先训练过的火炬视觉网络的某些层
EN

Stack Overflow用户
提问于 2019-06-05 06:34:30
回答 1查看 779关注 0票数 2

我试图只使用预先训练过的火炬视觉中的某些层,更快-RCNN网络初始化为:

代码语言:javascript
复制
model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()

这个很管用。但是,将model.modules()model.children()传递给nn.Sequential会产生错误。甚至通过整个模型也会导致错误。

代码语言:javascript
复制
model = torch.nn.Sequential(*model.modules())
model.eval()
# x is a [C, H, W] image
y = model(x)

通向

代码语言:javascript
复制
AttributeError: 'dict' object has no attribute 'dim'

代码语言:javascript
复制
model = torch.nn.Sequential(*model.children())
model.eval()
# x is a [C, H, W] image
y = model(x)

通向

代码语言:javascript
复制
TypeError: conv2d(): argument 'input' (position 1) must be Tensor, not tuple

这让我感到困惑,因为我曾经像过去那样修改过其他PyTorch预培训过的模型。我如何使用FasterRCNN预训练模型来创建一个新的(预训练的)模型,该模型只使用特定的层,例如,除了最后一个层之外的所有层?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 07:45:37

与其他简单的CNN模型不同,将基于R-CNN的检测器转换为简单的nn.Sequential模型并不简单。如果您查看RPN ('generalized_rcnn.py')的功能,您将看到输出特性(由FCN主干计算)不只是传递给RPN组件,而是与输入图像甚至目标(在培训期间)相结合。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56455302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档