Распознавание птиц при помощи камер и искусственного интеллекта

Описание проекта

Распознавание птиц при помощи камер и искусственного интеллекта

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

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

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

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

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

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

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

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

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

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

Но у дешевых камер дешевый чипсет. На них невозможно использовать архитектуру нейронной сети по умолчанию. Золотой стандарт здесь – камеры NVIDIA Jetson Nano. Они позволяют использовать около 120 слоев YOLO v4 по умолчанию.

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

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

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

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

Ошибки нейросети при распознавании объектов в кадре в саду

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

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

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

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

Ошибки нейросети при распознавании объектов в тёмное время суток

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

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

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

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

Разница в датасете, собранном заказчиком, и реальных данных с камер наблюдения

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

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

Итоги обучения первой ИИ

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

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

Модель классификации

Изначально задача классификации объектов решалась «в лоб»: датасет состоял из фотографий птиц различных видов, а также у этих птиц была еще и половая дифференциация. На основе этих данных нейросеть пыталась узнать, как выглядят и чем они все отличаются друг от друга. Это привело к очень низким показателям точности — сеть делала много ошибок при идентификации видов птиц и млекопитающих.

Сравнение внешнего вида различных видов воробьёв

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

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

Пример сокращения классов на проекте

После оценки модели мы решили реализовать многоэтапный подход:

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

Сгруппировав виды птиц, нам удалось уменьшить количество классов с 98 до 49, что значительно улучшило показатель точности, поскольку у нейросети просто сократилось число классов, из которых надо было выбирать.

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

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

Проблема гадкого утенка

Сравнение внешнего вида взрослых птиц и птиц-подростков

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

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

Дообучение на реальных данных

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

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

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

Результаты

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

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

Хотите обсудить проект?

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