簡體   English   中英

僅使用預先訓練的火炬網絡的某些層

[英]Use only certain layers of pretrained torchvision network

我試圖在通過以下方式初始化的預先訓練的Torchvision Faster-RCNN網絡中僅使用某些層:

model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()

這可行。 但是,將model.modules()model.children()傳遞model.modules() 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模型並nn.Sequential 如果查看R-CNN( 'generalized_rcnn.py' )的功能,您會發現輸出功能(由FCN主干計算)不僅傳遞給RPN組件,而且還與輸入圖像甚至與目標(在培訓期間)。

因此,我想,如果您想改變R-CNN的運行方式,則必須使用基類torchvision.models.detection.FasterRCNN()並為其提供不同的roi池參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM