Изменения

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

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

2043 байта добавлено, 00:44, 24 января 2021
Вес современных нейронных сетей
Машинное обучение, как известно, очень тесно связано с нашей жизнью. Буквально каждая область жизни человека нашла в себе нишу для , и во многих областях используются разные модели машинного обучения. Конечно же, Эти модели нужно где -то запускать и сохранять. Самый простой выход из ситуации {{---}} сервер, на котором будет находиться наша модель, и который будет приниматься наши принимать запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Давайте рассмотрим машинное обучение на телефонах.
== Задачи машинного обучения на телефонах ==
{{main|Рекомендательные_системы}}
Конечно же, самое первое, что может прийти в голову про применения применение машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней. Пример приложения:*Spotify*TikTok
=== Распознавание фото, текста и видео ===
{{main|Компьютерное зрение}}
Распознавание фото и видео на мобильных телефонах мало чем отличается от обычных компьютерных методов, только цели немного другие. Например, некоторые мобильные телефоны распознают владельца через Face ID с помощью фронтальную камеруфронтальной камеры. Есть приложения для определения возраста, пола.
Если же рассмотреть распознавание текста, то и у него тоже есть большое количество применений {{---}} сканирование чеков, кредитные карты, документы, переводить в реальном времени иностранные слова.
Существует несколько известных библиотек для работы с изображениями в мобильных приложениях: 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
== Запуск моделей машинного обучения на мобильных телефонах ==
Для запуска [[Глубокое_обучение|глубоких моделей]] необходимо наличием мощных вычислительных ресурсов и большого объема учебных данных. Поэтому построение модели может осуществляться с помощью высокопроизводительных центральных (англ. central processing unit, CPU<ref>[https://en.wikipedia.org/wiki/Central_processing_unit Central processing unit]</ref>) и графических (англ. graphics processing unit, GPU<ref>[https://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]</ref>) процессоров, а после построения ее можно запустить на мобильном устройстве с гораздо меньшей вычислительной мощностью на CPU, интегральных схем схемах специального назначения (англ. [https://en.wikipedia.org/wiki/Application-specific_integrated_circuit Application specific integrated circuit, ASIC]), программируемых пользователем вентильных матриц(англ. [https://en.wikipedia.org/wiki/Field-programmable_gate_array Field programmable gate array, FPGA]) или мобильных GPU. На рисунках 1-4 представлены модели взаимодействия с соответcтвующими вычислительными устройствами.
=== CPU ===
Хотя процессоры могут быть громоздкими неудачным решением для построения современных моделей глубокого обучения, когда учебные данные оченьбольшие, они являются приемлемым вариантом для обучения или адаптации моделей к небольшим объемам данных, а также для развертывания предварительно построенных моделей глубокого обучения. Очевидным преимуществом развертывания глубокого обучения на CPU является то, в отличие от других типов вычислительных устройств ими оснащен любой современный телефон или планшет. Кроме того, эти мобильные устройства часто поставляются с мощными процессорами и имеют широкий выбор встроенных датчиков. Это означает отсутствие дополнительных затрат на аппаратное обеспечение и таким образом обеспечение большего количества приложений ИИ для потенциально огромного рынка. Real-time приложения быть развернуты могут быть развернуты на стандартном процессоре с минимальными затратами или без дополнительных усилий. Кроме того CPU в современных мобильных устройвах устройствах столь же мощны , как и в компьютерах, что позволяет эффективно использовать их для данных целей.
[[Файл:CPU.jpeg|800px|thumb|center| Рисунок 1. CPU. [https://habr.com/ru/post/455353/ Источник]]]
ASIC {{---}} интегральная схема конкретно под поставленную задачу. Примером можем служить интегральная схема реализующая необходимую нейросеть. За счёт этого, энергопотребление становится меньше, а скорость работы операций выше по сравнению с CPU, GPU и FPGA.Также, большинство вычислительных узлов может работать параллельно, только зависимости по данным и неравномерность вычислений на разных уровнях сети могут помешать постоянно задействовать все [https://en.wikipedia.org/wiki/Arithmetic_logic_unit ALU]. Самым большим недостатком является потеря настраиваемости сети, так как настрока параметров будет связана с изменением интегральной схемы. На текущее время, существует множество ASIC, разработанных для нейронных сетей, например [https://en.wikipedia.org/wiki/Tensor_Processing_Unit TPU] разработанная Google специально для нейросетевого машинного обучения Google.
[[Файл:ASIC.jpeg|800px|thumb|center| Рисунок 4. ASIC. [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++, который принимает на вход данныеобъект класса выборки, преобразует их в модель и сохраняет их в файл:
#include "zdl.h"
}
}
Короткий пример использования ITensors
===Huawei Ai===
Этот процессор заточен под [[Компьютерное_зрение|компьютерное зрение]], распознавание речи и [[Обработка_естественного_языка|интерпретацию естественного языка]].
Как можно заметить по картинке, здесь нет никакого обучения, мы берем уже обученную модель и пользуемся ею. Огромное количество классов, предназначенных для различных задач. HiAI SDK дает доступ к заточенному под операции над матрицами NPU. Таким образом, оптимизируются нейронные сети, которые используют матрицы.
Пример кодана Java, распознающего, одинаковые ли люди изображены на картинке.
import com.huawei.hiai.vision.face.FaceComparator;// Класс для сравнивания лиц
===NeuroPilot SDK===
Процессор заточен под [[Задача_нахождения_объектов_на_изображенииОпределение_положения_человека|отслеживание поз множества людей]], [[Задача_нахождения_объектов_на_изображении|идентификацию множества объектов]], [https://www.kdnuggets.com/2018/10/semantic-segmentation-wiki-applications-resources.html семантическую сегментацию], [[Сегментация_изображений|обработку изображений]]. NeuroPilot SDK позволяет решать ML-задачи с помощью APU + GPU. APU заточен под модели глубоких нейронных сетей. Обеспечивает аппаратное ускорение для [[Сверточные_нейронные_сети|свертки]], полностью связанных полносвязных нейронных сетей (то есть [[Практики_реализации_нейронных_сетей|нейронных сетей без дропаута]]), функции активации.
У данной разработки есть три пути развития:
Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5).
Затем данный пакет передается уже программе на Swift, и она обрабатывает его. Пример кодана Swift:
}
Для работы с кодом и результатами с CoreSDK у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6)
==См. также==
* [[Распознавание_речи|Распознавание речи]]
* [[Компьютерное_зрение|Компьютерное зрение]]
 
==Примечания==
 
[[Категория: Машинное обучение]] [[Категория: Мобильная разработка]]
==Источники информации==
# [https://habr.com/ru/post/237589/ habr.com] - использование Pocketsphinx.
# [https://www.osp.ru/os/2017/03/13052701 osp.ru] - глубинный анализ данных с сенсоров.
 
==Примечания==
 
[[Категория: Машинное обучение]] [[Категория: Мобильная разработка]]
Анонимный участник

Навигация