从 PyTorch 中提取有用的特征 - 高效的 net-3b 模型

Posted

技术标签:

【中文标题】从 PyTorch 中提取有用的特征 - 高效的 net-3b 模型【英文标题】:Extracting useful features from a PyTorch - efficient net-3b model 【发布时间】:2022-01-24 03:22:27 【问题描述】:

我有一个基于 EfficientNet PyTorch (efficientnet-3b) 的 PyTorch CNN,它在相当复杂的胸部 X 光片的二元分类(99% 以上)方面做得非常好。我想提取特征并在相关模型中使用它们。 EfficientNet PyTorch 有一个非常方便的方法model.extract_features 与给定的例子

features = model.extract_features(img)
print(features.shape) # torch.Size([1, 1280, 7, 7])

效果很好,我得到了宣传的结果,但我需要更多 [1, 516] 或类似形状的功能。我需要足够多的功能才能具有相当的歧视性,但又不能太多以至于笨拙。 我熟悉添加一个层或一系列层的技术,最后是一个具有我需要大小的输出的全连接层。

如果这是我需要在这里做的事情,请有人指导我完成流程、架构等。此外,如果解决方案利用了上述方法,那就太好了。

【问题讨论】:

【参考方案1】:

最简单的架构是用线性投影结束特征提取器:

class MyExtractor:
    def __init__(self, extractor, features = 512):
        self.extractor = extractor
        self.projection = torch.nn.Sequential(torch.nn.Flatten(), torch.nn.LazyLinear(out_features))

    def forward(self, x):
        return self.projection(self.extractor(x))

你可以像这样实例化它:

m = MyExtractor(model, 512)

这适用于任何大小的输出特征。

您也可以提供更大的features,但 L1 对最后一层进行正则化以仅获得最重要的特征

【讨论】:

以上是关于从 PyTorch 中提取有用的特征 - 高效的 net-3b 模型的主要内容,如果未能解决你的问题,请参考以下文章

高效提取 MultiPolygon 中自相交特征生成的所有子多边形

基于VGG19神经网络的提取特征 进行 可见光与红外光的 图像融合 基于pytorch 实现。。。

使用cnn提取特征,图像相似度对比。pytorch 推理的时候报内存不足的问题

科普-深度学习中的卷积

特征选择/特征提取

DBNet实战:详解DBNet训练与测试(pytorch)