Редактирование: Машинное обучение на мобильных телефонах

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

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
Машинное обучение, как известно, очень тесно связано с нашей жизнью, и во многих областях используются разные модели машинного обучения. Эти модели нужно где-то запускать и сохранять. Самый простой выход из ситуации {{---}} сервер, на котором будет находиться наша модель, и который будет принимать запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Давайте рассмотрим машинное обучение на телефонах.
+
Машинное обучение, как известно, очень тесно связано с нашей жизнью. Буквально каждая область жизни человека нашла в себе нишу для машинного обучения. Конечно же, модели нужно где-то запускать и сохранять. Самый простой выход из ситуации {{---}} сервер, на котором будет находиться наша модель, и который будет принимать запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Давайте рассмотрим машинное обучение на телефонах.
  
 
== Задачи машинного обучения на телефонах ==
 
== Задачи машинного обучения на телефонах ==
Строка 8: Строка 8:
  
 
Конечно же, самое первое, что может прийти в голову про применение машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней.
 
Конечно же, самое первое, что может прийти в голову про применение машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней.
 
Пример приложения:
 
*Spotify
 
*TikTok
 
  
 
=== Распознавание фото, текста и видео ===
 
=== Распознавание фото, текста и видео ===
Строка 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>. Изображения легко передавать через сеть, так что можно обрабатывать их и на веб-серверах.
 
Пример приложения:
 
*Google Lens
 
*Pinterest
 
  
 
=== Распознавание звука ===
 
=== Распознавание звука ===
Строка 35: Строка 27:
  
 
Для распознавания речи есть библиотека pocketsphinx<ref>[https://github.com/cmusphinx/pocketsphinx pocketsphinx]</ref>
 
Для распознавания речи есть библиотека pocketsphinx<ref>[https://github.com/cmusphinx/pocketsphinx pocketsphinx]</ref>
 
Пример приложения:
 
*Shazam
 
*Google Assistant
 
  
 
=== Анализ данных с сенсоров ===
 
=== Анализ данных с сенсоров ===
Строка 97: Строка 85:
  
 
Телефон получает данные об окружающем мире с помощью специальных датчиков и сенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент.
 
Телефон получает данные об окружающем мире с помощью специальных датчиков и сенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент.
 
Пример приложения:
 
*Карты Google
 
*Gravity Screen
 
  
 
=== Навигация ===
 
=== Навигация ===
  
 
Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения.
 
Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения.
 
Пример приложения:
 
*Карты Google
 
  
 
== Запуск моделей машинного обучения на мобильных телефонах ==
 
== Запуск моделей машинного обучения на мобильных телефонах ==
Строка 116: Строка 97:
 
=== CPU ===
 
=== CPU ===
  
Хотя процессоры могут быть неудачным решением для построения современных моделей глубокого обучения, когда учебные данные очень
+
Хотя процессоры могут быть громоздкими для построения современных моделей глубокого обучения, когда учебные данные очень
большие, они являются приемлемым вариантом для обучения или адаптации моделей к небольшим объемам данных, а также для развертывания предварительно построенных моделей глубокого обучения. Очевидным преимуществом развертывания глубокого обучения на CPU является то, в отличие от других типов вычислительных устройств ими оснащен любой современный телефон или планшет. Кроме того, мобильные устройства часто поставляются с мощными процессорами и имеют широкий выбор встроенных датчиков.  Это означает отсутствие дополнительных затрат на аппаратное обеспечение и таким образом обеспечение большего количества приложений ИИ для потенциально огромного рынка. Real-time приложения могут быть развернуты на стандартном процессоре с минимальными затратами или без дополнительных усилий. Кроме того 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/ Источник]]]
Строка 158: Строка 139:
 
== Вес современных нейронных сетей ==
 
== Вес современных нейронных сетей ==
  
В нынешних реалиях глубокие нейронные сети могут весить порядка сотен мегабайт, в то же время современные фреймворки, например, MobileNet позволяют строить нейросети значительно меньшего размера при небольшой потере точности, такие сети отлично подходят для мобильных устройств. Результаты использования MobileNet приведены в сравнении с другими нейросетями приведены в таблице ниже.
+
В нынешних реалиях глубокие нейронные сети могут весить порядка сотен мегабайт, в то же время современные фреймворки например MobileNet позволяют строить нейросети значительно меньшего размера при небольшой потере точности, такие сети отлично подходят для мобильных устройств. Результаты использования MobileNet приведены в сравнении с другими нейросетями приведены в таблице ниже.
  
 
{| class="wikitable" style="width=50%"
 
{| 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-res50-pascal.md rfcn-res50-pascal] || 600 x 850 || 122 MB || 1 GB
 
|-
 
|-
| [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/rfcn-res101-pascal.md rfcn-res101-pascal] || 600 x 850 || 194 MB || 2 GB
 
|-
 
|-
| [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-300.md ssd-pascal-vggvd-300] || 300 x 300 || 100 MB || 116 MB
 
|-
 
|-
| [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-vggvd-512.md ssd-pascal-vggvd-512] || 512 x 512 || 104 MB || 337 MB  
 
|-
 
|-
| [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/ssd-pascal-mobilenet-ft.md ssd-pascal-mobilenet-ft] || 300 x 300 || 22 MB || 37 MB
 
|-
 
|-
| [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]
+
| [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
 
|-
 
|-
 
|}
 
|}
Строка 211: Строка 192:
 
|}
 
|}
  
Разработчики данного процессора делают упор на сверточные сети, однако там встречаются почти все известные модели машинного обучения. Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает объект класса выборки, преобразует их в модель и сохраняет их в файл:  
+
Разработчики данного процессора делают упор на сверточные сети, однако там встречаются почти все известные модели машинного обучения. Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает на берет объект класса модели Snapdragon Neural Processing Engine (SNPE), преобразует их в модель и сохраняет их в файл:  
 
  #include "zdl.h"
 
  #include "zdl.h"
 
   
 
   
Строка 312: Строка 293:
  
 
Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5).
 
Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5).
Затем данный пакет передается уже программе, и она обрабатывает его. Пример кода на Swift:
+
Затем данный пакет передается уже программе на Swift, и она обрабатывает его. Пример кода:
  
  
Строка 340: Строка 321:
 
  }
 
  }
  
Для работы с кодом и результатами у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6)
+
Для работы с кодом и результатами с CoreSDK у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6)
  
 
==См. также==
 
==См. также==

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: