1632
правки
Изменения
м
Задача Машинного Машинное обучение, как известно, очень тесно связано с нашей жизнью, и во многих областях используются разные модели машинного обучения на мобильных телефонах . Эти модели нужно где-то запускать и сохранять. Самый простой выход из ситуации {{---}} очень популярная область сервер, на котором будет находиться наша модель, и который будет принимать запросы. Однако, что, если мы находимся в глухом лесу и у нас нет доступа к Интернету? Что, если мы не хотим хранить свои данные на чужих серверах? У нас нет своих серверов для машинного обучения, но мобильные телефоны есть почти у каждого. Огромное количество мобильных приложений каким либо образом используют Давайте рассмотрим машинное обучениена телефонах.
Соцсети, редакторы фото и видео, карты, игры и даже ваш плеер {{---}} все это использует машинное обучение.== Задачи машинного обучения на телефонах ==
== Задачи машинного обучения на телефонах =={{main|Рекомендательные_системы}}
=== Кастомизация ===Конечно же, самое первое, что может прийти в голову про применение машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается с помощью машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений {{---}} [[Сверточные нейронные сети|CNN]], однако порой такая классификация является излишней.
Конечно же, самое первое, что может прийти в голову про применения машинного обучения на телефонах {{---}} это кастомизация. Подбор музыки, новостей, любого контента {{---}} все это достигается путем обучения машинного обучения. Приложение получает ваши персональные данные и, используя данные старых пользователей, показывает вам то, что понравилось людям с наиболее подходящими данными. Однако такая работа связана с очень большими вычислениями, и, чаще всего, выполняется на сторонних серверах. Самая частая модель для классификации изображений - CNN, однако часто даже такая классификация является излишней.Пример приложения:*Spotify*TikTok
''Основная статья: [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0_%D0%BD%D0%B0_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8 {{main|Распознавание текста]''.на изображении}}{{main|Компьютерное зрение}}
''Основная статья: [http://neercРаспознавание фото и видео на мобильных телефонах мало чем отличается от обычных компьютерных методов, только цели немного другие.ifmoНапример, некоторые мобильные телефоны распознают владельца через Face ID с помощью фронтальной камеры.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%B7%D1%80%D0%B5%D0%BD%D0%B8%D0%B5 Компьютерное зрение]''Есть приложения для определения возраста, пола.
Распознавание фото Если же рассмотреть распознавание текста, то и видео на мобильных телефонах мало чем отличается от обычных компьютерных методов, только цели немного другие. Напримеру него тоже есть большое количество применений {{---}} сканирование чеков, некоторые мобильные телефоны используют 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>. Изображения легко передавать через сеть, переводить в реальном времени иностранные словатак что можно обрабатывать их и на веб-серверах.
Существует несколько известных библиотек для работы с изображениями на мобильных приложенияхПример приложения: [https://github.com/tesseract-ocr/tesseract Tesseract], [https://opencv.org/ OpenCV], [https://developers.google.com/vision Mobile Vision *Google], [https://developers.google.com/ml-kit ML Kit]. Изображения легко передавать через сеть, так что можно обрабатывать их и на веб-серверах.Lens*Pinterest
''Основная статья: [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8 {{main|Распознавание речи]''.}}
Достаточно важная область жизни человека и его связи Телефон получает данные об окружающем мире с телефоном - датчики помощью специальных датчиков и сенсорысенсоров. В мире их существует огромное количество, и, к сожалению, большинство из них работает недостаточно точно. Но это исправляет машинное обучение, уточняя данные с сенсоров. Это важно для людей с опасными для жизни болезнями, например, может произойти сердечный приступ, и процессор лучше любого человека скажет, что это он, и, считав местоположение с навигатора, вызовет скорую помощь в тот же момент. Пример приложения:*Карты Google*Gravity Screen
== Запуск машинного обучения Навигационные приложения можно значительно улучшить, если интегрировать в них алгоритмы по распознаванию фото и видео. К примеру, если приложение подключается к камере в автомобиле, оно может анализировать ситуацию на мобильных телефонах ==дороге и предупреждать водителя в случае возможной опасности. Так можно распознавать пробки, дорожные знаки по ограничению скорости, агрессивное поведение окружающих водителей и другие характеристики дорожного движения.
Хотя процессоры могут быть громоздкими для построения современных Для запуска [[Глубокое_обучение|глубоких моделей глубокого обучения]] необходимо наличием мощных вычислительных ресурсов и большого объема учебных данных. Поэтому построение модели может осуществляться с помощью высокопроизводительных центральных (англ. 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. Кроме того CPU в соверменных мобильных устройвах столь же мощны как и в компьютерах, что позволяет достачно эффективно их использовать для данных целейНа рисунках 1-4 представлены модели взаимодействия с соответcтвующими вычислительными устройствами.
=== [https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80 GPU] ===
GPU - графический процессор, который по своему устройству является процессором с несколькими тысячами маленьких ядер. За счет этого достигается большая степень параллельности, что позволяет производить на GPU более эффективные вычисления с матрицами и тензорами, нежели на CPU. На данный момент существует множество мобильных GPU от разных производителей, например одной из самых заметных систем смартфонов на чипе (SoC) является чип Qualcomm Snapdragon.
Ниже представлены Вот примеры таких процессоров{{---}} 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>
[[Файл{| class="wikitable" style="float:Mobile_Phone_Machine_Learning_Snapdragon_Qualcomm_Cases_Examplesright; margin-left:0.png8em; clear:right;"! Область применения || Пример использования|-| Генератор текста |600px|миниПреобразование данных в текст|Примеры использования алгоритмов. [https://developer.qualcomm.com/software/qualcomm-neural| Распознавание речи || Голосовые системы|-processing| Чат-sdk/learningботы || Программы, способные общаться с людьми|-resources/ai| Биометрика || Идентификация и анализ здоровья людей|-ml| Обработка естественного языка || Понимание структуры и значения фраз|-android| Распознавание эмоций || Считывание информации с лица|-neural| Распознавание изображений || Подсчет числа обьектов на картинке|-processing Источник]]]|}
<font color="green">// The following is a partial snippet of the function</font>
</code>
Короткий пример использования ITensors===Huawei Ai=== Этот процессор заточен под [[Компьютерное_зрение|компьютерное зрение]], распознавание речи и [[Обработка_естественного_языка|интерпретацию естественного языка]]. Как можно заметить по картинке, здесь нет никакого обучения, мы берем уже обученную модель и пользуемся ею. Огромное количество классов, предназначенных для различных задач. HiAI SDK дает доступ к заточенному под операции над матрицами NPU. Таким образом, оптимизируются нейронные сети, которые используют матрицы. Пример кода на Java, распознающего, одинаковые ли люди изображены на картинке. import com.huawei.hiai.vision.face.FaceComparator;// Класс для сравнивания лиц import com.huawei.hiai.vision.visionkit.face.FaceCompareResult;// Класс результата сравнивания лиц if (!AiEngineMgr.isAsync) { resultCode = mFaceComparator.faceCompare(image1, image2, mFaceCompareResult, null); } else { mFaceComparator.faceCompare(image1, image2, null, new VisionCallback<FaceCompareResult>() { @Override public void onResult(FaceCompareResult faceCompareResult){ mFaceCompareResult = faceCompareResult; resultCode = 0; } @Override public void onError(int i){ resultCode = i; HopeCVLog.d(temp_Log,"onError: "+i); } @Override public void onProcessing(float v){ } }); } try { Float confidence = mFaceCompareResult.isSamePerson(); boolean samePerson = mFaceCompareResult.getSocre(); } catch (Exception e) { e.printStackTrace(); } ===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 По словам авторов], количество операций и памяти почти безграничны.
=== [https://developerВ своем основании использует TFLite модели, лучше всего подходит TensorFlow и Keras.huaweiМожно писать программы прямо на нем, они будут успешно оптимизироваться.com/consumer/en/doc/2020314 Huawei Ai] ===
Этот процессор заточен под [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%B7%D1%80%D0%B5%D0%BD%D0%B8%D0%B5 компьютерное зрение], распознавание речи и [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B5%D1%81%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0 интерпретацию естественного языка]=CoreML SDK===
Как можно заметить по картинкеСоздан для [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 Пример использования для картинок].
===[https://wwwДанное программное обеспечение сильно разделено. У нас есть специальная MLModel, которая изначально принимает изображения, и сохраняет их в компактном виде, сохраняя там же уже натренированную сеть (см. рисунок 5).mediatekЗатем данный пакет передается уже программе, и она обрабатывает его.com/innovations/artificial-intelligence NeuroPilot SDK] ===Пример кода на Swift:
Процессор заточен под [http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BD%D0%B0%D1%85%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%BD%D0%B0_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8 отслеживание поз множества людей], идентификацию множества объектов, [https://www.kdnuggets.com/2018/10/semantic-segmentation-wiki-applications-resources.html семантическую сегментацию], [https://en.wikipedia.org/wiki/Image_segmentation обработку изображений].
[[Файл:Mobile_Phone_Machine_learning_Neuropilot.png|400px|мини|Путь приложения. [https://neuropilot.mediatek.com/resources/public/2.0/en/docs/npu_started Источник]]]
=== [https://developer.samsung.com/neural/overview.html Samsung Neural SDK] ===
Заточен под обработку матриц, которые часто встречаются в задачах машинного обучения. [https://developer.samsung.com/codelab/neural/mobile-neural-execution/development.html Гайд по установке и использованию]
Создан для [http://wwwДля работы с кодом и результатами у Apple есть рекомендуется программа XCode (пример работы см.machinelearningрисунок 6) ==См.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 рекомендательной системойМобильная разработка]].
[[Категория: Машинное обучение]] [[Категория: Мобильная разработка]]
rollbackEdits.php mass rollback
=== Кастомизация ===
=== Распознавание фото, текста и видео ===
=== Распознавание звука ===
Распознавание звука и его парсинг тоже очень важная задача машинного обучения. Голосовые помощники, голосовой ввод, умные дома {{---}} все это нужно для нашей жизни.
Для распознавания речи есть библиотека pocketsphinx<ref>[https://github.com/cmusphinx/pocketsphinx pocketsphinx]</ref> Пример приложения:*Shazam*Google Assistant
=== Анализ данных с сенсоров ===
{|alignclass="centerwikitable"style="width:50%;"! Приложение !! Датчик|-| rowspan="4" | Распознавание человеческой активности || Акселерометр|-| Гироскоп|-| Магнитометр|-| Монитор сердечного ритма|-| rowspan="2" | Распознавание жестов || Акселерометр|-| Гироскоп |-valign| rowspan="top3"| Распознавание падений || Акселерометр |[[Файл:ML_Mobile_Phone_Sensors.png-| Гироскоп|-| Датчики близости|-| rowspan="2" | Распознавание аварий || Акселерометр|-| Приемник GPS|-| rowspan="5" | Распознавание условий окружающей среды || Датчик окружающего света|-| Датчик влажности|-| Термометр|-| Датчик давления|-| Приемник GPS|-| rowspan="4" | Распознавание стресса || Микрофон|-| Электрокардиограф|-| Монитор сердечного ритма|-| Датчик проводимости кожи|-| rowspan="5" | Распознавание эмоций || Микрофон|-| Камера|-| Электрокардиограф|-|800pxМонитор сердечного ритма|мини-|Применение различных сенсоров [https://www.osp.ru/os/2017/03/13052701 Источник]]]Датчик проводимости кожи |}
=== Навигация ===
Пример приложения:
*Карты Google
=== [https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC_%D0%B2%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0 CPU] =Запуск моделей машинного обучения на мобильных телефонах ==
=== CPU === Хотя процессоры могут быть неудачным решением для построения современных моделей глубокого обучения, когда учебные данные оченьбольшие, они являются приемлемым вариантом для обучения или адаптации моделей к небольшим объемам данных, а также для развертывания предварительно построенных моделей глубокого обучения. Очевидным преимуществом развертывания глубокого обучения на CPU является то, в отличие от других типов вычислительных устройств ими оснащен любой современный телефон или планшет. Кроме того, мобильные устройства часто поставляются с мощными процессорами и имеют широкий выбор встроенных датчиков. Это означает отсутствие дополнительных затрат на аппаратное обеспечение и таким образом обеспечение большего количества приложений ИИ для потенциально огромного рынка. Real-time приложения могут быть развернуты на стандартном процессоре с минимальными затратами или без дополнительных усилий. Кроме того CPU в современных мобильных устройствах столь же мощны, как и в компьютерах, что позволяет эффективно использовать их для данных целей. [[Файл:CPU.jpeg|800px|thumb|center| Рисунок 1. CPU. [https://habr.com/ru/post/455353/ Источник]]] === GPU ===GPU {{---}} графический процессор, который по своему устройству является процессором с несколькими тысячами маленьких ядер. За счет этого достигается большая степень параллельности, что позволяет производить на GPU более эффективные вычисления с матрицами и тензорами, нежели на CPU. На данный момент существует множество мобильных GPU от разных производителей, например одной из самых заметных систем смартфонов на чипе (SoC) является чип Qualcomm Snapdragon. [[Файл:GPU.wikipediajpeg|800px|thumb|center| Рисунок 2. GPU. [https://habr.orgcom/ru/post/wiki455353/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC_%D0%B2%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0 Источник]]] === FPGA] ===
В то время как CPU создан для вычислений общего назначения, а ASIC сделана исключительно для
специфических вычислений, FPGA находится между ними. FPGA могут быть (повторно) запрограммированы("перепрошиты") для эффективного выполнения многих специфических задач очень эффективно. Также FPGA позволяет достичь баланса между разработкой системы и потреблением энергии. На базовом уровне FPGA используют схемы флип-флоп для реализации последовательных логических функций и поиска таблиц, т.е. памяти.схема для реализации комбинационной логической функции. На базовом уровне FPGA используют [https://en.wikipedia.org/wiki/Flip-flop_(electronics) схемы flip-flop] для реализации последовательных логических функций и поиска таблиц. Логические функции реализуются посредством программируемой памяти,
которая также контролирует соединения коммутационных цепей, таким образом, FPGA не нужно явно выполнять логическую операцию после того, как она
запрограммирована. Современные FPGA, как правило, используют SoC подход для интеграции ядра процесса, коммуникационного ядра, и
память на одной микросхеме. FPGA вендоры, такие как [https://en.wikipedia.org/wiki/Xilinx and Xilinx] и [https://en.wikipedia.org/wiki/AlteraAltera], создали множество программного обеспечения для облегчения программирования на FPGA. В то время кактрадиционное программирование для FPGA требует знаний о цифровых схемах и языка описания оборудования (HDL), сейчас оно движется в сторону создания схем высокого уровня(HLS). Существует пять основных категорий инструментов HLS,но для мобильного глубокого обучения наиболее актуален фреймворк параллельных вычислений [https://ru.wikipedia.org/wiki/OpenCL OpenCL]. OpenCL {{---}} это язык на основанный на C
и являющийся открытой, стандартизированной основой для ускорения алгоритмов. Программы, написанные на OpenCL, могут быть выполнены
на 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 и 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 специально для нейросетевого машинного обучения Google. [[Файл:ASIC.jpeg|800px|thumb|center| Рисунок 4. ASIC. [https://habr.com/ru/post/455353/ Источник]]] === Сравнение === Как упоминалось в предыдущих подразделах, CPU и GPU являются вычислительными платформами общего назначения, предлагая таким образомбольшую гибкость. Начальное алгоритмическое обучение модели должно использовать CPU иGPU для получения предварительного представления о достижимой производительности. CPU и GPU поддерживают вычисления с полной точностью и могутбыть использованы для моделей с интенсивными вычислениями, что часто означает более высокую точность прогнозирования. Однако, GPU иCPU более энергозатратны. ASIC могут быть гораздо более энергоэффективными, так как аппаратное обеспечение изготовлено специально длянекоторых вычислений. Тем не менее, проектирование и разработка микросхем ASIC может занять очень много времени. Таким образом, ASIC используется только тогда, когда модель фиксирована и требуются низкие затраты энергии. FPGA предлагает компромисс между энергопотреблением, точностью прогнозирования и скоростью разработки системы. == Вес современных нейронных сетей == В нынешних реалиях глубокие нейронные сети могут весить порядка сотен мегабайт, в то же время современные фреймворки, например, MobileNet позволяют строить нейросети значительно меньшего размера при небольшой потере точности, такие сети отлично подходят для мобильных устройств. Результаты использования MobileNet приведены в сравнении с другими нейросетями приведены в таблице ниже. {| class="wikitable" style="width=50%"! Модель || Размер входа || Размер параметров || Размер признаков || Метод || Флопс || Тип модели || Набор данных|-| [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]|-|}
== Процессоры ==
Из-за медлительности телефонов развитие машинного обучения на телефонах них началось совсем недавно. Раньше все данные хранились на серверах компаний, [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 [Модель_алгоритма_и_её_выбор|выбор модели]] был очень широк, и, с точки зрения безопасности, это было плохо. Однако теперь IT-гиганты, такие, как Google, переходят на модель федеративного обучения<ref>[https://ai.googleblog.com/2017/04/federated-learning-collaborative.html федеративное Федеративное обучение]</ref>. Понятно, что обычный телефон не может себе позволить обучаться на тяжелых моделях, которые потребляют много ресурсов, таких как, например, нейронные сети. Однако существуют модели, которые потребляют очень малое количество памяти и времени на обучение. В основном именно они используются, когда нет соединения с сервером.
Однако машинное обучение стало настолько актуальным, что производители процессоров задумались о том, что бы создавать процессоры, некоторые чипы которых заточены под задачи машинного обучения.
[http://ai-benchmark.com/ranking_processors.html Существует огромное число] процессоров для огромного числа задач, начиная от [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F [Линейная_регрессия|задачи линейной регрессии]] до [http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 [Глубокое_обучение|задач глубокого обучения]].
=== [https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk Qualcomm Neural Processing SDK] ===
Этот процессор заточен под работу с аудио и видео: [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8 [Распознавание_речи|распознавание речи]], умная камераобработку изображений, очистка очистку картинки от шума и подобное.
Разработчики данного процессора делают упор на CNN сверточные сети, однако там встречаются почти все известные модели машинного обучения.Обеспечивает аппаратное ускорение ML-моделей на связке DSP + GPU + CPU для Snapdragon чипов. Далее приведен листинг на языке C++, который принимает объект класса выборки, преобразует их в модель и сохраняет их в файл: #include "zdl.h"<code> void executeNetwork(std::unique_ptr<zdl::SNPE::SNPE>& snpe,
std::unique_ptr<zdl::DlSystem::ITensor>& input,
std::string OutputDir,
snpe->execute(input.get(), outputTensorMap);
zdl::DlSystem::StringList tensorNames = outputTensorMap.getTensorNames();
<font color="green">//Iterate through the output Tensor map, and print each output layer nameПроходимся по всем объектам и выводим их имена</font>
std::for_each( tensorNames.begin(), tensorNames.end(), [&](const char* name)
{
});
}
void SaveITensor(const std::string& path, const zdl::DlSystem::ITensor* tensor)
{
}
}
[[Файл:Mobile_Phone_Machine_Learning_HUAWEI_AIMobile_Phone_Machine_learning_MLModel_Training.jpgpng|400px300px|миниthumb|Путь приложенияleft|Рисунок 5. MLModel. [https://developer.huaweiapple.com/consumerdocumentation/encreateml/doccreating_an_image_classifier_model Источник]]][[Файл:Mobile_Phone_Machine_learning_MLModel_Training_Program.png|600px|thumb|right|Рисунок 6. Работа в программе. [https://developer.apple.com/developmentdocumentation/hiai-Guidescreateml/dev-process-0000001052965551 creating_an_image_classifier_model Источник]]]
import UIKit import CoreML import Vision import ImageIO DispatchQueue.main.async { guard let results =request.results else { self.classificationLabel.text ="Unable to classify image.\n\(error!.localizedDescription)" return } let classifications = results as! [https:VNClassificationObservation] if classifications.isEmpty { self.classificationLabel.text = "Nothing recognized." } else { <font color="green">//developerDisplay top classifications ranked by confidence in the UI.apple</font> let topClassifications = classifications.comprefix(2) let descriptions = topClassifications.map { classification in /documentation/coreml CoreML SDK] ==Formats the classification for display; e.g. "(0.37) cliff, drop, drop-off". return String(format: " (%.2f) %@", classification.confidence, classification.identifier) } self.classificationLabel.text ="Classification:\n" + descriptions.joined(separator: "\n") } }
==Источники информации==
# [https://www.azoft.ru/blog/primenenie-mashinnogo-obucheniya-v-mobilnyh-prilozheniyah/ azoft.ru] - о применении машинного обучения.
# [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://habr.com/ru/post/455353/ habr.com] - аппаратное ускорение нейронных сетей
# [https://habr.com/ru/company/mobileup/blog/332500/ habr.com] - краткий обзор и пример на CoreML.
# [https://habr.com/ru/post/345268/ habr.com] - распознавание изображений.
# [https://habr.com/ru/post/237589/ habr.com] - использование Pocketsphinx.
# [https://www.osp.ru/os/2017/03/13052701 osp.ru] - глубинный анализ данных с сенсоров.