Распознавание птиц при помощи камер и искусственного интеллекта (часть 1)

Распознавание птиц при помощи камер и искусственного интеллекта (часть 1)

Распознавание птиц при помощи камер и искусственного интеллекта (часть 1)

Нейронные сети используются для множества задач, но слышали ли вы когда-нибудь про распознавание птиц? Мы – нет, поэтому возможность поработать над этим проектом очень нас захватила, а опыт по итогу оказался крайне интересным.

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

Бизнес-логика проекта

Наш клиент предполагает продавать своим потребителям предложение – сервис по распознаванию птиц и камеры, на которые будут фиксироваться птицы.

ИИ для наблюдения за птицами состоит из двух частей:

  1. обнаружение объекта - нейронная сеть, отвечающая за детектирование присутствия птицы или млекопитающего в кадре;
  2. классификация объектов - нейронная сеть, отвечающая за определение того, какой вид птицы или млекопитающего был снят.
     

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

Сегодня мы расскажем вам про первую нейронную сеть, отвечающую за обнаружение птиц в объективе камеры.

Сложность #1: некачественные камеры для обнаружения объектов

Чтобы сделать свой продукт доступным по цене, клиент провел маркетинговое исследование и выяснил цену, по которой клиенты готовы покупать камеры и сервис.

Единственное, на чем клиенту удалось сэкономить – камеры. Здесь мы столкнулись с проблемой оборудования. Клиент закупил дешевые китайские камеры.

Работа с дешевой камерой означает работу с дешевым чипсетом, что делает невозможным использование архитектуры нейронной сети по умолчанию. По сравнению с первоклассным золотым стандартом видеокамер компьютерного зрения — NVIDIA Jetson Nano, которая позволяет использовать около 120 слоев YOLO v4 по умолчанию, камеры, с которыми нам пришлось работать, допускали только 22 слоя.

То есть модель урезана в несколько раз. Там, где полноценная нейронная сеть YOLO v4 обеспечивает отличные результаты распознавания, “урезанная” версия работает плохо. На момент старта работ, YOLO v4 была самой актуальной версией.

Мы протестировали оба варианта и были неприятно удивлены тем, насколько низкой оказалась обобщающая способность модели (способность запоминать свойства объектов) при запуске на дешевом чипсете.

Как решили? Дефолтный YOLO v4 против “урезанной” модели

Мы начали с обучения дефолтной модели YOLO v4 и её тестирования на датасете заказчика. Достигнутые нами результаты оказались удовлетворительными — 95% mAp, чего в мире компьютерного зрения более чем достаточно для запуска в продакшн.

После адаптации модели под параметры китайской камеры, качество обнаружения сильно упало.

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

Сложность #2: люди и животные

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

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

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

Сложность #3: что скрывается в темноте?

Камеры имеют два режима – обычный дневной режим, при котором получаются полноцветные изображения, и ночной инфракрасный режим, при котором получаются черно-белые изображения.

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

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

Сложность #4: инстаграм против реальности

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

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

Обнаружение почти идеально: итоги обучения нейронки

Подытожим, что было проделано:

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

После выполнения всего вышеперечисленного, нам удалось добиться 97,5% mAP для обнаружения объектов. Это очень хороший результат для модели компьютерного зрения, поскольку все стремятся к минимуму для любой CV-модели – обнаружение более 94% mAP объектов.

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

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

После того, как будет собрано достаточно изображений для каждой группы (необходимо более 1000 изображений с камер), мы ожидаем, что mAP достигнет 98,5%.

Этапы разработки

  1. Анализ требований и ознакомление с данными заказчика;
  2. Обучение нейронной сети, отвечающей за детектирование присутствия птицы или млекопитающего в кадре;
  3. Доработка датасета заказчика;
  4. Тестирование нейронной сети, отвечающей за детектирование присутствия птицы или млекопитающего в кадре;
  5. Корректировка нейронной сети, отвечающей за детектирование птиц;
  6. Обучение нейронной сети, отвечающей за классификацию птиц или млекопитающих;
  7. Тестирование нейронной сети, отвечающей за классификацию птиц или млекопитающих;
  8. Корректировка нейронной сети, отвечающей за классификацию птиц или млекопитающих;
  9. Запуск проекта в продакшн: клиент начал продажи камер и сервиса;
  10. Доработки и корректировки нейронной сети, отвечающей за классификацию птиц или млекопитающих;
  11. Поддержка проекта.

На момент написания статьи проект прошел стадию №5 - корректировка нейронной сети, отвечающей за детектирование птиц.

Стек технологий

Darknet yolo v.4, caffe

Команда разработки

  • 2 ai-developer
  • 1 project manager
Классификация птиц при помощи искусственного интеллекта (часть 2)
Дни Карьеры НГУ 2022. Как это было?

Давайте найдем решение для вашего бизнеса!

Давайте найдем решение для вашего бизнеса!

Пожалуйста, заполните 'Имя'
Пожалуйста, заполните 'Телефон'
Пожалуйста, заполните 'Емейл'
Пожалуйста, заполните 'Сообщение'

Пожалуйста, заполните 'Имя и фамилия'
Пожалуйста, заполните 'Телефон'
Пожалуйста, заполните 'Емейл'
Выберите файл
Пожалуйста, выберите файл 'Резюме'
Выберите файл
Пожалуйста, прикрепите файл 'Код / ТЗ'