Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 仅使用预先训练的torchvision网络的某些层_Image Processing_Machine Learning_Computer Vision_Pytorch_Object Detection - Fatal编程技术网

Image processing 仅使用预先训练的torchvision网络的某些层

Image processing 仅使用预先训练的torchvision网络的某些层,image-processing,machine-learning,computer-vision,pytorch,object-detection,Image Processing,Machine Learning,Computer Vision,Pytorch,Object Detection,我试图在预训练的torchvision更快的RCNN网络中仅使用某些层,该网络由以下内容初始化: model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True) model.eval() 这很有效。但是,将model.modules()或model.children()传递到nn.Sequential会产生错误。即使传递整个模型也会导致错误,例如 model = torch.nn.Sequential(

我试图在预训练的torchvision更快的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'
TypeError: conv2d(): argument 'input' (position 1) must be Tensor, not tuple

导致

AttributeError: 'dict' object has no attribute 'dim'
TypeError: conv2d(): argument 'input' (position 1) must be Tensor, not tuple

这让我很困惑,因为我在过去修改过其他PyTorch预训练模型。如何使用FasterRCNN预训练模型创建仅使用特定层的新(预训练)模型,例如除最后一层外的所有层?

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


因此,我想如果你想改变更快的R-CNN的行为方式,你必须使用基类并为它提供不同的roi池参数。

@Shai我想删除roi池层,所以在第一个roi头之前保留所有内容。换句话说:我想把两个更快的RCNN阶段作为两个独立的网络。谢谢你的提示。我现在查看了广义的_rcnn.py,并复制了前向传递代码来调整它。它解决了我的问题。@Wavelad会确保您在更改后能够加载预先训练好的参数。您可能需要调整加载的
状态。