Редактирование: Машинное обучение на мобильных телефонах
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | Машинное обучение, как известно, очень тесно связано с нашей жизнью | + | Машинное обучение, как известно, очень тесно связано с нашей жизнью. Буквально каждая область жизни человека нашла в себе нишу для машинного обучения. Конечно же, модели нужно где то запускать и сохранять. Самый простой выход из ситуации {{---}} сервер, на котором будет находиться наша модель, и который будет приниматься наши запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Давайте рассмотрим машинное обучение на телефонах. |
== Задачи машинного обучения на телефонах == | == Задачи машинного обучения на телефонах == | ||
Строка 7: | Строка 7: | ||
{{main|Рекомендательные_системы}} | {{main|Рекомендательные_системы}} | ||
− | Конечно же, самое первое, что может прийти в голову про | + | Конечно же, самое первое, что может прийти в голову про применения машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней. |
− | |||
− | |||
− | |||
− | |||
=== Распознавание фото, текста и видео === | === Распознавание фото, текста и видео === | ||
Строка 18: | Строка 14: | ||
{{main|Компьютерное зрение}} | {{main|Компьютерное зрение}} | ||
− | Распознавание фото и видео на мобильных телефонах мало чем отличается от обычных компьютерных методов, только цели немного другие. Например, некоторые мобильные телефоны распознают владельца через Face ID с помощью | + | Распознавание фото и видео на мобильных телефонах мало чем отличается от обычных компьютерных методов, только цели немного другие. Например, некоторые мобильные телефоны распознают владельца через 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>. Изображения легко передавать через сеть, так что можно обрабатывать их и на веб-серверах. | Существует несколько известных библиотек для работы с изображениями в мобильных приложениях: 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: | ||
Телефон получает данные об окружающем мире с помощью специальных датчиков и сенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент. | Телефон получает данные об окружающем мире с помощью специальных датчиков и сенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент. | ||
− | |||
− | |||
− | |||
− | |||
=== Навигация === | === Навигация === | ||
Строка 106: | Строка 90: | ||
Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения. | Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения. | ||
− | + | == Запуск машинного обучения на мобильных телефонах == | |
− | |||
− | + | Для запуска [[Глубокое_обучение|глубоких моделей]] необходимо наличием мощных вычислительных ресурсов и большого объема учебных данных. Поэтому построение модели может осуществляться с помощью высокопроизводительных центральных (англ. 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. | |
− | |||
− | Для запуска [[Глубокое_обучение|глубоких моделей]] необходимо наличием мощных вычислительных ресурсов и большого объема учебных данных. Поэтому построение модели может осуществляться с помощью высокопроизводительных центральных (англ. 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, интегральных | ||
=== 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/ Источник]]] | ||
Строка 129: | Строка 110: | ||
=== FPGA === | === FPGA === | ||
В то время как CPU создан для вычислений общего назначения, а ASIC сделана исключительно для | В то время как CPU создан для вычислений общего назначения, а ASIC сделана исключительно для | ||
− | специфических вычислений, FPGA находится между ними. FPGA могут быть (повторно) запрограммированы ("перепрошиты") для эффективного выполнения многих специфических задач. На базовом уровне FPGA используют [https://en.wikipedia.org/wiki/Flip-flop_(electronics) схемы flip-flop] для реализации последовательных логических функций и поиска таблиц. Логические функции реализуются посредством программируемой памяти, | + | специфических вычислений, FPGA находится между ними. FPGA могут быть (повторно) запрограммированы ("перепрошиты") для эффективного выполнения многих специфических задач. Также FPGA позволяет достичь баланса между разработкой системы и потреблением энергии. На базовом уровне FPGA используют [https://en.wikipedia.org/wiki/Flip-flop_(electronics) схемы flip-flop] для реализации последовательных логических функций и поиска таблиц. Логические функции реализуются посредством программируемой памяти, |
которая также контролирует соединения коммутационных цепей, таким образом, FPGA не нужно явно выполнять логическую операцию после того, как она | которая также контролирует соединения коммутационных цепей, таким образом, FPGA не нужно явно выполнять логическую операцию после того, как она | ||
запрограммирована. Современные FPGA, как правило, используют SoC подход для интеграции ядра процесса, коммуникационного ядра, и | запрограммирована. Современные FPGA, как правило, используют SoC подход для интеграции ядра процесса, коммуникационного ядра, и | ||
память на одной микросхеме. FPGA вендоры, такие как [https://en.wikipedia.org/wiki/Xilinx Xilinx] и [https://en.wikipedia.org/wiki/Altera Altera], создали множество программного обеспечения для облегчения программирования на FPGA. В то время как | память на одной микросхеме. FPGA вендоры, такие как [https://en.wikipedia.org/wiki/Xilinx Xilinx] и [https://en.wikipedia.org/wiki/Altera Altera], создали множество программного обеспечения для облегчения программирования на FPGA. В то время как | ||
− | традиционное программирование для FPGA требует знаний о цифровых схемах и языка описания оборудования (HDL), сейчас оно движется в сторону создания схем высокого уровня (HLS). Существует пять основных категорий инструментов HLS, | + | традиционное программирование для FPGA требует знаний о цифровых схемах и языка описания оборудования (HDL), сейчас оно движется в сторону создания схем высокого уровня(HLS). Существует пять основных категорий инструментов HLS, |
но для мобильного глубокого обучения наиболее актуален фреймворк параллельных вычислений [https://ru.wikipedia.org/wiki/OpenCL OpenCL]. OpenCL {{---}} это язык основанный на C | но для мобильного глубокого обучения наиболее актуален фреймворк параллельных вычислений [https://ru.wikipedia.org/wiki/OpenCL OpenCL]. OpenCL {{---}} это язык основанный на C | ||
и являющийся открытой, стандартизированной основой для ускорения алгоритмов. Программы, написанные на OpenCL, могут быть выполнены | и являющийся открытой, стандартизированной основой для ускорения алгоритмов. Программы, написанные на OpenCL, могут быть выполнены | ||
Строка 143: | Строка 124: | ||
− | ASIC | + | 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/ Источник]]] | [[Файл:ASIC.jpeg|800px|thumb|center| Рисунок 4. ASIC. [https://habr.com/ru/post/455353/ Источник]]] | ||
Строка 155: | Строка 136: | ||
CPU более энергозатратны. ASIC могут быть гораздо более энергоэффективными, так как аппаратное обеспечение изготовлено специально для | CPU более энергозатратны. ASIC могут быть гораздо более энергоэффективными, так как аппаратное обеспечение изготовлено специально для | ||
некоторых вычислений. Тем не менее, проектирование и разработка микросхем ASIC может занять очень много времени. Таким образом, ASIC используется только тогда, когда модель фиксирована и требуются низкие затраты энергии. FPGA предлагает компромисс между энергопотреблением, точностью прогнозирования и скоростью разработки системы. | некоторых вычислений. Тем не менее, проектирование и разработка микросхем ASIC может занять очень много времени. Таким образом, ASIC используется только тогда, когда модель фиксирована и требуются низкие затраты энергии. FPGA предлагает компромисс между энергопотреблением, точностью прогнозирования и скоростью разработки системы. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Процессоры == | == Процессоры == | ||
Строка 211: | Строка 171: | ||
|} | |} | ||
− | Разработчики данного процессора делают упор на сверточные сети, однако там встречаются почти все известные модели машинного обучения. Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает | + | Разработчики данного процессора делают упор на сверточные сети, однако там встречаются почти все известные модели машинного обучения. Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает на вход данные, преобразует их в модель и сохраняет их в файл: |
#include "zdl.h" | #include "zdl.h" | ||
Строка 252: | Строка 212: | ||
} | } | ||
} | } | ||
+ | Короткий пример использования 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: | Строка 256: | ||
===NeuroPilot SDK=== | ===NeuroPilot SDK=== | ||
− | Процессор заточен под [[ | + | Процессор заточен под [[Задача_нахождения_объектов_на_изображении|отслеживание поз множества людей]], идентификацию множества объектов, [https://www.kdnuggets.com/2018/10/semantic-segmentation-wiki-applications-resources.html семантическую сегментацию], [[Сегментация_изображений|обработку изображений]]. NeuroPilot SDK позволяет решать ML-задачи с помощью APU + GPU. APU заточен под модели глубоких нейронных сетей. Обеспечивает аппаратное ускорение для [[Сверточные_нейронные_сети|свертки]], полностью связанных нейронных сетей (то есть [[Практики_реализации_нейронных_сетей|нейронных сетей без дропаута]]), функции активации. |
У данной разработки есть три пути развития: | У данной разработки есть три пути развития: | ||
Строка 312: | Строка 273: | ||
Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5). | Данное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5). | ||
− | Затем данный пакет передается уже программе, и она обрабатывает его. Пример кода | + | Затем данный пакет передается уже программе на Swift, и она обрабатывает его. Пример кода: |
Строка 340: | Строка 301: | ||
} | } | ||
− | Для работы с кодом и результатами у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6) | + | Для работы с кодом и результатами с CoreSDK у Apple есть рекомендуется программа XCode (пример работы см. рисунок 6) |
==См. также== | ==См. также== | ||
Строка 349: | Строка 310: | ||
* [[Распознавание_речи|Распознавание речи]] | * [[Распознавание_речи|Распознавание речи]] | ||
* [[Компьютерное_зрение|Компьютерное зрение]] | * [[Компьютерное_зрение|Компьютерное зрение]] | ||
− | |||
− | |||
− | |||
− | |||
==Источники информации== | ==Источники информации== | ||
Строка 358: | Строка 315: | ||
# [https://habr.com/ru/company/dataart/blog/500956/ habr.com] - железо и процессоры. | # [https://habr.com/ru/company/dataart/blog/500956/ habr.com] - железо и процессоры. | ||
# [https://www.researchgate.net/publication/331533064_Deep_Learning_on_Mobile_Devices-A_Review researchgate.net] - Deep Learning on Mobile Devices, Yunbin Deng | # [https://www.researchgate.net/publication/331533064_Deep_Learning_on_Mobile_Devices-A_Review researchgate.net] - Deep Learning on Mobile Devices, Yunbin Deng | ||
− | # [https://habr.com/ru/post/455353/ habr.com] - аппаратное ускорение нейронных сетей | + | # [https://habr.com/ru/post/455353/habr.com habr.com] - аппаратное ускорение нейронных сетей |
# [https://habr.com/ru/company/mobileup/blog/332500/ habr.com] - краткий обзор и пример на CoreML. | # [https://habr.com/ru/company/mobileup/blog/332500/ habr.com] - краткий обзор и пример на CoreML. | ||
# [https://habr.com/ru/post/345268/ habr.com] - распознавание изображений. | # [https://habr.com/ru/post/345268/ habr.com] - распознавание изображений. | ||
Строка 364: | Строка 321: | ||
# [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] - глубинный анализ данных с сенсоров. | ||
+ | |||
+ | ==Примечания== | ||
+ | |||
+ | [[Категория: Машинное обучение]] [[Категория: Мобильная разработка]] |