哪个是最快的图像预训练模型?

数据挖掘 深度学习 计算机视觉 迁移学习 成立之初 微调
2021-10-07 10:46:28

我一直在使用预训练模型,只是想知道所有计算机视觉预训练模型中最快的前向传播模型。我一直在尝试在一次性学习中实现更快的处理,并尝试在单个图像上使用少数模型进行前向传播,结果如下:

  • VGG16:4.857 秒
  • ResNet50:0.227 秒
  • 起始时间:0.135 秒

您能说出目前可用的最快的预训练模型以及上述模型之间的巨大时间消耗差异吗?

1个回答

答案将取决于您的硬件和您处理的图像等一些因素。此外,我们应该区分您是在训练模式还是推理模式下通过网络进行单次运行。在前者中,附加参数是预先计算和缓存的,并且使用了几个层,例如 dropout,这些层在推理过程中被简单地忽略了。我将假设您只想为单个图像生成单个预测,因此我们正在讨论推理时间。

因素

基本的相关性将是:

  • 更多参数(即可学习的权重,更大的网络) - 比具有更少参数的模型慢
  • 更多循环单元 - 比卷积网络慢,比全连接网络慢1
  • 复杂的激活函数 - 比简单的激活函数慢,例如ReLU
  • 更深的网络 - 比浅层网络(具有相同数量的参数)慢,因为在 GPU 上并行运行更少

在列出了所需的最终推理时间(产生一次通过网络的前向运行所需的时间)中的几个因素后,我猜想 MobileNetV2 可能是最快的预训练模型之一(可在 Keras 中获得)。我们可以从下表中看到,这个网络的内存占用很小,只有 14 兆字节,参数约为 350 万。将其与您的 VGG 测试进行比较,大约 1.38 亿... 40 倍!此外,MobileNetV2 的主要工作层是一个 conv 层——它们本质上是残差网络的聪明和更小的版本。

Keras 预训练模型

额外注意事项

我包含上面整个表格的原因是为了强调内存占用量小和推理时间快,这是有代价的:低准确度!

如果您计算 top-5 准确度与参数数量(通常与内存)的比率,您可能会在推理时间和性能之间找到一个很好的平衡。


1看看这个 CNNs 与 Recurrent 模块的比较