我正在为这个转移学习个人项目开发一个特征提取器,而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
所以,我的预感是因为这些原因很慢:
我尝试过的事情:
有没有关于如何加快预测功能的想法?我需要通过至少10,000张图片运行这个,并且由于项目的性质,我希望保留尽可能多的进入模型之前的原始数据(将与其他特征提取模型进行比较)
我的所有图像文件都保存在本地,但我可以尝试设置云计算机并将代码移到那里以支持GPU运行。
问题只是我在一个小巧的CPU上运行VGG16模型吗?
非常感谢指导。
答案 0 :(得分:2)
您的模型存在许多问题。主要问题当然是机器速度很慢,但由于你无法改变这一点,我将就如何加快计算提出一些建议:
VGG16 是比较旧的架构。这里的主要问题是所谓的张量(特征图的面积乘以特征的数量)减少的速度非常慢。我建议你使用更现代的架构,例如ResNet50或Inception v3,因为他们拥有所谓的词干,这使得张量内部的张力变得非常小。因此,你的速度应该受益。还有一个名为MobileNet的轻型架构,看起来非常适合您的任务。
缩小您的图片 - 大小为(480, 640)
,您的图片比默认VGG
输入大6倍。这使得所有计算速度慢6倍。您可以尝试先下采样图像,然后使用特征提取器。