Эта статья представляет собой отрывок из моего университетского проекта по технологиям умного города. Если вы хотите прочитать полный отчет, не стесняйтесь обращаться ко мне по адресу @parismollo ( Github, Twitter или LinkedIn).

Заявление об ограничении ответственности. Приложение больше не является версией 0.4.1, содержание этой статьи может немного отличаться от последней версии приложения. Кроме того, я больше не обслуживаю и не обновляю проект, вы можете столкнуться с ошибками, если получите к нему доступ.

Попробуйте код

Примечание. Приложение работает как в браузере мобильного устройства, так и в браузере на компьютере.

Чтобы протестировать проект, зайдите на https://envai.herokuapp.com/ и подождите несколько секунд, пока приложение загрузится. На целевой странице будет информация, необходимая для тестирования приложения, и описание проекта. Чтобы протестировать модели машинного обучения, перейдите в раздел Попробовать и загрузите изображение по вашему выбору.

После загрузки изображения приложение начнет загружать все 4 модели, и это может занять некоторое время (несколько секунд). Как только модели будут готовы, на вашем экране появится сообщение об успешном завершении, а результаты появятся на левой боковой панели. меню.

Внимание! Если вы тестируете приложение через мобильное устройство, меню боковой панели по умолчанию закрыто. Чтобы открыть его, нажмите на черную стрелку в верхнем левом углу.

Введение в проект

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

Какую проблему решает этот проект?

Фундаментальным компонентом повышения безопасности в городах является информация. Чем больше информации, настолько точной и быстрой, насколько вы сможете получить, тем больше у вас шансов вмешаться, контролировать и избежать преступных, незаконных действий и опасных ситуаций в городе.

Поскольку города быстро расширяются, оказывается очень сложно вовремя собрать достаточно информации, чтобы контролировать и контролировать весь город. Решение 21-го века - это камеры и датчики, разбросанные по городу. Однако у камер есть ограничения: когда их количество увеличивается, практически невозможно с компьютерной точки зрения сохранить все кадры, записанные каждой камерой, и по-человечески невозможно прочитать и проанализировать этот огромный сбор данных в режиме реального времени. С другой стороны, датчики могут вызывать множество ложных срабатываний и часто имеют очень ограниченный диапазон и движение. Хотя нынешние системы видеонаблюдения и сенсорные системы очень ценны и помогают местным властям бороться с преступностью, насилием и опасностями, все же есть возможности для улучшения. Алгоритмы машинного обучения могут оптимизировать систему наблюдения, предварительно обработав большую часть отснятого материала и определив, что с большей вероятностью будет уместно для дальнейшего анализа или вмешательства, что значительно снижает нагрузку на органы наблюдения.

Что я хотел сделать

Первоначальная концепция этого проекта предполагала создание веб-приложения, которое могло бы идентифицировать пожарные опасности на изображениях и выводить описание ситуации, изображенной на изображении (например, классификация окружающей среды, классификация объектов, обнаружение пешеходов). Применение этого проекта в реальной жизни поясняется на рисунке 4.1. Алгоритм машинного обучения будет предварительно обрабатывать все кадры с камер видеонаблюдения, как только алгоритм классифицирует с вероятностью более 50% опасный пожарный сценарий, он пишет полное описание ситуации и сообщает о ближайшей пожарной части или службе безопасности.

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

Что я сделал

В текущей опубликованной версии проекта (Alpha v0.4.1) проект развернут на сервере Heroku, где пользователи могут получить доступ и проверить точность моделей машинного обучения. Приложение Alpha v0.4.1 имеет два режима: «демонстрационный» и «Как это работает». В демонстрационном режиме пользователь может выбрать jpg или jpeg по своему выбору и загрузите его на сервер, затем приложение отобразит 4 метки моделей в меню боковой панели, где каждая будет выводить набор вероятностей классификации / прогноза.

Примечание. Alpha v0.4.1 имеет следующие модели: классификация объектов CIFAR10, обнаружение пожара, обнаружение пешеходов и классификация сцен.

Приложение также обеспечивает интерактивное отображение каждого слоя выходных данных сверточной нейронной сети (то есть карт характеристик), а также его фильтров (см. Раздел «Сверточные нейронные сети») в режиме приложения «Как это работает ».

Примечание. В исходной версии приложения (только репозиторий Github, недоступен на Heroku) пользователь может дополнительно изучить архитектуру модели, отображаемую в режиме приложения «оценка», в дополнение к этому. , пользователь может оценить производительность моделей на наборе изображений, предварительно загруженных в приложение.

Изначально приложение было построено с использованием TensorFlow v2.2.0, к сожалению, размер пакета этой версии TensorFlow составляет около 530 МБ, что превышает предел «размера слага» в 500 МБ для развертывания на облачной платформе Heroku, из-за этого ограничения я решил клонировать репозиторий (используя Tensorflow v2.2.0) и откатить клонированную версию до Tensorflow v2.0.0, что составляет около 83 МБ, следовательно, я мог бы развернуть эту версию на сервере Heroku.

Производительность модели варьируется в зависимости от каждой задачи, но в целом все они достигают точности более 75% на тестовых наборах. Тем не менее, еще многое предстоит улучшить, и это далеко от требуемого уровня точности. Размеры наборов данных были относительно небольшими для некоторых задач, и их необходимо будет улучшить в следующих версиях проекта либо путем сбора дополнительных данных, либо путем генерации случайных изменений в наборе поездов для повышения обобщения модели.

Как это работает

Проект можно разделить на 2 компонента: исследование и разработка моделей и разработка веб-приложений.

Модели R&D

Чтобы создать устойчивый и масштабируемый проект, я следовал «пошаговым» организационным рекомендациям, предложенным Орелиеном Жероном в его последней книге «Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow »И учебники Джейсона Браунли.

Шаг номер один заключался в определении моих целей и постановке проблемы, которую будут решать мои модели (см. Раздел «Что я хотел сделать»). Определив задачи модели (например, обнаружение пожара), я начал поиск доступных наборов данных. Наборы данных Fire, Pedestrian и Scene являются общедоступными наборами данных, доступными на Kaggle, в то время как для обнаружения объектов я использовал набор данных CIFAR10, напрямую доступный на Keras.

Определив, какие наборы данных я собираюсь использовать, я начал свою разработку. В Kaggle или Google Colab (для CIFAR10) я написал скрипт на Python, который:

1. Загрузите данные.

2. Предварительная обработка данных (нормализация или стандартизация).

3. Найдите и визуализируйте набор данных (форму и экземпляры).

4. Создайте модель машинного обучения (последовательное, оптимизатор, компилятор).

5. Обучите модель на наборе поездов и проверьте ее на проверочном наборе.

6. Оцените модель (переоснащение, неполное подгонка, обобщение и т. Д.)

7. Точная настройка модели (гиперпараметры).

Это может быть реализовано одновременно в нескольких архитектурах, чтобы оценить, какая архитектура работает лучше всего. Как только я нашел наиболее производительную модель, я сохранил обученную модель в формате TensorFlow h5 для последующего использования в веб-приложении.

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

Веб-приложение

Приоритетом этого проекта является разработка моделей машинного обучения, однако я считаю, что важно обеспечить удобный интерфейс, в котором люди смогут понять, как работает технология, протестировать код и, надеюсь, дать обратную связь. Тем не менее, я решил использовать Streamlit, фреймворк, который я использовал для создания веб-приложения. Веб-приложение позволяет пользователям взаимодействовать с моделями машинного обучения, их архитектурами и уровнями.

После сохранения обученных моделей машинного обучения, созданных в разделе НИОКР, я загружаю их в веб-приложение и использую для выполнения прогнозов на основе пользовательского ввода (через Streamlit), после того как модели выводят свои прогнозы, я отображаю их в интерфейсе для Пользователь.

Модели

Пока что я представил общую структуру проекта и его особенности. Тем не менее, этот сегмент будет посвящен объяснению того, как работают модели машинного обучения, используемые в этом проекте.

Примечание. Этот отчет не предназначен для подробного описания машинного обучения, мы охватим только необходимую информацию для этого проекта.

Краткий обзор машинного обучения

«Считается, что компьютерная программа учится на опыте E относительно некоторой задачи T и некоторого показателя производительности P, если ее производительность на T, измеренная с помощью P, улучшается с опытом E», - сказал Том Митчел в 1997 году. .

Заявление Тома Митчела описывает фундаментальные механизмы программ машинного обучения. В принципе, алгоритм машинного обучения - это компьютерная программа, которая обучается на основе данных (например, идентифицируя шаблоны на изображениях), чтобы выполнить конкретную предопределенную задачу (например, обнаружение пожара).

Конечная цель модели машинного обучения - найти параметры алгоритма, которые оптимизируют производительность модели, чтобы модель могла адекватно обобщать и хорошо работать с новыми данными.

В области машинного обучения существует множество методов, одними из самых популярных являются искусственные нейронные сети (ИНС), которые смутно вдохновлены биологическими нейронами человеческого мозга.

Сверточные нейронные сети

Подобно ИНС, сверточные нейронные сети возникли в результате изучения человеческого мозга, за исключением того, что на этот раз метод пытается имитировать (смутно) нейронные паттерны, расположенные в зрительной коре головного мозга.

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

Несмотря на то, что CNN является разновидностью алгоритма глубокого обучения, структурно и функционально он отличается от «полностью связанных сетей глубокого обучения». Вдохновленные новаторскими исследованиями зрительной коры, проведенными Дэвидом Хьюбелем и Торстеном Визелем, слои CNN не являются полностью связанными сетями, следуя механизмам «локальных рецептивных полей», обнаруженных в нейронах зрительной коры, каждый слой нейронов будет реагировать только на расположенные зрительные стимулы. в ограниченной области «поля зрения».

Некоторые нейроны будут реагировать только на изображения горизонтальных линий, в то время как другие будут реагировать на вертикальные или диагональные линии. Некоторые нейроны будут реагировать на сложные формы и также будут иметь более крупные рецептивные поля. Благодаря этим открытиям мы заметили, что нейроны более высокого уровня основаны на выходных сигналах соседних нейронов более низкого уровня.

В 1998 году Ян Лекун представил знаменитую архитектуру CNN «LeNet-5», известную своим использованием в банках для распознавания рукописных номеров чеков. В этой известной архитектуре есть некоторые строительные блоки, которые уже использовались в традиционных полносвязных сетях глубокого обучения, такие как плотные слои или сигмовидные функции активации, однако она вводит два новых строительных блока: сверточные слои и уровни объединения.

Основной составляющей сверточной нейронной сети является сверточный слой. Сверточные слои отвечают за применение «фильтров». Фильтры идентифицируют определенные функции с помощью «матричной» операции, известной как свертка. Результатом свертки будет карта характеристик (т. Е. Выделенные особенности входных данных).

Слои объединения проще для понимания, их роль заключается в уменьшении сложности CNN, вычислительной нагрузки и переобучения за счет уменьшения или сжатия входных данных (т. Е. Изображения).

Общая структура CNN может быть представлена ​​как последовательность сверточных слоев, отвечающих за идентификацию функций (например, линий, кругов, форм и т. Д.), И уровней объединения, отвечающих за снижение вычислительной нагрузки сети. Более глубокие слои могут определять сложные формы, в то время как слои нижнего уровня определяют более простые формы.

Примечание. Дополнительные сведения о том, как работают сверточные слои, будут представлены в веб-приложении проекта (например, карты объектов, фильтры).

Проблемы и улучшения

Из-за природы данных (то есть изображений) и размера набора данных было очень неразумно обучать модели с использованием ЦП, к счастью, Google Colab и Kaggle предоставляют доступ к графическому процессору, что сделало обучение очень быстрым.

Наборы данных о пожарах и пешеходах, используемые в версии Alpha v0.4.1, относительно малы и нуждаются в улучшении. Модель пожара по-прежнему предсказывает множество ложных срабатываний (например, изображения с большим количеством желтоватых пикселей или ярких пикселей), а модель пешехода не может хорошо работать с изображениями с большим количеством компонентов, таких как автомобили, здания и несколько объектов. на земле, например, на дорожных знаках.

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

Другие улучшения для следующих версий:

  • Скорость предсказания
  • Трансферное обучение
  • Модель Производительность
  • Реализация CIFAR100 (увеличение количества объектов, способных к классификации)
  • Доступ к API

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

Я надеюсь, что этот отчет мотивирует и вдохновит вас на поиски новых решений, которые могут принести равенство, мир, безопасность, здоровье и еду в руки жителей городов по всему миру. Концепция умного города может показаться соблазнительной и создать впечатление, что технология сама по себе станет спасителем человечества. Это ошибочное мнение, что только с умными людьми неравноправные и бедные города превратятся в умные города.

Тебя ждет город будущего.

- Пэрис Молло