Практический пример использования модели детекции изображений
Всем доброго дня. Совсем недавно я закончила продвинутый курс от Deep Learning School. Курс объемный, много свежей информации. Мне, как закончившей прикладную математику (нейросетки, генетика, fuzzy logics) было не сильно сложно, но мега-увлекательно за счет того, что ребята очень заинтересованные и рассказывали про свежие интересные модели, еще и на русском языке. Приятно видеть, что ИИ-сфера в нашей стране тоже не стоит на месте.
В качестве проекта на курсе мне хотелось сделать своими руками что-нибудь эдакое и полезное, и одновременно мега-современное, и вот что я придумала. У нас есть частный дом, там есть дворовые коты, которых надо кормить и в мое отсутствие. А так же есть еще птицы, кроты, чужие вездесущие собаки и другая живность, которых не стоит кормить, если не хотим, чтобы они у нас все поселились. Так вот, а что, если прикрутить модель детекции изображений к умной кормушке? Далее было бы здорово научиться использовать голосовые команды, например, на закрытие кормушки. Интересненько :-)
Сразу замечу, это учебный проект, увлекательный но поверхностный процесс, о котором собираюсь рассказать в этой статье. Акцент сделаю именно на то, как можно пользоваться моделями детекции изображений на практике и что из этого всего может выйти. И чтобы не писать никаких специальных программ, воспользуемся очень популярным сервисом телеграмм-ботов, который есть почти в каждом смартфоне.
Логика предполагалась следующая:
- Кот приходит к кормушке, его снимает рядом стоящая IP камера и отправляет снимок в телеграмм-бот.
- Бот обрабатывает сообщение, если это фото, то отправляет его в модель детекции.
- Модель детекции распознает кота или не распознает.
- Если это кот, бот посылает сигнал умной кормушке открыться и уведомляет об этом владельца.
- Умная кормушка открывается (и потом закрывается по таймеру, например).
- Владелец в любой момент времени может подать голосовую команду, например, на закрытие кормушки через телеграмм-бот.
- Команда из голосовой преобразуется в текст.
- Если будет обнаружена команда "закрыть кормушку", бот отправит сигнал на закрытие кормушки и сообщение владельцу, что принял команду
Моделей детекции в современном мире тьма, в целях данной работы я выбрала Single Shot MultiBox Detector model for object detection (далее SSD-модель), разработанную компанией NVIDIA. Эта модель архитектуры глубоких нейронных сетей на основе модели ResNet-50 (победившей на соревнованиях ImageNet 2015 года), специально заточенная под детекцию изображений. Статья у нас практическая, не будем вдаваться в сложности архитектуры, только подчеркнем, что данная архитектура нейронных сетей стала практически стандартом качества и часто используется в задачах обнаружения объектов и сегментации изображений. SSD-модель заточена под быструю обработку и детекцию объектов даже в реальном времени, она обеспечивает высокую точность и быстроту обработки изображений.
1 часть: подготовка к работе
Писать будем на Python 3.11
Создаем новый проект, новое виртуальное окружение, в которое устанавливаем необходимые библиотеки.
Скачиваем и настраиваем выбранную модель: переводим ее в "боевой" режим. Расчеты следует производить на GPU или на CUDA, т.к. CPU будет считать очень долго и медленно. Я делала проект в Google Colab GPU
Монтируем google disk, на котором будем хранить все материалы
Подгружаем необходимые библиотеки
2 часть: реализация логики
Ниже пример самой простой логики обработки изображения нашей моделью. В целях нашей задачи мы обнаруживаем только кота, но возможности модели очень широкие - она может опознавать большое количество различных объектов и даже в онлайн режиме.
3 часть: создание телеграмм-бота
Бота создаем через @BotFather, в целях безопасности отдельно в файле сохраняем токен.
Пишем логику бота, наш бот будет уметь:
Здороваться
В рамках учебного проекта я не делала полноценную интеграцию с камерой, поэтому бот и модель детекции будет работать на примере загруженных в него фотографий. Справедливости ради стоит заметить, что реагировать данная модель будет на любого кота. Чтобы модель реагировала только на какого-то одного определенного кота, надо собрать отдельный дата-сет с фотографиями этого кота и дообучить скачанную и сохраненную модель на него.
Посылать сигнал на открытие кормушки при обнаружении кота
Обрабатывать команды пользователя в виде голосовых сообщений, в нашем примере будет реагировать только на одну команду "закрой кормушку". Код ниже наверняка можно оптимизировать.
4 часть: запуск!
Напрямую в Google Colab можно запустить бота вот так:
А можно выгрузить в облако, тогда бот будет работать круглосуточно и без необходимости держать открытым Google Colab. Например, в яндекс облако.
Вот такое интересное и практичное применение возможно моделям искусственного интеллекта, а не вот эти вот все скучные захваты мира))))
А что же дальше...
Главное - желание, а уж идеи найдутся. Например, можно дообучить модель. Собрать собственный датасет пользователя с его питомцем и оттюнинговать модель в целях повышения качества "узнавания" именно конкретно заданного домашнего питомца. Бескрайний простор работы с расширением функционала протокола взаимодействия с кормушкой и другими "умными" вещами, разнообразными датчиками и усложнение их логики. Подключение онлайн детекции питомца по потоковому видео.
Источники
Послесловие
Да, конечно, в обычных ситуациях проще купить систему умного дома, сейчас они получили широкое повсеместное использование. Но, как правило, в промышленное использование поступают наиболее распространенные запросы, наиболее популярные модели. Плюс на это требуется время. А вот с помощью предобученных моделей мы практически не ограничены в своих возможностях их использования.