MobileNet против SqueezeNet против ResNet50 против Inception v3 против VGG16
Недавно я пытался включить выпуск машинного обучения для разработчиков iOS в свое приложение. Поскольку я впервые использую что-либо, связанное с ML, я очень растерялся, когда начал читать описания различных моделей, которые Apple сделала доступными. Они имеют одинаковое назначение / описание, единственное отличие заключается в фактическом размере файла. В чем разница между этими моделями и как узнать, какая из них лучше всего подходит?
2 ответа
Модели, которые Apple делает доступными, предназначены только для простых демонстрационных целей. В большинстве случаев этих моделей недостаточно для использования в вашем собственном приложении.
Модели на странице загрузки Apple подготовлены для очень конкретной цели: классификации изображений в наборе данных ImageNet. Это означает, что они могут взять изображение и сказать вам, что является "основным" объектом на изображении, но только если это одна из 1000 категорий из набора данных ImageNet.
Обычно это не то, что вы хотите делать в своих собственных приложениях. Если ваше приложение хочет провести классификацию изображений, обычно вы хотите обучить модель по вашим собственным категориям (например, еда или автомобили или что-то еще). В этом случае вы можете взять что-то вроде Inception-v3 (оригинал, а не версию Core ML) и перенастроить его на свои собственные данные. Это дает вам новую модель, которую вам необходимо снова преобразовать в Core ML.
Если ваше приложение хочет сделать что-то кроме классификации изображений, вы можете использовать эти предварительно обученные модели в качестве "экстракторов функций" в более крупной структуре нейронной сети. Но опять же это включает в себя обучение вашей собственной модели (обычно с нуля), а затем преобразование результата в Core ML.
Таким образом, только в очень конкретном случае использования - классификации изображений с использованием 1000 категорий ImageNet - эти модели от Apple полезны для вашего приложения.
Если вы хотите использовать любую из этих моделей, разница между ними заключается в скорости и точности. Меньшие модели являются самыми быстрыми, но также и наименее точными. (По моему мнению, VGG16 не должен использоваться на мобильных устройствах. Он слишком большой и не более точный, чем Inception или даже MobileNet.)
SqueezeNets являются полностью сверточными и используют модули Fire, которые имеют сжатый слой сверток 1x1, который значительно уменьшает параметры, поскольку он может ограничивать количество входных каналов в каждом слое. Это делает SqueezeNets чрезвычайно низкой задержкой, в дополнение к тому, что они не имеют плотных слоев.
MobileNets используют отделимые по глубине извилистые извилины, очень похожие на начальные башни в начале. Это также уменьшает количество параметров и, следовательно, задержку. MobileNets также имеет полезные параметры сжатия модели, которые можно вызвать перед тренировкой, чтобы получить нужный размер. Реализация Keras также может использовать предварительно обученные веса ImageNet.
Другие модели очень глубокие, большие модели. Сокращенное число параметров / стиль свертки используется не для низкой задержки, а просто для возможности обучения очень глубоких моделей, по сути. ResNet ввел остаточные связи между слоями, которые изначально считались ключевыми в обучении очень глубоким моделям. Они не видны в ранее упомянутых моделях с низкой задержкой.