【发布时间】:2018-05-30 20:45:32
【问题描述】:
我一直在尝试使用 VGG/Inception 对 MNIST 数据集使用迁移学习。但是这两个网络都接受至少 224x224x3 大小的图像。如何将 28x28x1 MNIST 图像重新缩放为 224x224x3 以进行迁移学习?
【问题讨论】:
标签: machine-learning tensorflow deep-learning keras mnist
我一直在尝试使用 VGG/Inception 对 MNIST 数据集使用迁移学习。但是这两个网络都接受至少 224x224x3 大小的图像。如何将 28x28x1 MNIST 图像重新缩放为 224x224x3 以进行迁移学习?
【问题讨论】:
标签: machine-learning tensorflow deep-learning keras mnist
执行您所要求的操作的一种常见方法是简单地将图像大小调整为 CNN 输入层所需的所需分辨率。因为您已经用keras 标记了您的问题,所以 keras 有一个预处理模块,允许您加载图像并可选择指定您想要缩放图像的所需大小。如果您查看该方法的实际来源:https://github.com/keras-team/keras/blob/master/keras/preprocessing/image.py#L321,它在内部使用 Pillow 插值方法将图像重新缩放到所需的分辨率。
另外,由于 MNIST 数字原本是灰度的,所以需要将单通道图像复制为多通道图像,使其人为地变为 RGB。这意味着红色、绿色和蓝色通道都是相同的,并且是 MNIST 灰度对应物。 load_img 方法有一个名为 grayscale 的附加标志,您可以将其设置为 False 以将图像作为 RGB 图像加载。
加载这些图像并转换为 RGB 并重新缩放后,您可以继续使用 VGG19 执行迁移学习。事实上,它以前已经做过了。请在此处查阅此链接:https://www.analyticsvidhya.com/blog/2017/06/transfer-learning-the-art-of-fine-tuning-a-pre-trained-model/ 并查看第 6 节:使用预训练模型识别数字。
我想给您一个公平的警告,即拍摄 28 x 28 图像并将大小调整为 224 x 224 图像会产生严重的插值伪影。您将对由于上采样而包含噪声的图像数据执行迁移学习,但这就是我之前链接的博客文章中所做的。我建议您将插值更改为 bilinear 或 bicubic。默认是使用最近邻,这对于图像上采样很糟糕。
YMMV,因此请尝试将图像调整为输入层所需的大小,并用三个通道填充图像以使其变为 RGB,看看会发生什么。
【讨论】:
这在很大程度上取决于您希望使用的模型。在 VGGNet 的情况下,您必须将输入重新缩放到预期的目标大小,因为 VGG 网络包含 FC 层,其形状在一定数量的下采样后与图像尺寸相匹配。请注意,由于参数共享,卷积层可以采用任何图像大小。
然而,现代 CNN 正在顺应向全卷积转换的趋势,并解决了任意迁移学习的问题。如果您选择此路径,请选择最新的Inception models 之一。在这种情况下,模型外模型应该能够接受甚至是 28x28x1 的小图像。
【讨论】: