¹ Стажер DevOps Engineering, RubensteinTech, Нью-Йорк
² Стажер прогнозирования и бизнес-аналитика, Novo Nordisk, Нью-Джерси
________________________________________________________________________________

Текущие навигационные приложения на смартфонах различаются по своей функциональности и требованиям. Хотя существует множество навигационных платформ, приложения для навигации для людей с нарушениями зрения, у которых нет мобильной сети или доступа к Wi-Fi, не существует. Предположим, что слепой/слабовидящий человек идет по тротуару, но, к сожалению, теряет равновесие и падает, и хотя у него нет доступа к существующим популярным приложениям, поскольку у него нет мобильной связи или доступа к Wi-Fi, он может использовать простота MobileAI — приложения для смартфона, которое предварительно обучено использовать данные видео или изображения с камеры для прогнозирования географического местоположения пользователя, голосового информирования и рекомендации маршрутов. Приложение использует обнаружение объектов, выполняемое модулем InceptionV3, который представляет собой предварительно обученное приложение Keras для моделей глубокого обучения, и классифицирует объекты в видео или изображении, снятом пользователем приложения, для вывода местоположения пользователя с использованием предварительно обученных местоположений. . Цель этого приложения - помочь слабовидящим или слепым с мобильностью и чувством независимости, не нуждаясь в помощи постороннего человека или подключении к Интернету на их смартфоне.

Введение:

В 2018 году во всем мире насчитывалось около 1,3 миллиарда человек с нарушением зрения. Всемирная организация здравоохранения утверждает, что примерно 80% этого заболевания можно избежать с помощью нескольких разработанных ими инструментов и услуг [1]. Исследование, аккредитованное Национальным институтом здравоохранения, показало, что к 2050 году в США число случаев нарушения зрения удвоится и превысит 8 миллионов человек. Кроме того, ожидается, что 16,4 миллиона американцев столкнутся с проблемами зрения из-за физиологических ошибок [2]. Несмотря на то, что исследования в области лечения продолжаются, существует ограниченное количество решений, которые помогут им с точной навигацией во время чрезвычайной ситуации. Излишне говорить, что их устройства должны быть подключены к сети или Wi-Fi, чтобы получить доступ к помощи.

Поскольку наиболее часто используемые навигационные приложения, такие как Google Maps, Apple Maps и Waze, работают на международном уровне, их допустимая погрешность может привести к неточным результатам. Более распространенными последствиями технического сбоя являются сбои подключения к Интернету и сотовой сети, как показано на рисунке 1.

Предлагаемое приложение под названием MobileAI, также произносится как Mobile-Eye, было разработано в качестве прототипа для обнаружения объектов на видео или изображении, снятом приложением, и вывода местоположения пользователя. Поскольку второй задачей приложения было получение точных местоположений в реальном времени, этот метод обеспечивает большую степень детализации визуальных подсказок. Информация об окружении людей с нарушениями зрения обрабатывается с помощью приложения Keras под названием InceptionV3 [3] для информирования их об их местоположении.

С новой эры вычислений сверточные нейронные сети или CNN быстро стали основой самых сложных решений компьютерного зрения для множества задач. Он использовался для обеспечения основных функций предлагаемого приложения. Модель InceptionV3 лежит в основе приложения, чтобы оно работало и выполняло свои задачи. Модель основана на оригинальной статье «Переосмысление исходной архитектуры для компьютерного зрения» Szegedy, et. др. [4] — это кульминация многих идей, разработанных многими исследователями на протяжении многих лет.

Помочь слабовидящему или слепому человеку ориентироваться в своей местности или окрестностях можно, просто сказав «Эй, Google, открой MobileAI» на своем телефоне. Затем человек гуляет по своей местности, используя приложение в качестве навигатора, помогающего ему исследовать свое окружение без необходимости вмешательства или помощи человека. Это достигается, когда приложение определяет местоположение в обученных данных и информирует человека голосовой/звуковой заметкой.

Методология:

Приложение основано на широко используемой модели распознавания изображений, которая обеспечивает поразительную точность. Он состоит из полностью связанной смеси симметричных и асимметричных строительных блоков, максимального объединения, конкатенаций и отсева. Он построен с использованием высокоуровневого Estimator API, который обеспечивает разделение модели и входных частей кода. Это требует, чтобы пользователь определил функции model_fn и_input_fn, модель и входной конвейер, а также этапы предварительной обработки TensorFlow соответственно. Ниже приведен примерный скелет этих функций.

Прежде чем модель можно будет использовать для распознавания изображений, ее необходимо обучить. Обычно это делается с помощью контролируемого обучения с использованием большого набора помеченных изображений. Слепой человек обычно каждый день прокладывает и ходит одними и теми же маршрутами. Они делают это, чтобы избежать возможных препятствий и привыкнуть к маршруту; они осведомлены об окружении и окружающей среде на этом конкретном маршруте. Чтобы проверить нашу теорию, мы выбрали путь и нанесли на карту различные и различимые местоположения или места, которые CNN могла бы обнаружить, если бы они были нанесены на карту.

Затем мы просмотрели более 60 изображений одного определенного места. Мы использовали функцию, называемую «режим затвора», для ускорения процесса, поскольку в итоге получается 4–5 изображений за одну секунду. Затем мы изменили свое местоположение и щелкнули то же место под другим углом, чтобы получить другой ракурс. Это помогает CNN делать расчетные суждения и прогнозы, чтобы отфильтровать возможные местоположения, которые мы сохранили в нейронной сети. Мы повторили этот процесс для всех выбранных нами локаций, собрали все изображения в одном месте и разбили их по папкам. Затем мы запустили тензорный поток для собранных изображений, который использует начальную модель v3 для обучения и создания сверточной нейронной сети.

Все это места в местах, где вы хотите сохранить файлы. Затем файл retrain.py запускается на собранном нами наборе данных изображений, записывает и сохраняет CNN в заданном месте вместе с необходимыми файлами. Мобильные устройства имеют ограниченный объем памяти, а приложения необходимо загружать, поэтому по умолчанию версия TensorFlow для Android/iOS включает поддержку только операций, которые являются общими для логических выводов и не имеют больших внешних зависимостей. Одной из неподдерживаемых операций является DecodeJpeg, потому что текущая реализация полагается на libjpeg, поддержку которой на Android/iOS неудобно и это увеличило бы объем двоичного кода. Хотя мы могли бы написать новую реализацию для большинства мобильных приложений, нам не нужно декодировать JPEG, потому что мы имеем дело непосредственно с буферами изображения камеры.

К сожалению, начальная модель, на которой мы основывали наше переобучение, включает операцию DecodeJpeg. Мы можем обойти это, передав узел Mul, но на платформах, которые не поддерживают эту операцию, вы увидите ошибку при загрузке графа, даже если операция никогда не вызывается. Чтобы избежать этого, скрипт optimize_for_inference удаляет все узлы, которые не нужны для данного набора входных и выходных узлов. Мы делаем это с помощью Bazel, встроенного инструмента, такого же, как cmake и make. Перечисленные вами шаги - это правильный способ получения обновлений от мастера. Этап сборки может занять много времени при первой сборке TensorFlow. Более поздние сборки, после обновлений от мастера, должны быть быстрее, поскольку Bazel, как и любой другой инструмент сборки, не перестраивает цели, чьи зависимости не были изменены.

Сценарий также выполняет несколько других оптимизаций, повышающих скорость, таких как слияние явных операций пакетной нормализации со сверточными весами для уменьшения количества вычислений. Вот как это сделать:

Это создает новый файл в /location/optimized_graph.pb. На данный момент переобученная модель по-прежнему имеет размер 87 МБ, и это гарантирует большой размер загрузки для любого приложения, которое ее включает. Поскольку Apple распространяет приложения в пакетах .ipa, все ресурсы сжимаются с помощью zip. Обычно модели плохо сжимаются, потому что веса представляют собой немного разные значения с плавающей запятой. Вы можете добиться гораздо лучшего сжатия, просто округлив все веса в пределах определенной константы до 256 уровней, оставив их в формате с плавающей запятой. Это дает гораздо больше повторений для алгоритма сжатия, но не требует никаких новых операторов и снижает точность лишь на небольшую величину (обычно менее чем на 1%). Вот как вы вызываете сценарий quantize_graph для применения этих изменений:

Если вы посмотрите на диск, необработанный размер файла rounded_graph.pb такой же — 87 МБ, но если вы щелкните его правой кнопкой мыши в поисковике и выберите «Сжать», вы должны увидеть, что в результате получается файл размером всего около 24 МБ. или так. Это отражает то, какое увеличение размера вы на самом деле увидите в сжатом .ipa на iOS или .apk на Android. Последним этапом обработки, который нам нужно выполнить, является отображение памяти. Поскольку буферы, содержащие значения веса модели, имеют размер 87 МБ, память, необходимая для их загрузки в приложение, может оказывать сильное давление на ОЗУ в iOS еще до запуска модели. Это может привести к проблемам со стабильностью, поскольку ОС может непредсказуемо убивать приложения, использующие слишком много памяти. К счастью, эти буферы доступны только для чтения, поэтому их можно отобразить в память таким образом, чтобы ОС могла легко отбрасывать их за кулисами при нехватке памяти, избегая возможности этих сбоев.

Чтобы поддержать это, нам нужно изменить модель так, чтобы веса хранились в разделах, которые можно легко загрузить отдельно от основного GraphDef, хотя все они по-прежнему находятся в одном файле. Вот команда для этого:

Теперь мы кодируем приложение в студии Android с помощью java и передаем окончательный файл «graph.pb». Затем мы вставляем метки в strings.xml в [местоположение приложения Android]/android/res/values/strings.xml].

Этот код работает в фоновом режиме и проверяет достоверность изображения более 60%, если это правда, он отправляет уведомление/вызов API в API преобразования текста в речь Google, чтобы произнести текст в виде звуковой заметки, установленной в строковых значениях. .

Вместо того, чтобы выполнять задачу создания CNN и использовать bazel для уменьшения ее размера и других ненужных функций, мы можем использовать tensorflow lite, чтобы сделать это гораздо проще и быстрее. TensorFlow Lite — это легкий и следующий шаг по сравнению с TensorFlow Mobile. Вы можете делать почти все то же самое, что и в мобильной версии TensorFlow, но намного быстрее. Он ориентирован на мобильные системы, такие как Android, iOS и т. д. Он обеспечивает вывод машинного обучения на устройстве с малой задержкой и небольшим размером двоичного файла. Он также поддерживает аппаратное ускорение с использованием API-интерфейсов нейронной сети Android. Он поддерживает набор основных операторов, как квантовых, так и с плавающей запятой, которые были настроены специально для мобильных платформ. Они включают предварительно объединенные активации и смещения для дальнейшего повышения производительности и точности квантования. Кроме того, он поддерживает использование пользовательских операций в моделях. Он определяет новый формат файла модели, основанный на FlatBuffers. FlatBuffers — это эффективная кроссплатформенная библиотека сериализации с открытым исходным кодом. Это похоже на буферы протокола, но основное отличие состоит в том, что FlatBuffers не требует шага синтаксического анализа/распаковки во вторичное представление, прежде чем вы сможете получить доступ к данным, часто в сочетании с выделением памяти для каждого объекта. Кроме того, размер кода FlatBuffers на порядок меньше, чем у протокольных буферов.

Вдобавок к этому у него есть новый интерпретатор, оптимизированный для мобильных устройств, основная цель которого — сделать приложения компактными и быстрыми. Интерпретатор использует статический порядок графа и настраиваемый (менее динамичный) распределитель памяти, чтобы обеспечить минимальную задержку загрузки, инициализации и выполнения. TensorFlow Lite предоставляет интерфейс для использования аппаратного ускорения, если оно доступно на устройстве. Это делается с помощью библиотеки Android Neural Networks, выпущенной как часть Android O-MR1. Хотя в настоящее время он находится в состоянии технологического предварительного просмотра, поэтому в настоящее время поддерживаются не все функции TensorFlow, хотя в ближайшем будущем он станет эталоном для мобильных и встроенных устройств, который можно будет использовать для проектирования и разработки подобных приложений, подобных этим, для одного и того же. .

Заключение

В заключение, MobileAI — это важное приложение, которое слабовидящие или даже обычные пользователи могут использовать, чтобы помочь им добраться до места назначения. Это мобильное приложение, которое использует Tensorflow для обнаружения объектов и навигации в соответствии с местоположением, которое оно фиксирует из видео или изображений, без использования онлайн-сервисов. Приложение позволяет слабовидящим пользователям быть их глазами в трудную минуту.

MobileAI может стать полезной развивающейся технологией, помогающей слепым или слабовидящим людям осуществлять навигацию в режиме реального времени без необходимости подключения к Интернету. В качестве важной области будущего он может использовать изображения Google Street View для обучения модели; как вы, возможно, знаете, он позволяет получить доступ к изображениям улиц со всего мира. Еще одна перспектива будущего заключается в том, что она включает в себя безопасность. Видео фиксирует насилие или опасность и соответственно выбирает наиболее безопасный маршрут. Этот репозиторий GitHub из предыдущего проекта хакатона предоставляет потенциальную возможность улучшения для применимого использования: https://github.com/tedrand/wiki-violence-reporting-api.

___________________________________________________________________

Ссылки:

[1] https://www.who.int/news-room/fact-sheets/detail/blindness-and-visual-impairment

[2] Варма, Р. и др., «Нарушения зрения и слепота у взрослых в Соединенных Штатах: демографические и географические изменения с 2015 по 2050 год», JAMA Ophthalmology, DOI: 10.1001/jamaophthalmol.2016.1284.

[3] https://cloud.google.com/tpu/docs/inception-v3-advanced

[4] Сегеди, Кристиан и др. «Переосмысление начальной архитектуры компьютерного зрения». Конференция IEEE по компьютерному зрению и распознаванию образов (CVPR), 2016 г., 2016 г., doi:10.1109/cvpr.2016.308

[5] https://www.digitaltrends.com/mobile/best-navigation-apps/

[6] https://gowithfloat.com/2016/10/9-outdoor-navigation-apps-people-visual-impairments/

[7] https://cloud.google.com/tpu/docs/inception-v3-advanced

[8] https://www.tensorflow.org/lite

[9] https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android