pythorn分段模型的python嵌入

cqoc49vn  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(305)

我正试图从Finetened中获得平均嵌入 torchvision.models.segmentation.fcn_resnet50 模型我测试过的一种方法是用 nn.Identity 层(返回形状的Tensor[batch_size,feature_num,h,w]),并使用 torch.mean 论推理

model_embedder.classifier = Identity()
outputs = torch.mean(model_embedder(inputs), dim=[2, 3])

但我注意到了 forward() torchvision分割模型的方法如下:


# ...

x = features["out"]
x = self.classifier(x)
x = F.interpolate(x, size=input_shape, mode='bilinear', align_corners=False)
result["out"] = x

# ...

和使用 F.interpolate() on功能可能会导致意外结果(特别是内存泄漏和分段错误)。我也试着补充一下 AvgPooling 层直接建模

class EmbeddingAvgPooling(nn.Module):
    def __init__(self):
        super(EmbeddingAvgPooling, self).__init__()

    def forward(self, x):
        return torch.mean(x, dim=[2, 3])

model_embedder.classifier = EmbeddingAvgPooling()

但当然,这与 F.interpolate() 任何方面的应用程序问题(在此设置中,错误不是分段错误,而是 size mismatch 从…起 F.interpolate() ,这是可以预期的)。我能做些什么来解决这个问题?我需要覆盖吗 forward() 模型的方法(如何?)或其他变体是否可行?
p、 我知道使用分割模型作为嵌入器可能不是最好的想法,但目前正在尝试具体测试这种方法。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题