【问题标题】:Keras VGG16 predict speed slowKeras VGG16 预测速度慢
【发布时间】:2018-03-24 22:44:11
【问题描述】:

我正在为这个迁移学习个人项目开发一个特征提取器,而 Kera 的 VGG16 模型的预测功能似乎很慢(一批 4 张图像需要 31 秒)。我确实预计它会很慢,但不确定预测函数是否比它应该的慢。

data = DataGenerator() 
data = data.from_csv(csv_path=csv_file,
                     img_dir=img_folder,
                     batch_size=batch)

#####################################################
conv_base = VGG16(include_top=False, 
                  weights='imagenet', 
                  input_shape=(480, 640, 3))

model = Sequential()
model.add(conv_base)
model.add(MaxPooling2D(pool_size=(3, 4)))
model.add(Flatten())
######################################################

for inputs, y in data:
    feature_batch = model.predict(inputs)

    yield feature_batch, y

所以,我的直觉是它很慢,原因如下:

  • 我的输入数据有点大(加载 (480, 640, 3) 大小的图像)
  • 我在较弱的 CPU (M3-6Y30 @ 0.90GHz) 上运行
  • 我在特征提取器的末尾有一个展平操作。

我尝试过的事情:

  • 其他 StackOverFlow 帖子建议将最大池层添加到 减小特征尺寸/去除多余的零。我让我 考虑一个相当大的最大池窗口(从而减少特征大小 显着,但我的预测时间增加了。
  • 批处理不会缩短时间,这可能是显而易见的 使用我的 M3 CPU)。一张图片的批量大小需要 8 秒,一个 批量大小为 4 需要 32。

关于如何加快预测功能有什么想法吗?我需要运行至少 10,000 张图像,并且由于项目的性质,我希望尽可能多地保留在进入模型之前尽可能的原始数据(将与其他特征提取模型进行比较)

我所有的图像文件都保存在本地,但我可以尝试设置云计算机并将我的代码移到那里以在 GPU 支持下运行。

问题仅仅是我在极小的 CPU 上运行 VGG16 模型吗?

非常感谢您的指导。

【问题讨论】:

  • 0.9GHz 非常非常非常弱

标签: python performance machine-learning keras


【解决方案1】:

您的模型存在许多问题。主要问题当然是非常慢的机器,但由于您无法在此处更改,我将就如何加快计算速度提出一些建议:

  1. VGG16 是比较老的架构。这里的主要问题是所谓的张量体积(特征映射的面积乘以特征的数量)的减少非常缓慢。我建议您使用更现代的架构,例如ResNet50Inception v3 因为它们具有所谓的茎,它使内部张量非常快速地变小。您的速度应该会因此而受益。还有一个名为MobileNet 的非常轻量级的架构,看起来非常适合您的任务。

  2. 对图像进行下采样 - 大小为 (480, 640) 时,您的图像比默认的 VGG 输入大 6 倍。这使所有计算慢了 6 倍。您可以尝试先对图像进行下采样,然后使用特征提取器。

【讨论】:

  • 这是有用的建议,确实有帮助,非常感谢!我还意识到,当我从控制台(而不是 Python Notebook)运行我的模型时,我收到了一条警告,提示我使用我的机器设置 SSE 指令以加快在 CPU 上运行的 Tensorflow 的计算速度。这是其他任何感兴趣的人的相关 StackOverFlow 链接:stackoverflow.com/questions/43134753/…
猜你喜欢
  • 2020-02-11
  • 1970-01-01
  • 2017-10-13
  • 2022-12-04
  • 2017-05-11
  • 2020-02-11
  • 2018-05-07
  • 2020-01-27
  • 2017-09-09
相关资源
最近更新 更多