用于自定义图像大小的 MobileNets

Posted

技术标签:

【中文标题】用于自定义图像大小的 MobileNets【英文标题】:MobileNets for a custom image size 【发布时间】:2019-08-29 11:58:14 【问题描述】:

我想使用在 ImageNet 上预训练的 MobileNet 模型进行特征提取。我正在加载模型如下:

from keras.applications.mobilenet import MobileNet

feature_model = MobileNet(include_top=False, weights='imagenet', input_shape=(200, 200, 3))

Keras 手册clearly says 这个输入形状是有效的:

input_shape:可选的形状元组,仅当 include_top 为 False 时才指定(否则输入形状必须为 (224, 224, 3)(使用 'channels_last' 数据格式)或 (3, 224, 224)(使用'channels_first' 数据格式)。它应该恰好有 3 个输入通道,并且宽度和高度不应小于 32。例如 (200, 200, 3) 将是一个有效值。

但是,我收到以下错误消息:

ValueError:如果正在加载 imagenet 权重,则输入必须具有静态方形((128, 128)、(160, 160)、(192, 192) 或 (224, 224) 之一)。提供的输入形状 = (200, 200, 3)

如果我指定include_top=False,为什么它要求输入形状与训练时的形状相匹配?

Keras:2.2.4,TensorFlow:1.13.1

更新:正如@Sorush 指出的,这个异常已被删除recently。但是,如here 所述,该问题并未完全解决。

Update2:这两个拉取请求(1、2)解决了问题。

【问题讨论】:

输入形状 (200,200,3) 仅在 weights=None 时有效,您可以指定 include_top true 或 false。对于预训练的权重,imagenet 仅适用于列出的形状。 使用include_top=False,模型仅包含卷积层(无 FC 层)。为什么它仅限于这些形状?例如。我可以使用任意输入形状加载 VGG16 模型,即使它是在 ImageNet 上以 (224,224,3) 的形状进行训练的 【参考方案1】:

要在 MobileNet 中使用自定义图像大小,请从以下链接下载权重:https://github.com/fchollet/deep-learning-models/releases/tag/v0.6

但是要确定你需要哪些权重,因为根据MobileNet的研究论文,它包含不同的权重文件,因为每个模型都依赖于参数alphadepth_multiplieralpha 有四个不同的值:0.25、0.50、0.75、1.0。此外,根据mobilenet 的实现,depth_multiplier 为 1。我建议您下载mobilenet_1_0_224_tf.h5。根据research paper Table 7,它具有最高的 ImageNet 准确率。

之后,

from keras.applications.mobilenet import MobileNet

feature_model = MobileNet(include_top=False, weights=None, input_shape=(200, 200, 3), alpha=1.0, depth_multiplier=1)
feature_model.load_weights('mobilenet_1_0_224_tf.h5') # give the path for downloaded weights

你可以走了。

【讨论】:

目前看来input_shape 指定了两个不同的东西:训练期间使用的输入形状(以及要加载的权重)和正在创建的模型的输入形状。无论如何,您的解决方案应该可以工作,谢谢。 更新:正如@Soroush 指出的那样,问题根源于unnecessary exception。对于不在 [128, 160, 192, 224] 中的自定义尺寸,使用默认尺寸 224(并加载相应的权重)。 是的!这是不必要的例外。但它还没有发布。因此,如果不想从 master 构建而不是我刚刚向您展示了根据当前版本的方法。 是的,我明白了。谢谢!【参考方案2】:

此异常是错误的,最近(2019 年 3 月 29 日)已从 Keras 中删除(请参阅 GitHub 上的 issue 和 pull request)。截至 2019 年 4 月 8 日,此提交尚未发布,因此您必须从 master 安装。

【讨论】:

我注释掉了这个异常,指定为here。模型现在尝试加载 (here) 不存在的指定大小的权重。在我看来,this line 也应该被删除并且警告信息应该被更新。我将在 Github 上创建一个问题。 问题已通过this拉取请求解决。

以上是关于用于自定义图像大小的 MobileNets的主要内容,如果未能解决你的问题,请参考以下文章

PS中怎么自定义剪切图像的大小

swift和xcode 6中的自定义标签栏

自定义 UISlider - 增加“热点”大小

xml Lotus的自动更新自定义字段(自定义图像大小)

xml Lotus的自动更新自定义字段(自定义图像大小)

具有自定义图标大小的 UIButton 图像