【问题标题】:MobileNets for a custom image size用于自定义图像大小的 MobileNets
【发布时间】: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:这两个拉取请求(12)解决了问题。

【问题讨论】:

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

标签: python tensorflow keras deep-learning


【解决方案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 上的 issuepull request)。截至 2019 年 4 月 8 日,此提交尚未发布,因此您必须从 master 安装。

【讨论】:

  • 我注释掉了这个异常,指定为here。模型现在尝试加载 (here) 不存在的指定大小的权重。在我看来,this line 也应该被删除并且警告信息应该被更新。我将在 Github 上创建一个问题。
  • 问题已通过this拉取请求解决。
猜你喜欢
  • 2020-07-15
  • 2016-10-24
  • 2014-05-23
  • 1970-01-01
  • 2022-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
相关资源
最近更新 更多