Редактирование: Машинное обучение на мобильных телефонах
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | Машинное обучение, как известно, очень тесно связано с нашей жизнью | + | Машинное обучение, как известно, очень тесно связано с нашей жизнью. Буквально каждая область жизни человека нашла в себе нишу для машинного обучения. Конечно же, модели нужно где-то запускать и сохранять. Самый простой выход из ситуации {{---}} сервер, на котором будет находиться наша модель, и который будет принимать запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Давайте рассмотрим машинное обучение на телефонах. |
== Задачи машинного обучения на телефонах == | == Задачи машинного обучения на телефонах == | ||
Строка 8: | Строка 8: | ||
Конечно же, самое первое, что может прийти в голову про применение машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней. | Конечно же, самое первое, что может прийти в голову про применение машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней. | ||
− | |||
− | |||
− | |||
− | |||
=== Распознавание фото, текста и видео === | === Распознавание фото, текста и видео === | ||
Строка 23: | Строка 19: | ||
Существует несколько известных библиотек для работы с изображениями в мобильных приложениях: 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>. Изображения легко передавать через сеть, так что можно обрабатывать их и на веб-серверах. | Существует несколько известных библиотек для работы с изображениями в мобильных приложениях: 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>. Изображения легко передавать через сеть, так что можно обрабатывать их и на веб-серверах. | ||
− | |||
− | |||
− | |||
− | |||
=== Распознавание звука === | === Распознавание звука === | ||
Строка 35: | Строка 27: | ||
Для распознавания речи есть библиотека pocketsphinx<ref>[https://github.com/cmusphinx/pocketsphinx pocketsphinx]</ref> | Для распознавания речи есть библиотека pocketsphinx<ref>[https://github.com/cmusphinx/pocketsphinx pocketsphinx]</ref> | ||
− | |||
− | |||
− | |||
− | |||
=== Анализ данных с сенсоров === | === Анализ данных с сенсоров === | ||
Строка 97: | Строка 85: | ||
Телефон получает данные об окружающем мире с помощью специальных датчиков и сенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент. | Телефон получает данные об окружающем мире с помощью специальных датчиков и сенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент. | ||
− | |||
− | |||
− | |||
− | |||
=== Навигация === | === Навигация === | ||
Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения. | Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения. | ||
− | |||
− | |||
− | |||
== Запуск моделей машинного обучения на мобильных телефонах == | == Запуск моделей машинного обучения на мобильных телефонах == | ||
Строка 116: | Строка 97: | ||
=== CPU === | === CPU === | ||
− | Хотя процессоры могут быть | + | Хотя процессоры могут быть громоздкими для построения современных моделей глубокого обучения, когда учебные данные очень |
− | большие, они являются приемлемым вариантом для обучения или адаптации моделей к небольшим объемам данных, а также для развертывания предварительно построенных моделей глубокого обучения. Очевидным преимуществом развертывания глубокого обучения на CPU является то, в отличие от других типов вычислительных устройств ими оснащен любой современный телефон или планшет. Кроме того, | + | большие, они являются приемлемым вариантом для обучения или адаптации моделей к небольшим объемам данных, а также для развертывания предварительно построенных моделей глубокого обучения. Очевидным преимуществом развертывания глубокого обучения на CPU является то, в отличие от других типов вычислительных устройств ими оснащен любой современный телефон или планшет. Кроме того, мобильный устройства часто поставляются с мощными процессорами и имеют широкий выбор встроенных датчиков. Это означает отсутствие дополнительных затрат на аппаратное обеспечение и таким образом обеспечение большего количества приложений ИИ для потенциально огромного рынка. Real-time приложения быть развернуты могут быть развернуты на стандартном процессоре с минимальными затратами или без дополнительных усилий. Кроме того CPU в современных мобильных устройвах столь же мощны как и в компьютерах, что позволяет эффективно использовать их для данных целей. |
[[Файл:CPU.jpeg|800px|thumb|center| Рисунок 1. CPU. [https://habr.com/ru/post/455353/ Источник]]] | [[Файл:CPU.jpeg|800px|thumb|center| Рисунок 1. CPU. [https://habr.com/ru/post/455353/ Источник]]] | ||
Строка 143: | Строка 124: | ||
− | ASIC {{---}} интегральная схема конкретно под поставленную задачу. Примером можем служить интегральная схема реализующая необходимую нейросеть. За счёт этого, энергопотребление становится меньше, а скорость работы операций выше по сравнению с CPU, GPU и FPGA. Также, большинство вычислительных узлов может работать параллельно, только зависимости по данным и неравномерность вычислений на разных уровнях сети могут помешать постоянно задействовать все [https://en.wikipedia.org/wiki/Arithmetic_logic_unit ALU]. Самым большим недостатком является потеря настраиваемости сети, так как настрока параметров будет связана с изменением интегральной схемы. На текущее время, существует множество ASIC, разработанных для нейронных сетей, например [https://en.wikipedia.org/wiki/Tensor_Processing_Unit TPU] разработанная | + | ASIC {{---}} интегральная схема конкретно под поставленную задачу. Примером можем служить интегральная схема реализующая необходимую нейросеть. За счёт этого, энергопотребление становится меньше, а скорость работы операций выше по сравнению с CPU, GPU и FPGA.Также, большинство вычислительных узлов может работать параллельно, только зависимости по данным и неравномерность вычислений на разных уровнях сети могут помешать постоянно задействовать все [https://en.wikipedia.org/wiki/Arithmetic_logic_unit ALU]. Самым большим недостатком является потеря настраиваемости сети, так как настрока параметров будет связана с изменением интегральной схемы. На текущее время, существует множество ASIC, разработанных для нейронных сетей, например [https://en.wikipedia.org/wiki/Tensor_Processing_Unit TPU] разработанная специально для нейросетевого машинного обучения Google. |
[[Файл:ASIC.jpeg|800px|thumb|center| Рисунок 4. ASIC. [https://habr.com/ru/post/455353/ Источник]]] | [[Файл:ASIC.jpeg|800px|thumb|center| Рисунок 4. ASIC. [https://habr.com/ru/post/455353/ Источник]]] | ||
Строка 158: | Строка 139: | ||
== Вес современных нейронных сетей == | == Вес современных нейронных сетей == | ||
− | В нынешних реалиях глубокие нейронные сети могут весить порядка сотен мегабайт, в то же время современные фреймворки | + | В нынешних реалиях глубокие нейронные сети могут весить порядка сотен мегабайт, в то же время современные фреймворки например MobileNet позволяют строить нейросети значительно меньшего размера при небольшой потере точности, такие сети отлично подходят для мобильных устройств. Результаты использования MobileNet приведены в сравнении с другими нейросетями приведены в таблице ниже. |
{| class="wikitable" style="width=50%" | {| class="wikitable" style="width=50%" | ||
− | ! | + | ! model || input size || param memory || future memory |
|- | |- | ||
− | | | + | | rfcn-res50-pascal || 600 x 850 || 122 MB || 1 GB |
|- | |- | ||
− | | | + | | rfcn-res101-pascal || 600 x 850 || 194 MB || 2 GB |
|- | |- | ||
− | | | + | | ssd-pascal-vggvd-300 || 300 x 300 || 100 MB || 116 MB |
|- | |- | ||
− | | | + | | ssd-pascal-vggvd-512 || 512 x 512 || 104 MB || 337 MB |
|- | |- | ||
− | | | + | | ssd-pascal-mobilenet-ft|| 300 x 300 || 22 MB || 37 MB |
|- | |- | ||
− | | | + | | aster-rcnn-vggvd-pascal || 600 x 850 || 523 MB || 600 MB |
|- | |- | ||
|} | |} | ||
Строка 211: | Строка 192: | ||
|} | |} | ||
− | Разработчики данного процессора делают упор на сверточные сети, однако там встречаются почти все известные модели машинного обучения. Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает | + | Разработчики данного процессора делают упор на сверточные сети, однако там встречаются почти все известные модели машинного обучения. Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает на вход данные, преобразует их в модель и сохраняет их в файл: |
#include "zdl.h" | #include "zdl.h" | ||
Строка 252: | Строка 233: | ||
} | } | ||
} | } | ||
+ | Короткий пример использования ITensors | ||
===Huawei Ai=== | ===Huawei Ai=== | ||
− | Этот процессор заточен под [[Компьютерное_зрение|компьютерное зрение]], распознавание речи и [[Обработка_естественного_языка|интерпретацию естественного языка]] | + | Этот процессор заточен под [[Компьютерное_зрение|компьютерное зрение]], распознавание речи и [[Обработка_естественного_языка|интерпретацию естественного языка]] |
Как можно заметить по картинке, здесь нет никакого обучения, мы берем уже обученную модель и пользуемся ею. Огромное количество классов, предназначенных для различных задач. HiAI SDK дает доступ к заточенному под операции над матрицами NPU. Таким образом, оптимизируются нейронные сети, которые используют матрицы. | Как можно заметить по картинке, здесь нет никакого обучения, мы берем уже обученную модель и пользуемся ею. Огромное количество классов, предназначенных для различных задач. HiAI SDK дает доступ к заточенному под операции над матрицами NPU. Таким образом, оптимизируются нейронные сети, которые используют матрицы. | ||
− | Пример кода | + | Пример кода, распознающего, одинаковые ли люди изображены на картинке. |
import com.huawei.hiai.vision.face.FaceComparator;// Класс для сравнивания лиц | import com.huawei.hiai.vision.face.FaceComparator;// Класс для сравнивания лиц | ||
Строка 295: | Строка 277: | ||
===NeuroPilot SDK=== | ===NeuroPilot SDK=== | ||
− | Процессор заточен под [[ | + | Процессор заточен под [[Задача_нахождения_объектов_на_изображении|отслеживание поз множества людей]], идентификацию множества объектов, [https://www.kdnuggets.com/2018/10/semantic-segmentation-wiki-applications-resources.html семантическую сегментацию], [[Сегментация_изображений|обработку изображений]]. NeuroPilot SDK позволяет решать ML-задачи с помощью APU + GPU. APU заточен под модели глубоких нейронных сетей. Обеспечивает аппаратное ускорение для [[Сверточные_нейронные_сети|свертки]], полностью связанных нейронных сетей (то есть [[Практики_реализации_нейронных_сетей|нейронных сетей без дропаута]]), функции активации. |
У данной разработки есть три пути развития: | У данной разработки есть три пути развития: | ||
Строка 312: | Строка 294: | ||
Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5). | Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5). | ||
− | Затем данный пакет передается уже программе, и она обрабатывает его. Пример кода | + | Затем данный пакет передается уже программе на Swift, и она обрабатывает его. Пример кода: |
Строка 340: | Строка 322: | ||
} | } | ||
− | Для работы с кодом и результатами у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6) | + | Для работы с кодом и результатами с CoreSDK у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6) |
==См. также== | ==См. также== | ||
Строка 349: | Строка 331: | ||
* [[Распознавание_речи|Распознавание речи]] | * [[Распознавание_речи|Распознавание речи]] | ||
* [[Компьютерное_зрение|Компьютерное зрение]] | * [[Компьютерное_зрение|Компьютерное зрение]] | ||
− | |||
− | |||
− | |||
− | |||
==Источники информации== | ==Источники информации== | ||
Строка 364: | Строка 342: | ||
# [https://habr.com/ru/post/237589/ habr.com] - использование Pocketsphinx. | # [https://habr.com/ru/post/237589/ habr.com] - использование Pocketsphinx. | ||
# [https://www.osp.ru/os/2017/03/13052701 osp.ru] - глубинный анализ данных с сенсоров. | # [https://www.osp.ru/os/2017/03/13052701 osp.ru] - глубинный анализ данных с сенсоров. | ||
+ | |||
+ | ==Примечания== | ||
+ | |||
+ | [[Категория: Машинное обучение]] [[Категория: Мобильная разработка]] |