【发布时间】:2021-01-24 02:25:52
【问题描述】:
我正在研究图像嵌入,想知道为什么翻转图像会改变输出。考虑去掉头部的 resnet18,例如:
import torch
import torch.nn as nn
import torchvision.models as models
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
model = models.resnet18(pretrained=True)
model.fc = nn.Identity()
model = model.to(device)
model.eval()
x = torch.randn(20, 3, 128, 128).to(device)
with torch.no_grad():
y1 = model(x)
y2 = model(x.flip(-1))
y3 = model(x.flip(-2))
最后一层看起来像这样,最重要的是有一个AdaptiveAveragePooling 作为最后一层像素/特征被汇集到 1 个像素:
根据我的想法,由于我们只是在卷积之上进行卷积,因此在池化之前,所发生的只是特征图将根据图像的翻转方式进行翻转。平均池化只是对最后一个特征图(沿每个通道)进行平均,并且不受其方向的影响。 AdaptiveMaxPool 应该是一样的。
“普通”卷积网络之间的主要区别在于我们将池化/平均到一个像素宽度。
但是,当我查看y1-y2、y1-y3、y2-y3 时,这些值与零明显不同。我在想什么?
【问题讨论】:
标签: image-processing deep-learning conv-neural-network data-augmentation