Keras VGG16预测速度缓慢

时间:2017-10-12 21:16:38

标签: python performance machine-learning keras

我正在为这个转移学习个人项目开发一个特征提取器,而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)。批量大小为1的图像需要8秒,a 批量大小为4需要32。

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

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

问题只是我在一个小巧的CPU上运行VGG16模型吗?

非常感谢指导。

1 个答案:

答案 0 :(得分:2)

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

  1. VGG16 是比较旧的架构。这里的主要问题是所谓的张量(特征图的面积乘以特征的数量)减少的速度非常慢。我建议你使用更现代的架构,例如ResNet50Inception v3,因为他们拥有所谓的词干,这使得张量内部的张力变得非常小。因此,你的速度应该受益。还有一个名为MobileNet的轻型架构,看起来非常适合您的任务。

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