«За кулисами» разработки сложного продукта компьютерного зрения:
● решение проблемы запуска модели обнаружения объектов на слабом оборудовании
● работа с ложноположительными результатами и несбалансированным набором данных.
● обучение машины различать практически идентичные виды птиц.
Компьютерное зрение привлекло интерес предпринимателей во всем мире, и не зря: возможности современных технологий искусственного интеллекта превращают ранее невозможные идеи в реальные продукты.
Обнаружение и классификация объектов на фотографиях и видео нашли применение в самых разных областях и сотнях систем — от камер видеонаблюдения со встроенным распознаванием лиц и обнаружения заболеваний на основе рентгеновских снимков до простых мобильных приложений.
Но хватит вступлений, в этой статье я хотел поделиться «за кулисами» разработки продуктов компьютерного зрения, особенно сложных.
У меня была возможность поработать над Birdsy — приложением для распознавания птиц для людей, которые хотят видеть, кто посещает их дворы, пока они не смотрят.
Birdsy — это сложное приложение на базе искусственного интеллекта, позволяющее обнаруживать и классифицировать объекты в режиме реального времени, которое должно работать на слабом оборудовании и с высокой точностью определять типы и пол птиц.
Учитывая все это, путь от первоначальной идеи до публикации приложения в магазинах приложений был сложным и в то же время увлекательным.
Мы столкнулись со многими препятствиями — как со стороны бизнеса, так и со стороны развития — и я решил поделиться ими в одном месте, чтобы, надеюсь, помочь предпринимателям и разработчикам ИИ, которые могут столкнуться с тем же проектом.
Задача под рукой
Птицам потребовались миллионы лет эволюции, чтобы идеально сливаться с окружающей средой и избегать хищников и, в данном случае, орнитологов, что затрудняет им любование дикой природой.
Хотя наблюдение за некоторыми видами птиц лицом к... клюву может быть проблематичным, наблюдение за ними с помощью видеокамеры, не выходя из дома, является прекрасным способом насладиться нашими крылатыми друзьями, особенно если искусственный интеллект избавляет от необходимости просматривать многочасовые видеозаписи и отправлять их вы оповещаете, когда птица попадает в поле зрения камеры, автоматически определяя, какой это вид птиц.
Бердси состоит из двух частей:
Обнаружение объектов — нейронная сеть, отвечающая за обнаружение присутствия птицы или млекопитающего.
Классификация объектов — нейронная сеть, отвечающая за определение того, какой вид птиц или млекопитающих был пойман.
Некачественные камеры обнаружения объектов
Чтобы сделать услугу более доступной и простой в использовании, для наблюдения за птицами можно использовать любую камеру. Здесь мы столкнулись с первой проблемой: камеры низкого качества, поскольку они самые доступные и самые распространенные.
Хотя «без ограничений по камере» отлично подходит для пользователей, для нас это стало проблемой, поскольку модель обнаружения объектов работает с использованием набора микросхем камеры.
Там, где кто-то получает выгодную сделку, другие получают короткую часть палки, в данном случае «другими» являются наши разработчики резюме. Работа с дешевой камерой означает работу с дешевым чипсетом, который делает невозможным использование архитектуры нейронной сети по умолчанию.
По сравнению с лучшим золотым стандартом видеокамер компьютерного зрения (NVIDIA Jetson Nano), который позволяет использовать около 120 слоев YOLO v4 по умолчанию, камеры, с которыми нам приходилось работать, допускали только 22 слоя.
Там, где полная нейронная сеть YOLO v4 обеспечивает отличные результаты распознавания, урезанная версия работает плохо. Мы протестировали оба варианта и были неприятно удивлены тем, насколько низкой оказалась глубина модели при использовании дешевого чипсета.
Тестирование YOLO v4 по умолчанию и уменьшенного
Мы начали с обучения модели YOLO v4 по умолчанию и тестирования ее на наборе данных заказчика. Достигнутые результаты оказались удовлетворительными — 95% mAp, что в мире компьютерного зрения более чем достаточно для запуска модели в производство.
После переобучения модели под параметры камеры качество обнаружения значительно упало. Но там, где машины терпят неудачу, люди продвигаются вперед.
Мы протестировали нейронную сеть на тестовых данных и визуально оценили ложноположительные и ложноотрицательные результаты. Это выявило, где сети не хватает знаний и где она допустила больше всего ошибок.
Мы не что иное, как млекопитающие или ложные срабатывания
Сеть стремилась распознавать людей, особенно руки людей, как животных (и мы этого не виним, ведь люди ЯВЛЯЮТСЯ животными). Хотя с биологической точки зрения это правильно, конечному пользователю больше интересно смотреть на птиц, чем на своих соседей, поэтому нам пришлось поработать над тем, чтобы научить сеть игнорировать людей и вместо этого сосредотачиваться на птицах и млекопитающих.
Для этого мы добавили негативные примеры, в том числе изображения людей в разных ракурсах, а также человеческие руки.
Что скрывается в темноте
Камеры имеют два режима: обычный дневной режим, который создает полноцветные изображения, и ночной инфракрасный режим, который создает черно-белые изображения. Когда камера переключилась на инфракрасный режим, модель выдавала множество ложных срабатываний:
листья деревьев движутся на ветру
насекомые, такие как мотыльки, которых привлекает теплая камера.
фонтаны
Пользователи были бы менее чем счастливы, если бы их разбудило уведомление, с волнением посмотрели бы на сову или лису, но в конечном итоге увидели бы запись, на которой мотылек бьется своим телом об объектив камеры.
Чтобы свести перерывы во сне к минимуму, мы собрали случаи ложных срабатываний в ночных условиях и отметили их вручную.
Инстаграм против реальности
Слышали ли вы когда-нибудь о том, что социальные сети называют «роликом ярких моментов», где люди представляют лучшую версию себя? Кто знал, что то же самое может быть справедливо и для диких животных.
Фотографии птиц, которые можно получить из открытых источников, таких как изображения Google или видеоролики на YouTube, обычно высокого качества, очень резкие и лучше всего изображают экземпляры, смотрящие в камеру или, по крайней мере, расположенные спереди, без ничего между птицей. и камера, закрывающая обзор.
Реальность не всегда столь красива. Камеры создают изображения низкого качества, из-за которых даже человеческому глазу трудно понять, что происходит, плохие погодные условия, такие как дождь, снег или пыль, могут затруднить обзор, и мы уверены, что птицы чувствуют, когда кто-то хочет их заснять, и позиционируют себя самым нелепым образом.
Набор данных, предоставленный клиентом (состоящий из изображений, найденных в Интернете), не пригодился для этого проекта.
Нам нужно было собрать набор изображений птиц в реальных условиях с помощью камер клиента, чтобы показать модели, как птицы выглядят на самом деле , а не как их представляют в социальных сетях.
Что мы имеем сейчас
Итак, после выполнения всего вышеперечисленного:
вручную просматривая каждый случай, когда сеть была неправильной
научить сеть игнорировать людей и не распознавать в них птиц или млекопитающих
работа с черно-белыми изображениями и ложными срабатываниями
сбор данных о птицах в реальных условиях, под разными углами и в разных погодных условиях
Нам удалось достичь 97,5% mAP для обнаружения объектов. Это очень высокий результат для модели компьютерного зрения, поскольку негласным правилом для любой модели CV, поступающей в производство, является наличие более 94% mAP.
Достижение совершенства (почти)
Хотя результатов, которых мы достигли сейчас, более чем достаточно для использования в конечном продукте, все еще есть возможности для улучшения.
сеть принимает цветы за птиц
вид с высоты птичьего полета сзади до сих пор иногда остается загадкой
птицы частично закрыты случайными предметами
птицы рядом с камерой
После того, как для каждой группы будет собрано достаточно изображений, мы ожидаем, что mAP увеличится и достигнет 98,5%.
Модель классификации изображений
Следующий шаг в знакомстве с посетителями вашего двора — передача изображения с птицей в модель классификации объектов. Его цель — распознать вид птиц и их пол.
Поскольку некоторые виды птиц обитают исключительно на определенных континентах, мы решили создать две модели — одну для тех, кто живет в Северной Америке, и одну для тех, кто живет в Европе.
Шаг за шагом: урок многоступенчатых нейронных сетей
Первоначально задача классификации объектов решалась «в лоб»: в сети демонстрировались фотографии всех видов, как самцов, так и самок, по которым пытались узнать, как они выглядят и чем отличаются друг от друга. другой.
Это привело к очень низким показателям точности, иными словами, сеть допустила массу ошибок при определении видов птиц и млекопитающих.
Сеть пыталась изучить слишком много аспектов одновременно. Многие виды птиц очень похожи друг на друга и отличаются друг от друга одним пятном перьев разного цвета или клювом разной формы.
Сохранить всю эту информацию, а также то, как выглядят разные полы одного и того же вида, в данных обстоятельствах слишком сложно. Сеть часто смешивала виды птиц, правильно определяя более широкий тип птиц.
Например, разница между хохлатой камышовкой и камышевкой из Кентукки в пятне черных перьев:
Сеть пометит певчую камышевку как камышовку из Кентукки, что даст неправильный результат, но в целом верный: обе камышевки ЯВЛЯЮТСЯ. Чтобы сэкономить время, клиент решил, что важнее определить общий тип птицы, а не ее конкретный вид, поэтому мы начали с этого.
После оценки модели мы решили реализовать многоэтапный подход:
все виды птиц были сгруппированы в более общие категории: орлы, воробьи, вороны, голуби и т. д.
сеть сначала определит общий тип птицы
второй шаг - определить, какой это вид
последнее - определить, является ли птица самцом или самкой.
Сгруппировав виды птиц, нам удалось уменьшить количество классов с 98 до 49, что значительно улучшило показатель точности, поскольку в сети просто не было такого количества классов на выбор.
Практика приводит к совершенству, даже для машин
Когда вы сталкиваетесь с новой концепцией, вы читаете книги или смотрите образовательные видеоролики, чтобы понять ее. Если у вас не получается, вы просите друга объяснить вам это или посещаете семинар по этой теме. Другими словами, вы пытаетесь накопить больше информации об этом, чтобы лучше понять это.
То же самое касается и нейронных сетей. Чем лучше вам нужно изображение, чтобы понять, как выглядит камышевка, тем больше изображений славок вам нужно, чтобы это показать. Чем больше данных было рассмотрено, тем выше будут показатели точности.
Выбранный нами многоэтапный подход не только повысил точность модели классификации объектов, но и позволил проанализировать набор данных и определить, где в сети не хватает обучающих данных.
Проблема гадкого утенка
После запуска модели классификации объектов мы с удивлением получили результаты, которые оказались намного хуже тех, что показали нам тесты: модель не смогла правильно определить вид или тип птиц.
Проблема была глубже: наш разработчик компьютерного зрения, отвечающий за весь проект, который сам изучил все виды птиц во время работы над ним, также не смог определить, что это были за птицы, когда он получил изображения, неправильно помеченные сетью. .
Оказалось, что июль — не лучшее время для запуска модели классификации птиц, поскольку это время, когда птицы-подростки учатся летать и покидают свои гнезда.
Помните историю о гадком утенке? Что ж, это верно для большинства птиц: птенцы совсем не похожи на взрослых птиц, и трудно понять, на какую птицу вы смотрите, если она еще молода.
За лето мы собрали изображения молодых птиц и планируем обучить классификационную сеть определять разные виды птиц в разном возрасте.
Командная работа заставляет сеть работать
Орнитологи — страстные люди, они знают, как идентифицировать птицу по форме ее единственного пера. Они обладают знаниями, о которых мечтает наша классификационная сеть, так почему бы не объединить их и не сформировать союз любителей птиц, которого мир никогда раньше не видел?
В настоящее время классификационная сеть не просто сообщает пользователю вид птицы, она показывает степень достоверности наряду с другими предположениями.
Пользователь может подтвердить предположение сети или исправить его, тем самым помогая нам обучать ее — по одной птице за раз. За 3 месяца работы системы обратной связи с пользователями мы собрали более 20 тысяч изображений. Эти данные для нас неоценимы, поскольку фотографии сделаны в реальных условиях (плохие погодные условия, ночью и т. д.) и размечены экспертами.
Когда ты смотришь в бездну, бездна щебечет тебе в ответ.
Стоит отметить, что в ходе этого проекта мы сами стали экспертами по птицам. Глядя на птиц целый день и одновременно обучая виртуального ребенка всем небольшим различиям между разными видами воробьев, человек мгновенно становится платиновым членом сообщества наблюдателей за птицами.
Если ничего не помогает, члены нашей команды CV могут легко найти себя в орнитологии.
А если серьезно, просматривая тысячи изображений птиц, будь то для разметки набора данных или для анализа того, где сеть допускает больше всего ошибок, мы углубились в этот проект и вышли на другом конце не только с кучей знаний о птицах, но и с большим количеством знаний о птицах. лучшее понимание того, как работают сложные системы распознавания и классификации изображений, как их лучше всего реализовать, как анализировать большой набор данных и находить его слабые места.
Этот проект имел для нас неоценимую возможность исследовать и работать с новейшими технологиями компьютерного зрения, работать с отзывами клиентов в режиме реального времени и оттачивать свои навыки решения проблем при работе с устаревшим кодом.