Как стать автором
Обновить

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

Время на прочтение11 мин
Количество просмотров3.1K
Распознавание птиц при помощи камер и искусственного интеллекта, проект компании «Технологика»
Распознавание птиц при помощи камер и искусственного интеллекта, проект компании «Технологика»

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

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

Содержание статьи

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

  2. Обучение нейросети №1, обнаруживающей птиц через камеру

    1. Сложность 1

    2. Сложность 2

    3. Сложность 3

    4. Сложность 4

    5. Итоги обучения нейросети №1

  3. Нейросеть №2

    1. Проблема 1

    2. Проблема 2

    3. Проблема 3

    4. Командная работа

  4. Планы на развитие проекта

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

  6. Команда

  7. Стэк

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

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

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

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

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

Схема ИИ-проекта по наблюдения за птицами
Схема ИИ-проекта по наблюдения за птицами

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

2. Нейросеть №1: обнаружение птиц в объективе камеры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • мы тщательно изучали и отрабатывали те случаи, когда сеть неправильно отрабатывала

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

  • дополнили датасет изображениями птиц в реальных условиях, под разными углами и в разных погодных условиях

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

График процесса обучения модели и улучшения показателей её качества
График процесса обучения модели и улучшения показателей её качества

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

  • сеть ошибочно принимает цветы за птиц;

  • птицы не всегда определяются как птицы, если сидят спиной к камере;

  • птицы не всегда определяются как птицы, если частично чем-то закрыты;

  • сеть плохо определяет слишком близко находящихся к камере птиц.

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

4. Нейросеть №2: определение видов птиц

После того, как камера определила в объективе птицу и сделала видеозапись, за дело берется нейросеть №2. Она должна распознать вид птицы, определить её пол и условно возраст. 

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

Проблема #1: Немного о legacy code

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

Из-за нехватки времени нам пришлось продолжить с того места, на котором остановилась другая команда, вместо того, чтобы начинать с нуля. Это уже довольно “классическая ситуация” в среде разработки. 

Работать с чужим кодом в сжатые сроки — значит идти на компромиссы. Для нас это была работа с YOLO v4 для классификации объектов. YOLO отлично справляется с задачами обнаружения объектов, но не является оптимальным выбором для задачи классификации объектов. Мы должны были выжать максимум из того, что у нас было.

Мы работаем над созданием системы классификации объектов с нуля с использованием фреймворка Torch, на данный момент система основана на YOLO v4 и неплохо определяет виды птиц.

Проблема #2: Шаг за шагом

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

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

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

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

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

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

  • все виды птиц были сгруппированы в более общие категории — орлы, воробьи, вороны, голуби и т. д.;

  • нейросеть должна научится определять общий тип птицы;

  • вторым шагом - определить, какой это вид;

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

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

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

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

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

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

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

Сравнение внешнего вида птиц двух пород
Сравнение внешнего вида птиц двух пород

Проблема #3: проблема гадкого утенка

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

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

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

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

Командная работа: нейросеть и эксперты

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

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

Количество фотографий в датасете по каждому классу объектов
Количество фотографий в датасете по каждому классу объектов

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

5. Планы на будущее

Как упоминалось ранее, использование архитектуры YOLO v4 — не лучший выбор, когда речь идет о классификации объектов. Пока мы собираем больше данных для набора данных, а пользователи помогают нам обучать сеть, мы планируем переделать систему классификации объектов с нуля. Для этого есть несколько причин:

  • мы хотим повысить точность классификации птиц;

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

  • мы хотим реализовать более точное распознавание видов птиц;

  • мы хотим реализовать распознавание птиц мужского и женского пола.

В настоящее время мы находимся на стадии исследования и тестирования, изучаем различные сети и подходы к реализации:

  • модель «оркестр» - основная классификационная модель определяет тип птицы, после чего передает изображение на меньшую модель, которая определяет вид птицы и ее пол;

  • векторные представления объектов - альтернативный подход к классификации птиц (метрическое обучение или  metric learning), этот подход позволяет работать с большим количеством классов при небольшом количестве данных по многим из классов. Мы убрали объединение птиц в группы и начали обучение и тесты данного подхода. Специфика данного решения в том, что при обучении нейросети для метрического обучения мы преследуем цель, отличную от классического подхода (в классическом подходе мы хотим построить оптимальную разделяющую гиперплоскость), а при данном подходе хотим, чтобы нейронная сеть построила структуру в векторном пространстве признаков. Эта структура будет отвечать требованиям: объекты одного класса находятся близко, а объекты различных классов - далеко. Как мы видим на визуализации результата, нам это удалось.

Визуализация векторного представления объектов
Визуализация векторного представления объектов

Если долго смотреть в бездну, бездна чирикнет тебе в ответ

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

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

Мы продолжаем работать над ИИ-проектом по наблюдению за птицами и очень скоро поделимся обновлениями!

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

  1. Анализ требований и ознакомление с данными заказчика. 

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

  3. Доработка датасета заказчика

  4. Тестирование нейронной сети, отвечающей за детектирование присутствия птицы или млекопитающего в кадре

  5. Корректировка нейронной сети, отвечающей за детектирование птиц 

  6. Обучение нейронной сети, отвечающей за классификацию птиц или млекопитающих

  7. Тестирование нейронной сети, отвечающей за классификацию птиц или млекопитающих

  8. Корректировка нейронной сети, отвечающей за классификацию птиц или млекопитающих

  9. Запуск проекта в продакшн: клиент начал продажи камер и сервиса 

  10. Доработки и корректировки нейронной сети, отвечающей за классификацию птиц или млекопитающих

  11. Поддержка проекта

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

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

  • 2 ai-developer

  • 1 project manager

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

  1. Нейронная сеть, детектирующая объект в кадре камеры: Darknet yolo v.4, caffe

  2. Нейронная сеть, классифицирующая объекты в кадре: Pytorch + Lightning, EfficientNet

Спасибо за внимание! Оставайтесь на связи, впереди еще много интересных ML-кейсов.

Теги:
Хабы:
Всего голосов 2: ↑2 и ↓0+2
Комментарии1

Публикации

Истории

Работа

Data Scientist
60 вакансий

Ближайшие события