在自定义数据集上微调Pytorch I3D模型

xyhw6mcr  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(116)

我想在自定义数据集上微调来自torch hub的I3D模型,该模型在Kinetics 400类上进行了预训练,其中我有4个可能的输出类。
我通过以下方式加载模型:

model = torch.hub.load("facebookresearch/pytorchvideo", i3d_r50, pretrained=True)

字符串
我把它打印出来,看到了这一层:

(6): ResNetBasicHead(
      (pool): AvgPool3d(kernel_size=(4, 7, 7), stride=(1, 1, 1), padding=(0, 0, 0))
      (dropout): Dropout(p=0.5, inplace=False)
      (proj): Linear(in_features=2048, out_features=400, bias=True)
      (output_pool): AdaptiveAvgPool3d(output_size=1)


所以,我试着:

model = torch.hub.load("facebookresearch/pytorchvideo", i3d_r50, pretrained=True)
num_classes = 4
model.ResNetBasicHead.proj = torch.nn.Linear(model.ResNetBasicHead.proj.in_features, num_classes)


但我得到了一个错误

AttributeError: 'Net' object has no attribute 'ResNetBasicHead'


怎么做才合适呢?

vc6uscn9

vc6uscn91#

如果我理解正确的话,你想通过添加一个新的块来改变网络的块,即线性层。
你可以通过添加一个新的块来实现这一点。
第一个月
然后模型看起来像这样:

(6): ResNetBasicHead(
  (pool): AvgPool3d(kernel_size=(4, 7, 7), stride=(1, 1, 1), padding=(0, 0, 0))
  (dropout): Dropout(p=0.5, inplace=False)
  (proj): Linear(in_features=2048, out_features=400, bias=True)
  (output_pool): AdaptiveAvgPool3d(output_size=1)
)
(7): Linear(in_features=2048, out_features=4, bias=True)

字符串
或者,如果你想将它添加到你的ResNetBasicHead,你可以这样做:
model.blocks[6].add_module("linear", torch.nn.Linear(model.blocks[6].proj.in_features, num_classes))
其产生:

(6): ResNetBasicHead(
  (pool): AvgPool3d(kernel_size=(4, 7, 7), stride=(1, 1, 1), padding=(0, 0, 0))
  (dropout): Dropout(p=0.5, inplace=False)
  (proj): Linear(in_features=2048, out_features=400, bias=True)
  (output_pool): AdaptiveAvgPool3d(output_size=1)
  (linear): Linear(in_features=2048, out_features=4, bias=True)
)

相关问题