Изменения

Перейти к: навигация, поиск

Машинное обучение на мобильных телефонах

1471 байт добавлено, 00:44, 24 января 2021
Вес современных нейронных сетей
Машинное обучение, как известно, очень тесно связано с нашей жизнью. Буквально каждая область жизни человека нашла в себе нишу для , и во многих областях используются разные модели машинного обучения. Конечно же, Эти модели нужно где-то запускать и сохранять. Самый простой выход из ситуации {{---}} сервер, на котором будет находиться наша модель, и который будет принимать запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Давайте рассмотрим машинное обучение на телефонах.
== Задачи машинного обучения на телефонах ==
Конечно же, самое первое, что может прийти в голову про применение машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней.
 
Пример приложения:
*Spotify
*TikTok
=== Распознавание фото, текста и видео ===
Существует несколько известных библиотек для работы с изображениями в мобильных приложениях: Tesseract<ref>[https://github.com/tesseract-ocr/tesseract Tesseract]</ref>, OpenCV<ref>[https://opencv.org/ OpenCV]</ref>, Mobile Vision Google<ref>[https://developers.google.com/vision Mobile Vision Google]</ref>, ML Kit<ref>[https://developers.google.com/ml-kit ML Kit]</ref>. Изображения легко передавать через сеть, так что можно обрабатывать их и на веб-серверах.
 
Пример приложения:
*Google Lens
*Pinterest
=== Распознавание звука ===
Для распознавания речи есть библиотека pocketsphinx<ref>[https://github.com/cmusphinx/pocketsphinx pocketsphinx]</ref>
 
Пример приложения:
*Shazam
*Google Assistant
=== Анализ данных с сенсоров ===
Телефон получает данные об окружающем мире с помощью специальных датчиков и сенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент.
 
Пример приложения:
*Карты Google
*Gravity Screen
=== Навигация ===
Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения.
 
Пример приложения:
*Карты Google
== Запуск моделей машинного обучения на мобильных телефонах ==
=== CPU ===
Хотя процессоры могут быть громоздкими неудачным решением для построения современных моделей глубокого обучения, когда учебные данные оченьбольшие, они являются приемлемым вариантом для обучения или адаптации моделей к небольшим объемам данных, а также для развертывания предварительно построенных моделей глубокого обучения. Очевидным преимуществом развертывания глубокого обучения на CPU является то, в отличие от других типов вычислительных устройств ими оснащен любой современный телефон или планшет. Кроме того, мобильный мобильные устройства часто поставляются с мощными процессорами и имеют широкий выбор встроенных датчиков. Это означает отсутствие дополнительных затрат на аппаратное обеспечение и таким образом обеспечение большего количества приложений ИИ для потенциально огромного рынка. Real-time приложения могут быть развернуты на стандартном процессоре с минимальными затратами или без дополнительных усилий. Кроме того CPU в современных мобильных устройвах устройствах столь же мощны , как и в компьютерах, что позволяет эффективно использовать их для данных целей.
[[Файл:CPU.jpeg|800px|thumb|center| Рисунок 1. CPU. [https://habr.com/ru/post/455353/ Источник]]]
== Вес современных нейронных сетей ==
В нынешних реалиях глубокие нейронные сети могут весить порядка сотен мегабайт, в то же время современные фреймворки , например , MobileNet позволяют строить нейросети значительно меньшего размера при небольшой потере точности, такие сети отлично подходят для мобильных устройств. Результаты использования MobileNet приведены в сравнении с другими нейросетями приведены в таблице ниже.
{| class="wikitable" style="width=50%"
! model Модель || input size Размер входа || param memory Размер параметров || future memoryРазмер признаков || Метод || Флопс || Тип модели || Набор данных
|-
| [https://github.com/albanie/convnet-burden/blob/master/reports/rfcn-res50-pascal.md rfcn-res50-pascal] || 600 x 850 || 122 MB || 1 GB|| [https://arxiv.org/abs/1605.06409 r-fcn] || 79 GFLOPS || [https://arxiv.org/abs/1512.03385 resnet50] || [http://host.robots.ox.ac.uk/pascal/VOC/ pascal VOC]
|-
| [https://github.com/albanie/convnet-burden/blob/master/reports/rfcn-res101-pascal.md rfcn-res101-pascal] || 600 x 850 || 194 MB || 2 GB|| [https://arxiv.org/abs/1605.06409 r-fcn] || 117 GFLOPS || [https://arxiv.org/abs/1512.03385 resnet101] || [http://host.robots.ox.ac.uk/pascal/VOC/ pascal VOC]
|-
| [https://github.com/albanie/convnet-burden/blob/master/reports/ssd-pascal-vggvd-300.md ssd-pascal-vggvd-300] || 300 x 300 || 100 MB || 116 MB|| [https://link.springer.com/chapter/10.1007%2F978-3-319-46448-0_2 ssd] || 31 GFLOPS || [https://arxiv.org/abs/1409.1556 vvgd] || [http://host.robots.ox.ac.uk/pascal/VOC/ pascal VOC]
|-
| [https://github.com/albanie/convnet-burden/blob/master/reports/ssd-pascal-vggvd-512.md ssd-pascal-vggvd-512] || 512 x 512 || 104 MB || 337 MB || [https://link.springer.com/chapter/10.1007%2F978-3-319-46448-0_2 ssd] || 91 GFLOPS || [https://arxiv.org/abs/1409.1556 vvgd] || [http://host.robots.ox.ac.uk/pascal/VOC/ pascal VOC]
|-
| [https://github.com/albanie/convnet-burden/blob/master/reports/ssd-pascal-mobilenet-ft.md ssd-pascal-mobilenet-ft] || 300 x 300 || 22 MB || 37 MB|| [https://link.springer.com/chapter/10.1007%2F978-3-319-46448-0_2 ssd] || 1 GFLOPS || [https://arxiv.org/abs/1704.04861 mobilenets] || [http://host.robots.ox.ac.uk/pascal/VOC/ pascal VOC]
|-
| [https://github.com/albanie/convnet-burden/blob/master/reports/faster-rcnn-vggvd-pascal.md aster-rcnn-vggvd-pascal] || 600 x 850 || 523 MB || 600 MB|| [http://papers.nips.cc/paper/5638-faster-r-cnn-towards-real-time-object-detection-with-region-proposal-networks faster-rcnn] || 172 GFLOPS || [https://arxiv.org/abs/1409.1556 vvgd] || [http://host.robots.ox.ac.uk/pascal/VOC/ pascal VOC]
|-
|}
|}
Разработчики данного процессора делают упор на сверточные сети, однако там встречаются почти все известные модели машинного обучения. Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает на берет объект класса модели Snapdragon Neural Processing Engine (SNPE)выборки, преобразует их в модель и сохраняет их в файл:
#include "zdl.h"
Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5).
Затем данный пакет передается уже программе на Swift, и она обрабатывает его. Пример кодана Swift:
}
Для работы с кодом и результатами с CoreSDK у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6)
==См. также==
Анонимный участник

Навигация