为什么翻转图像会更改CNN池输出

问题描述

我正在查看图像嵌入,并且想知道为什么翻转图像会改变输出。考虑去掉resnet18的头部,例如:

do {
    let decoder = JSONDecoder()
    decoder.dataDecodingStrategy = .base64

    // You should try to decode `NasaCollection`!!!
    let videos = try decoder.decode(NasaCollection.self,from: data)
    completed(.success(videos))
}

最后一层看起来像这样,最重要的是,在最后一层上,像素/要素合并为1个像素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))

enter image description here

根据我的想法,由于在卷积之上只是卷积,因此在池化之前,将发生的一切就是特征图将根据图像的翻转方式翻转。平均池仅对最后一个特征图(沿每个通道)进行平均,并且对其方向不变。 AdaptiveAveragePooling应该是相同的。

“常规”卷积网之间的关键区别在于我们将池平均化为一个像素宽度。

但是,当我查看AdaptiveMaxPooly1-y2y1-y3时,这些值明显不同于零。我在想什么错?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)