【问题标题】:Does omitting pooling layers in CNNs make sense in some cases?在某些情况下,在 CNN 中省略池化层是否有意义?
【发布时间】:2018-04-13 17:33:58
【问题描述】:

我知道通常的 CNN 由卷积层和池化层组成。池化层使输出更小,这意味着计算量更少,并且它们还使其以某种方式变换不变,因此来自内核滤波器的特征的位置可以在原始图像中移动一点。

但是当我不使用池化层时会发生什么?原因可能是我想要原始图像中每个像素的特征向量,因此卷积层的输出必须与图像具有相同的大小,只是有更多的通道。这有意义吗?这些特征向量中是否还会有有用的信息,还是需要在 CNN 中使用池化层?还是有一些方法可以通过池化层获取单个像素的特征向量?

【问题讨论】:

    标签: machine-learning neural-network computer-vision conv-neural-network max-pooling


    【解决方案1】:

    早期和后期的卷积特征图包含很多有用的信息。许多有趣和有趣的应用程序完全基于预训练的 CNN 的特征图,例如Google Deep DreamNeural Style。预训练模型的常见选择是 VGGNet,因为它很简单。

    还要注意一些 CNN,例如All Convolutional Net,用卷积层替换池化层。他们仍然通过跨步进行下采样,但完全避免了 maxpool 或 avgpool 操作。这个想法已经流行起来,并在许多现代 CNN 架构中得到应用。

    唯一的困难是没有下采样的 CNN 可能更难训练。您需要足够的训练数据,其中标签是图像(我假设您有),并且您还需要一些聪明的损失函数来进行反向传播。当然,你可以从像素差的 L2 范数开始,但这真的取决于你要解决的问题。

    我的建议是采用现有的预训练 CNN(例如 VGGNet for tensorflow)并只保留前两个卷积层,直到第一次下采样。这是尝试这种架构的快速方法。

    【讨论】:

    • 这些是没有池化层但仍有一些下采样的 CNN。如果我根本不使用任何下采样怎么办?因此,如果输入是 256x256x3 的图像,则输出将是 256x256xN(每个像素大小为 N 的特征向量)。它是否仍然具有信息并且是变换不变的?我的观点是使用此特征向量检测图像中具有特定邻域的某个像素。我不想使用传统的滑动窗口方法,因为整个图像的纹理会导致这个像素,如果我只使用滑动窗口,我认为这些信息会丢失。
    • 早期的卷积层可能不会是变换不变的,这是真的,但仍然包含有用的信息——这就是我的观点。很难提前一天预测早期特征图是否适用于您的数据您的任务。但如果没有,你也可以考虑下采样+卷积上采样,得到你需要大小的特征图。
    • 这可能是另一个问题,但你不知道一些模型在第一次下采样之前有两层以上吗? (已经像您在答案中发布的 VGGNet 一样接受过训练)@Maxim
    • 我所知道的所有著名网络在下采样之前都使用 1-2 层,我认为是因为它们的主要目标是分类精度,而 2 层足够灵活:更大的灵活性并不会带来更高的精度。但他们经常在网络后期使用更多层
    猜你喜欢
    • 2018-05-04
    • 2011-11-22
    • 2010-10-12
    • 2015-09-15
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多