Эта концепция была в моих черновиках очень долгое время, я понял, что отсутствие документации по этому поводу все еще приводит к путанице, поэтому я хотел бы опубликовать уроки, извлеченные из моего опыта и понимания того же самого.

Статья предполагает наличие базовых знаний о том, как работает глубокое обучение и их реализации. Предполагается, что есть обученная модель, которая работает на сервере или локальном ноутбуке для прогнозирования.

Теперь, если вы хотите сделать что-то подобное на мобильных устройствах, есть несколько способов, мы обсудим их шаг за шагом. Чтобы взять это с примерной точки зрения, предположим, что у вас есть видео, и вы хотите обработать его с помощью модуля глубокого обучения и получить аналитические метрики, как на выходе.

Все объяснение будет сосредоточено на том, что и чего нельзя делать при реализации приведенной выше блок-схемы на мобильных устройствах.

1. Отправьте данные на сервер для обработки

Идея здесь состоит в том, чтобы создать коммуникационный модуль, который связывается с сервером, отправляет контент на сервер и позволяет серверу выводить данные и отправлять метаданные обратно на устройство.

Преимущества:

Отсутствие суеты между командой разработчиков мобильных приложений и командой по обработке данных, отправка данных и получение данных

Недостатки:

- ›Очень высокая задержка
-› Доступность Интернета, синхронизация с сервером (совсем другая проблема)
- ›Конфиденциальность (нельзя отправлять данные за пределы моего телефона)

Эти недостатки нельзя игнорировать, и это приводит нас к следующей большой идее:

Есть разные способы добиться того же, мы обсудим их один за другим, с их плюсами и минусами. Самый простой способ в этом направлении -

2. Используйте существующие оболочки фреймворков разработчиков.

Мы начнем со знаменитого и начнем с простого рассмотрения фреймворка разработки.

Несколько библиотек в одном направлении:

TensorFlow Lite

Это мобильная версия Tensorflow, поэтому здесь не нужно много времени на обучение, так как документация и поддержка находятся в хорошем состоянии. Обучите модель и запустите логический вывод на мобильном устройстве, как если бы вы работали на своем локальном компьютере.

Преимущества:

- ›Минимальные усилия при преобразовании моделей, ограниченная передача знаний от специалистов по анализу данных и мобильной разработки.
-› Сравнительно быстрее, чем серверный подход
- ›Отсутствие зависимости от платформы

Недостатки:

- ›Большой размер модели
-› Очень медленно по сравнению с ноутбуком.

Caffe2Go:

Раньше это поддерживалось командой Facebook Caffe, а теперь они встроили это как часть PyTorch. Я не работал над последними версиями этого, но я дам свое профилирование на основе своего опыта год назад.

Преимущества:

- ›Опять же, минимальные усилия при переходе от разработки к производству, при условии, если вы работали над Caffe
-› Сравнительно быстрее, чем серверный подход и tenorflow lite
- ›Отсутствие зависимости от платформы

Недостатки:

- ›Большой размер модели
-› Опять же, очень медленно по сравнению с ноутбуком
- ›Очень нестабильно во время моего использования (год назад)

На этом этапе мы значительно улучшили нашу производительность по сравнению с серверным режимом, но это все еще не то, что мы можем использовать из коробки. Основными проблемами, связанными с указанными выше подходами, являются скорость и размер модели,
мы постараемся решить каждый из них индивидуально.

Скорость обработки:

Чтобы решить проблему скорости, мы попробуем пройти по тому же пути, как мы решили ту же проблему на компьютерах, решение было простым, использовать лучшее оборудование, особенно внедрение графического процессора изменило ситуацию.

Точно так же, если мы сможем использовать аппаратное ускорение или определенное оборудование на мобильных устройствах, есть возможность ускорить процесс. Это привело к исследованию того, как эффективно использовать оборудование на мобильных устройствах.
Это приводит к разделению всего аппаратного пространства на два типа:

Управляемое оборудование:

Причина, по которой это можно назвать последовательным, заключается в том, что по вариациям различных моделей нет серьезных изменений в аппаратном аспекте, за исключением нескольких незначительных изменений. Таким образом, разработка конкретных моделей оборудования на устройствах Apple упрощается, что приводит к изучению доступных аппаратных возможностей.

Интересно, что в то время мы познакомились с металлической структурой, которая только что выпустила операции ядра свертки как часть обновления своей инфраструктуры. Мы построили модель вокруг операторов на металлическом каркасе, и она заработала на суперскорости! (Начальная версия 3: 150 мс)

Использование металла сейчас неуместно, учитывая последнюю мобильную платформу Apple для машинного обучения.

CoreML!

Конвертировать - ›Загрузить -› Сделать вывод!

Он поддерживает большинство основных операторов и библиотек. Доступны обертки для конвертации модели практически из всех библиотек. Разрабатывайте в той структуре, которая вас интересует, конвертируйте свою модель в основной формат ML с помощью доступных оболочек, затем загружайте модель и получайте результат, вы можете увидеть результаты всего за 6 строк кода.

Неконтролируемое оборудование.
Здесь можно приобрести Android, так как аппаратное обеспечение сильно различается от производителя к производителю.

Эта платформа сама по себе немного сложна, чтобы решить ее так же, как мы это сделали для Apple. Один из способов, на который мы нацелились для решения этой проблемы, - это аппаратные библиотеки, такие как Qualcomm Neural Processing SDK, который использует дополнительные аппаратные возможности телефонов Snapdragon 820+.

Этот SDK API использует возможности GPU и DSP Snapdragon для ускорения вывода. Процесс такой же, как и в Core ML: обучение в любой среде разработки, преобразование модели и использование ее на устройстве с помощью SDK.

Профилирование!

Этот подход примерно решает наше представление о скорости, по крайней мере, в базовом плане, тем более что повышение скорости может быть выполнено в соответствии с вашим соответствующим приложением.

Размер модели:

По умолчанию размеры модели очень велики, если она напрямую перенесена с сервера на мобильное устройство. Чем больше размер модели, тем больше памяти она потребляет, и все становится значительно сложнее, когда пользователь замечает все это, а вы не хотите заставлять пользователя загружать гигабайты данных каждый раз, когда вы обновляете свою модель. А с большей моделью есть и другие технические трудности.
Итак, решение состоит в уменьшении размера, что приводит нас к следующим интересным подходам.

Квантование:
Преобразуйте значения типа float или double в значения типа int, и это приведет к уменьшению размера модели в 4 раза, с технической точки зрения, все это сделать немного сложно, но , ресурсов вокруг достаточно, чтобы проверить это.

Я нашел статьи Питера Уордена примерно такими же очень полезными в то время, я бы посоветовал всем просмотреть их, прежде чем пытаться использовать существующие на рынке вещи сейчас.

Https://petewarden.com/2017/06/22/what-ive-learned-about-neural-network-quantization/

Несколько месяцев назад даже tenorflow официально выпустил вспомогательные коды для того же

Https://www.tensorflow.org/performance/quantization

Apple Core ML уже начала поддерживать 16-битную точность вместо 32-битной точности по той же причине.

Https://developer.apple.com/documentation/coreml/reeding_the_size_of_your_core_ml_app

Удаление модели.
Удаление неважных весов узлов из модели путем понимания того, какие веса модели не так полезны.

Https://jacobgil.github.io/deeplearning/pruning-deep-learning

Https://arxiv.org/pdf/1611.06440.pdf

Оптимизация сети:
Понимание того, что необходимо, а что нет, является здесь важным аспектом.
Необходимо соответствующим образом оптимизировать сеть, например, заменить полностью связанные свертки на 1d. Есть множество других способов сделать то же самое, если кто-то достаточно хорошо разбирается в их сети.

Заключение:

В заключение я отвечу на заголовок рассказа

Чего нельзя делать?

Не используйте серверный подход, если данные представляют собой изображения / видео. вы можете обойтись без использования сервера для небольших текстов и голосовых данных.

Что делать?

Учитывая мой опыт по всем вышеупомянутым пунктам, не существует единого решения о том, как подойти к проблеме, оно должно полностью основываться на том, какую проблему вы хотите решить.

При этом, если проблема основана на изображении, я настоятельно рекомендую написать свои собственные оболочки для аппаратных библиотек, что дает вам хорошее повышение скорости моделей и поддерживает операции с размером модели, которые вы можете в конечном итоге делает.

PS: Мои эксперименты с tenorflow lite очень старые, пожалуйста, не стесняйтесь экспериментировать с этим снова, поскольку они могли обновить свои модули в соответствии с отраслью.

Возможно, вам будет интересно изучить paddle-mobile, мобильную версию Baidu для их библиотеки. Я еще не работал над этим полностью, но слышал хорошие профилирующие обзоры. Сказав это, библиотека на данный момент нестабильна, насколько я слышал.

Https://github.com/PaddlePaddle/paddle-mobile

Еще одно очень важное предложение, которое я хочу сделать: используйте ONNX в качестве предпочтительного формата для сериализации / десериализации моделей в разработке. Вы будете благодарить меня за это через год или около того.

Https://github.com/onnx/onnx
https://onnx.ai/

MnasNet

Если вы следите за недавними статьями Google, вы, должно быть, заметили там недавнюю статью о поиске архитектуры для мобильного глубокого обучения, это звучит очень интересно, я предлагаю просмотреть статью, это может дать некоторое представление о проектировании вашей сети, чтобы сделать это мобильный эффективный.

Https://arxiv.org/pdf/1807.11626.pdf

Эти мнения полностью основаны на моих экспериментах и ​​опыте год назад, могут даже не сработать для вас. Поэтому, пожалуйста, не стесняйтесь возражать, если содержание будет отклоняться от фактов, я буду более чем счастлив отредактировать его в соответствии с последними стандартами.