Изменения

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

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

2572 байта добавлено, 15:40, 20 января 2021
Запуск машинного обучения на мобильных телефонах
Машинное обучение, как известно, очень тесно связано с нашей жизнью. Буквально каждая область жизни человека нашла в себе нишу для машинного обучения. Конечно же, модели нужно где то запускать и сохранять. Самый простой выход из ситуации {{---}} сервер, на котором будет находиться наша модель, и который будет приниматься наши запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Давайте рассмотрим машинное обучение на телефонах.
 
== Задачи машинного обучения на телефонах ==
{{main|Рекомендательные_системы}}
Конечно же, самое первое, что может прийти в голову про применения машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой даже такая классификация является излишней.
=== Распознавание фото, текста и видео ===
Если же рассмотреть распознавание текста, то и у него тоже есть большое количество применений {{---}} сканирование чеков, кредитные карты, документы, переводить в реальном времени иностранные слова.
Существует несколько известных библиотек для работы с изображениями в мобильных приложениях: 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>. Изображения легко передавать через сеть, так что можно обрабатывать их и на веб-серверах.
=== Распознавание звука ===
Распознавание звука и его парсинг тоже очень важная задача машинного обучения. Голосовые помощники, голосовой ввод, умные дома {{---}} все это нужно для нашей жизни.
Для распознавания речи есть библиотека pocketsphinx<ref>[https://github.com/cmusphinx/pocketsphinx pocketsphinx]</ref>
=== Анализ данных с сенсоров ===
== Запуск машинного обучения на мобильных телефонах ==
Для запуска [[Глубокое_обучение|глубоких моделей]] необходимо наличием мощных вычислительных ресурсов и большого объема учебных данных. Поэтому построение модели может осуществляться с помощью высокопроизводительных центральных (англ. central processing unit, CPU<ref>[https://en.wikipedia.org/wiki/Central_processing_unit central Central processing unit, CPU]]</ref>) и графических (англ. graphics processing unit, GPU<ref>[https://en.wikipedia.org/wiki/Graphics_processing_unit graphics Graphics processing unit, GPU]</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 является то, в отличие от других типов вычислительных устройств ими оснащен любой современный телефон или планшет. Кроме того, эти устройства часто поставляются с мощными процессорами и имеют широкий выбор встроенных датчиков. Это означает отсутствие дополнительных затрат на аппаратное обеспечение и таким образом обеспечение большего количества приложений ИИ для потенциально огромного рынка. Real-time приложения быть развернуты могут быть развернуты на стандартном процессоре с минимальными затратами или без дополнительных усилий. Кроме того CPU в современных мобильных устройвах столь же мощны как и в компьютерах, что позволяет эффективно использовать их для данных целей.
[[Файл:CPU.jpeg|800px|thumb|center| Рисунок 1. CPU. [https://habr.com/ru/post/455353/ Источник]]]
=== GPU ===
[[Файл:GPU.jpeg|800px|thumb|center| Рисунок 2. GPU. [https://habr.com/ru/post/455353/ Источник]]]
=== FPGA ===
В то время как CPU создан для вычислений общего назначения, а ASIC сделана исключительно для
специфических вычислений, FPGA находится между ними. FPGA могут быть (повторно) запрограммированы ("перепрошиты") для эффективного выполнения многих специфических задач очень эффективно. Также FPGA позволяет достичь баланса между разработкой системы и потреблением энергии. На базовом уровне FPGA используют [https://en.wikipedia.org/wiki/Flip-flop_(electronics) схемы flip-flop] для реализации последовательных логических функций и поиска таблиц. Логические функции реализуются посредством программируемой памяти,
которая также контролирует соединения коммутационных цепей, таким образом, FPGA не нужно явно выполнять логическую операцию после того, как она
запрограммирована. Современные FPGA, как правило, используют SoC подход для интеграции ядра процесса, коммуникационного ядра, и
на GPU, DSP и FPGA. OpenCL можно рассматривать как open source версию [https://ru.wikipedia.org/wiki/CUDA CUDA].
[[Файл:FPGA.jpeg|800px|thumb|center| Рисунок 3. FPGA. [https://habr.com/ru/post/455353/ Источник]]]
=== ASIC и [https://en.wikipedia.org/wiki/Tensor_Processing_Unit TPU] ===
ASIC (Application-Specific Integrated Circuit) - интегральная схема конкретно под поставленную задачу. Примером можем служить интегральная схема реализующая необходимую нейросеть. За счёт этого, энергопотребление становится меньше, а скорость работы операций выше по сравнению с 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/ Источник]]]
=== Сравнение ===
Из-за медлительности телефонов развитие машинного обучения на них началось совсем недавно. Раньше все данные хранились на серверах компаний, [[Модель_алгоритма_и_её_выбор|выбор модели]] был очень широк, и, с точки зрения безопасности, это было плохо. Однако теперь IT-гиганты, такие, как Google, переходят на модель федеративного обучения<ref>[https://ai.googleblog.com/2017/04/federated-learning-collaborative.html федеративного обученияФедеративное обучение]</ref>. Понятно, что обычный телефон не может себе позволить обучаться на моделях, которые потребляют много ресурсов, таких как, например, нейронные сети. Однако существуют модели, которые потребляют очень малое количество памяти и времени на обучение. В основном именно они используются, когда нет соединения с сервером.
Однако машинное обучение стало настолько актуальным, что производители процессоров задумались о том, что бы создавать процессоры, некоторые чипы которых заточены под задачи машинного обучения.
[http://ai-benchmark.com/ranking_processors.html Существует огромное число] процессоров для огромного числа задач, начиная от [[Линейная_регрессия|задачи линейной регрессии]] до [[Глубокое_обучение|задач глубокого обучения]].
Ниже представлены Вот примеры таких процессоров {{---}}Qualcomm Neural Processing SDK<ref>[https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk Qualcomm Neural Processing SDK]</ref>, Huawei Ai<ref>[https://developer.huawei.com/consumer/en/doc/2020314 Huawei Ai]</ref>, NeuroPilot SDK<ref>[https://www.mediatek.com/innovations/artificial-intelligence NeuroPilot SDK]</ref>, CoreML SDK<ref>[https://developer.apple.com/documentation/coreml CoreML SDK]</ref>
=== [https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk Qualcomm Neural Processing SDK] ===
Этот процессор заточен под работу с аудио и видео: [[Распознавание_речи|распознавание речи]], обработку изображений, очистку картинки от шума и подобное.
Короткий пример использования ITensors
=== [https://developer.huawei.com/consumer/en/doc/2020314 Huawei Ai] ===
Этот процессор заточен под [[Компьютерное_зрение|компьютерное зрение]], распознавание речи и [[Обработка_естественного_языка|интерпретацию естественного языка]]
}
===[https://www.mediatek.com/innovations/artificial-intelligence NeuroPilot SDK] ===
Процессор заточен под [[Задача_нахождения_объектов_на_изображении|отслеживание поз множества людей]], идентификацию множества объектов, [https://www.kdnuggets.com/2018/10/semantic-segmentation-wiki-applications-resources.html семантическую сегментацию], [[Сегментация_изображений|обработку изображений]]. NeuroPilot SDK позволяет решать ML-задачи с помощью APU + GPU. APU заточен под модели глубоких нейронных сетей. Обеспечивает аппаратное ускорение для [[Сверточные_нейронные_сети|свертки]], полностью связанных нейронных сетей (то есть [[Практики_реализации_нейронных_сетей|нейронных сетей без дропаута]]), функции активации.
У данной разработки есть три пути развития:
* чип NeuroPilot Micro, представляющий собой микрокомпьютер, оптимизированный под задачи машинного обучения. Его возможности ограничены $10^6$ операциями, мегабайтами памяти. В качестве такого чипа так же можно использовать обычные схематические конструкторы, такие как Arduino<ref>[https://www.arduino.cc Arduino] </ref> (конечно же, их скорость будет ниже на порядок).
* телефон или телефонный чип, на который загружено специальное ПО. Возможности ограничены примерно $10^8 - 10^9$ операциями и гигабайтами памяти.
* удаленное серверное управление. [https://neuropilot.mediatek.com/resources/public/2.0/en/docs/npu_introduction По словам авторов], количество операций и памяти почти безграничны.
В своем основании использует TFLite модели, лучше всего подходит TensorFlow и Keras. Можно писать программы прямо на нем, они будут успешно оптимизироваться.
=== [https://developer.apple.com/documentation/coreml CoreML SDK] ===
[[Файл:Mobile_Phone_Machine_learning_MLModel_Training.png|300px|thumb|left|Рисунок 5. MLModel. [https://developer.apple.com/documentation/createml/creating_an_image_classifier_model Источник]]][[Файл:Mobile_Phone_Machine_learning_MLModel_Training_Program.png|600px|thumb|right|Рисунок 6. Работа в программе. [https://developer.apple.com/documentation/createml/creating_an_image_classifier_model Источник]]]
Создан для [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F#:~:text=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F%20%E2%80%94%20%D0%BE%D0%B4%D0%B8%D0%BD%20%D0%B8%D0%B7%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2%20%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE,%D0%AD%D1%82%D0%BE%20%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE%20%D0%BD%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%BE%D0%B1%D1%83%D1%87%D0%B0%D1%8E%D1%89%D0%B5%D0%B9%20%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%BE%D0%B9 классификации объектов], звуков, движений, текста, табличных данных, обладает [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B рекомендательной системой]. Работает на NPU. [https://developer.apple.com/documentation/createml/creating_an_image_classifier_model Пример использования для картинок].
Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть(см. рисунок 5).
Затем данный пакет передается уже программе на Swift, и она обрабатывает его. Пример кода:
import UIKit import CoreML import Vision import ImageIO
DispatchQueue.main.async {
guard let results = request.results else {
}
}
 
Для работы с кодом и результатами с CoreSDK у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6)
 
==См. также==
 
* [[Машинное_обучение_в_медицине|Машинное обучение в медицине]]
* [[Модель_алгоритма_и_её_выбор|Модель алгоритма и её выбор]]
* [[Глубокое_обучение|Глубокое обучение]]
* [[Распознавание_речи|Распознавание речи]]
* [[Компьютерное_зрение|Компьютерное зрение]]
==Источники информации==
# [https://habr.com/ru/post/237589/ habr.com] - использование Pocketsphinx.
# [https://www.osp.ru/os/2017/03/13052701 osp.ru] - глубинный анализ данных с сенсоров.
 
==Примечания==
[[Категория: Машинное обучение]] [[Категория: Мобильная разработка]]
Анонимный участник

Навигация