Британские исследователи научили свёрточную нейросеть распознавать время на стрелочных часах с точностью до минуты. Для обучения они использовали нарезку видеокадров, в которых мелькают такие часы, а также искусственные изображениях часов с циферблатом. Для этого потребовалось разработать отдельный алгоритм, генерирующий изображения часов в разных ракурсах с добавлением искажений от нерезкости, тени или дополнительных линий. После обучения нейросеть смогла правильно определить время на изображениях реальных часов в 75—85 процентах случаев.
Обучающий набор нейросети: сгенерированные изображения часов с циферблатом в разных ракурсах и видеоролики с идущими часами.
Самые распространённые типы часов в наше время — часы с цифровым дисплеем и «аналоговые», обычно выполненные в виде круглого циферблата со стрелками. Для определения времени по циферблатным часам необходимо обладать определёнными навыками считывания информации исходя из пространственной ориентации объектов (в данном случае — двух или трёх стрелок, ориентированных по кругу циферблата). Для большинства взрослых людей эти навыки являются очевидными настолько, что мы о них не задумываемся и одинаково хорошо считываем время с обоих типов устройств. Но для нейросетей и систем компьютерного зрения «аналоговый» дисплей значительно сложнее цифрового. Компьютеры хорошо понимают, что показывают цифровые индикаторы на снимках — здесь задача напоминает задачу распознавания текста, с которой программное обеспечение давно успешно справляется. Кроме того, разные цифровые дисплеи выглядят более-менее одинаково. Циферблаты же бывают выполнены с огромным разнообразием форм, а цифры могут располагаться на них самым причудливым образом — их даже может не быть совсем. Кроме этого, на считывание влияют различные искажения на реальных снимках, в частности, тени, а также угол расположения камеры по отношению к циферблату. Исследователи Оксфордского университета попробовали восполнить этот пробел в машинном обучении и научить нейросети пользоваться часами со стрелками. Все данные проекта можно найти в репозитории на github, кроме того, статья по итогам разработки доступна на arXiv.org.
Архитектура нейронной сети для определения времени на изображении, содержащем часы с циферблатом.
В качестве наборов для обучения и испытания модели можно использовать множество готовых изображений, содержащихся в различных базах, специально создаваемых для разработки нейросетей. Авторы использовали две крупные базы COCO (Microsoft Common Objects in Context) и OpenImages, из которых взяли в сумме более трёх тысяч аннотированных изображений циферблатов часов. В дополнение они разработали генератор виртуальных стрелочных часов, затем использованный для создания обучающего набора данных. Алгоритм создаёт изображения часов в разных стилях, под разными углами и со случайным положением стрелок. К изображениям можно добавлять артефакты и искажения, которые встречаются на реальных снимках. В основном это нерезкость, тени, а также случайные линии, которые могут быть на реальных циферблатах, например, частью дизайна и которые машинное зрение могло бы перепутать со стрелками. Обучение модели проходило на таких сгенерированных изображениях и на 3,5 тыс. видео из интернета, содержащих идущие часы со стрелками.
Один из последних кадров фильма «Часы» — ровно полночь.
В распоряжении создателей нейросетей для таких задач удачно оказался ещё один готовый набор данных, который также использовали авторы — артхаусный фильм 2010-го года «Часы» Кристиана Марклея. Он представляет собой 24-часовую нарезку сцен из тысяч фильмов, в которых в кадре демонстрируются часы самых разных форм и под разными ракурсами. Режиссёрский замысел помог выполнить «разметку» этого набора данных в том смысле, в котором это понимается в машинном обучении. Сцены в фильме смонтированы так, что показания на часах на экране в каждый момент совпадают с течением реального времени демонстрации фильма с 00:00 до 24:00. Поэтому изготовить размеченный кадр с часами из фильма (изображение часов + указание информации о времени для нейросети) можно просто, взяв соответствующую метку времени. Как минимум это облегчает работу, избавляя от необходимости вручную проставлять время на 1244 использованных кадрах из фильма.
Процесс считывания времени нейросетью проходит в несколько этапов. Первичная обработка после определения циферблатных часов на снимке заключается в деформации циферблата таким образом, чтобы он «смотрел» прямо в кадр. Это задача для свёрточной сети преобразований (Convolutional Transform Network). После этого другой алгоритм занимается непосредственно распознаванием времени на стрелках.
После обучения на искусственно созданных изображениях с дефектами и видеороликах с часами работу нейросети проверили на реальных фотографиях из трёх тестовых наборов. Инженерам удалось добиться считывания времени с часов со стрелками с точностью до минут. В качестве метрики для оценки качества обучения можно выбрать правильное определение отдельно часа, минуты, или и того и другого с разной точностью, учитывая, что стрелки на циферблатах в реальном мире могут иметь самый разный дизайн вплоть до того, что машине не под силу отличить часовую стрелку от минутной. Всего на 4472 изображениях часов (две базы фотографий и кадры из фильма «Часы») удалось правильно определить время в 73—85 процентах случаев в зависимости от набора данных и критерия «правильности» считывания.
Автоматическое определение времени нейросетью на фотографиях из тестового набора.
Источник: