使用ResNet50提取[w,h,f]维度特征存疑,求技术解答
ResNet50特征提取维度问题解答
你对ResNet50的使用方式存在认知偏差,而非理解有误。
默认调用的ResNet50(比如PyTorch、TensorFlow中的预训练版本)会在网络末尾添加全局平均池化层和全连接层,最终输出的是整幅图像的全局特征,维度为[f]。但论文中需要的是保留空间维度的卷积特征图,也就是逐像素的特征表示,对应维度[w, h, f]。
论文原文翻译:
我们得到一个尺寸为f的中间视觉特征表示Fc。我们使用ResNet50[26]作为骨干卷积架构。
在第一步中,三维特征Fc通过保留其宽度被重塑为二维特征,即得到特征形状(f×h, w)。
解决方法:
- 移除ResNet50的最后几层(全局平均池化、全连接层),提取中间卷积层的输出。比如在PyTorch中可以这样实现:
此时输出的特征图维度为import torchvision.models as models import torch.nn as nn # 加载预训练ResNet50 resnet = models.resnet50(pretrained=True) # 移除最后两层(全局池化和全连接),得到特征提取器 feature_extractor = nn.Sequential(*list(resnet.children())[:-2])[batch_size, f, h, w](不同框架维度顺序可能有差异,比如TensorFlow会是[batch_size, h, w, f]),调整维度顺序后就能匹配论文中的[w, h, f]。 - 论文中提到的“三维特征Fc”正是这种带空间维度的特征图,后续的reshape操作也基于这个空间结构展开,和你之前得到的全局特征完全是两种不同的输出形式。
内容的提问来源于stack exchange,提问作者user358829
相关产品推荐
相关产品推荐

