MobileNet vs SqueezeNet vs ResNet50 vs Inception v3 vs VGG16

MobileNet vs SqueezeNet vs ResNet50 vs Inception v3 vs VGG16

我最近一直在考虑将 iOS 开发人员的机器学习版本与我的应用程序结合起来。由于这是我第一次使用任何与 ML 相关的东西,所以当我开始阅读 Apple 提供的不同模型描述时,我感到非常迷茫。它们具有相同的 purpose/description,唯一的区别是实际文件大小。这些模型之间有什么区别,您如何知道哪一个最适合?

A​​pple 提供的模型仅用于简单的演示目的。大多数时候,这些模型不足以用于您自己的应用程序。

A​​pple 下载页面上的模型是为一个非常特定的目的而训练的:ImageNet 数据集上的图像分类。这意味着他们可以拍摄图像并告诉您图像中的 "main" 对象是什么,但前提是它是 ImageNet 数据集中的 1,000 个类别之一。

通常,这不是您希望在自己的应用程序中执行的操作。如果您的应用程序想要进行图像分类,通常您想要根据自己的类别(例如食物或汽车或其他)训练模型。在那种情况下,您可以采用类似 Inception-v3(原始版本,而非 Core ML 版本)的东西,并根据您自己的数据重新训练它。这为您提供了一个新模型,然后您需要再次将其转换为 Core ML。

如果您的应用想要做图像分类以外的事情,您可以将这些预训练模型用作更大的神经网络结构中的 "feature extractors"。但这同样涉及训练您自己的模型(通常是从头开始),然后将结果转换为 Core ML。

因此,只有在非常具体的用例中——使用 1,000 个 ImageNet 类别进行图像分类——这些 Apple 提供的模型对你的应用有用。

如果您确实想使用这些模型中的任何一个,它们之间的区别在于速度与准确性。较小的模型最快但也最不准确。 (在我看来,VGG16 不应该用在移动设备上。它太大了,而且它并不比 Inception 甚至 MobileNet 更准确。)

SqueezeNets 是完全卷积的,并使用具有 1x1 卷积挤压层的 Fire 模块,这大大减少了参数,因为它可以限制每层的输入通道数量。这使得 SqueezeNet 的延迟极低,而且它们没有密集层。

MobileNets 利用深度可分离卷积,与 inception 中的 inception towers 非常相似。这些也减少了参数的数量,从而减少了延迟。 MobileNets 还具有有用的模型收缩参数,您可以在训练前调用这些参数以使其达到您想要的精确大小。 Keras 实现也可以使用 ImageNet 预训练权重。

其他模型非常深,大模型。减少参数数量/卷积样式并不是为了低延迟,而是为了能够训练非常深的模型,本质上。 ResNet 在层之间引入了残差连接,这最初被认为是训练非常深的模型的关键。这些在前面提到的低延迟模型中是看不到的。