Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Привет, Хабр, меня зовут Антон Рябых, работаю в Doubletapp. Расскажу вам о том, как мы придумали сервис, контролирующий поведение водителей общественного транспорта с помощью алгоритмов машинного обучения и компьютерного зрения.
К нам обратилась компания «Термотех», которая занимается городскими перевозками. Организатору движения нужно было автоматически понимать, что:
водитель общественного транспорта не пользуется телефоном во время движения;
камера, установленная в салоне водителя, снимает с верного ракурса, не отвернута в сторону;
от камеры в целом идет сигнал, она не повреждена, не завешена и не загрязнена.
Ранее задача решалась силами сотрудников «Термотеха» — они вручную просматривали все записи с камер видеонаблюдения, установленных в кабинах водителей. Такой подход занимал огромное количество времени и все равно приводил к ошибкам, основанным на человеческом факторе.
Как мы решали эту задачу
Машинное обучение
Для обучения сети совместно с клиентом был собран и размечен датасет из 40 000 изображений. Там были водители с телефоном и без, фото с неверными ракурсами или иными ошибками отображения. Особенностью фотографий было их разнообразное качество: часто изображение было не очень четкое, некоторые снимки черно-белые, многие сделаны при плохом освещении, иногда ночью. Классы изображений были сильно несбалансированы: на большинстве фото не было телефона или ошибочного ракурса.
Первым подходом с использованием машинного обучения была классификация фотографий по наличию телефона или неверного ракурса. В нахождении класса наличия телефона этот подход показал себя не очень точным. Анализ работы нейронной сети через построение heatmap показал, что сети с трудом удается найти телефон и отличить его от других похожих объектов, которые могут быть на водительской панели.
Тогда вместо задачи классификации мы оформили решаемую проблему как задачу детекции: разметили bounding-boxes телефонов на изображениях и использовали сеть для детекции объектов. Наличие разметки телефонов дополнительно позволило использовать больше аугментаций изображений: теперь мы исключали вариант, при котором в случае неверной обрезки телефон может пропасть из кадра, при этом фото останется в классе с наличием телефона.
Решение задачи через детекцию позволило добиться искомой точности. Детекция осуществлялась через нейронную сеть с архитектурой YOLOv3.
Для создания решения использовался язык Python и фреймворки Tensorflow + Keras, для деплоя — Tensorflow-Serving.
Backend
Для работы системы был разработан Backend на Django, получающий фотографии из общественного транспорта через API видеосистемы. Фото анализировались на наличие ошибок и хранились на сервере. В административной панели можно было увидеть ошибки, найденные на фото. В случае, если система обнаружения ошибок срабатывала неверно, оператор помечал фото как неверно обработанное и указывал, к какому типу его действительно нужно было отнести: таким образом собирались данные для дальнейшего дообучения нейронных сетей.
Мы настроили мониторинг, чтобы разработчики сразу же получали сигнал об ошибках в работе системы.
Как это работает?
• Камеры установлены в кабинах у водителей общественного транспорта.
• Система Bus Factor по API получает фото с камер, анализирует их на предмет нарушений, выставляет каждому фото соответствующий обнаруженным нарушениям статус.
• Сотрудник клиента видит все записи с транспортными средствами, у которых обнаружены нарушения, и действует по инструкции.
• В случае обнаружения ошибочного срабатывания системы, сотрудник клиента может пометить ошибочный статус, и впоследствии это фото будет использовано при дообучении нейронной сети.
• Поиск телефона в кадре, проверка ракурса и работы камеры реализованы при помощи нейронных сетей.
Внедрение нашей системы сократило затраты человеко-часов в 30 раз. Теперь операторам необходимо только перепроверять некоторые ответы машины, а не отсматривать все видео самостоятельно. Клиент отмечает, что с появлением нашей технологии значительно повысилась дисциплина водителей.