Вступление

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

  • Апрель 2017 г.: Google выпустил MobileNets - легкую нейронную сеть, предназначенную для использования в среде с ограниченными вычислительными возможностями.
  • Июнь 2017 г.: Apple выпустила Core ML, позволяющее запускать модель машинного обучения на мобильных устройствах.

Более того, в последних мобильных устройствах высокого класса внутри находится наконечник графического процессора. На самом деле они работают быстрее, чем мой Mac Book Pro для вычислений машинного обучения.

Глубокое обучение на грани приходит повсюду.

В этой статье я хотел бы представить их в реальном мире и сообщить, насколько быстро они могут работать.

Применение мобильных сетей

Недавно мы разработали новую глубокую нейронную сеть под названием MobileUNet, которая используется для задачи семантической сегментации. Я не буду подробно рассказывать о сети в этой статье, просто упомяну, что она имеет довольно простой дизайн. Как видно из названия, он использует MobileNets в U-Net (рис. 1.). Более подробную информацию вы можете увидеть в репозитории Github. Обратите внимание только на несколько моментов.

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

Когда мы начали его разрабатывать, нашей главной заботой была скорость вывода. Мы знаем, что глубокая нейронная сеть работает немного быстрее с GPU. Но как насчет того, чтобы запустить его на мобильном устройстве?

По этой причине мы приняли идею мобильных сетей. Вот точки MobileNets.

  • Он вводит блок преобразования глубины для ускорения вывода.
  • Он показывает высокую точность и соотношение скорости вывода.
  • У него есть некоторые параметры для управления компромиссом между точностью и скоростью.

Мы смогли получить вполне удовлетворительный результат. Вот пример.

Я хотел бы сообщить более подробную информацию о скорости и точности в следующих главах.

Скорость и точность на мобильном устройстве

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

Все ли свертки, такие как Conv2D, DepthwiseConv2D и Conv2DTranspose, демонстрируют схожую тенденцию скорости в разных процессорах?

Ответ - нет. Если процессор другой, некоторые операции могут быть быстрыми, а другие - медленными. Разницу между CPU и GPU легко понять. Даже среди графических процессоров их оптимизация может быть разной.

На рис. 3. показана скорость обычного блока преобразования и блока преобразования по глубине. Гист доступен здесь.

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

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

В этой статье я сосредоточусь на следующих устройствах.

  • iPhone 6 плюс
  • iPhone 7 плюс
  • iPhone 8 плюс
  • Sony Xperia XZ (Snapdragon 820)

Как уже упоминалось, MobileNets имеет параметр, называемый альфа, для управления компромиссом между скоростью и точностью. Его можно легко применить к MobileUNet, так что MobileUNet имеет такой же параметр. Я выбрал 4 вида альфа (1, 0,75, 0,5 и 0,25) и 4 вида размера изображения (224, 192, 160, 128).

Вот общая скорость каждого условия.

Удивительно, но победителем оказался iPhone 7 plus, а не iPhone 8 plus. Я рассмотрю это позже. iPhone 7 plus действительно быстрый. Это не проблема для приложений в реальном времени в любых условиях. Пока iPhone 6 plus и Snapdragon 820 не так быстры, особенно с большой альфой. Таким образом, мы должны тщательно выбирать наилучшие условия, учитывая точность.

Вот точность для каждого условия.

Когда альфа составляет 0,25, точность резко падает. В других условиях точность постепенно снижается в зависимости от размера и альфа-канала. Итак, альфа 0,25 отклонена от нашей цели.

Это скорость и точность Snapdragon 820.

Он показывает нам несколько вариантов. Если скорость очень важна для нашего приложения, мы можем выбрать левый верхний, который имеет 0,875 IoU при условии размера 128 и альфа 0,5. Если точность важна, также возможен выбор другого условия, например размер 192 и альфа 0,5.

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

Наконец, давайте посмотрим, почему iPhone 7 Plus быстрее iPhone 8 Plus.

Как я уже писал выше, какие операции быстрые или нет, это зависит от каждого процессора. Это означает, что графический процессор iPhone 7 plus совместим с нашей сетью лучше, чем графический процессор iPhone 8 plus. Чтобы понять это, я провел простой эксперимент.

Я разделил MobileUNet на кодировщик и декодер, а затем измерил производительность для каждого из них.

Судя по всему, декодер - это узкое место в производительности iPhone 8 plus. Conv2DTranspose используется только в части декодера. Итак, Conv2DTranspose может быть причиной этой разницы. Графический процессор iPhone 7 plus будет оптимизировать Conv2DTranspose, тогда как графический процессор iPhone 8 - нет. В этом случае другие методы повышения частоты дискретизации могут быть вариантом для большего повышения производительности, хотя я еще не пробовал их.

Скрипты, используемые для тестирования в Android и iOS, доступны на Gist.

Заключение

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

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

Само измерение не так уж и сложно. Использовать обученную модель не нужно. Вы можете использовать необученную модель и легко определить узкое место в производительности.