Обнаружение кошек визуально с помощью обнаружения аномалий

17

У меня есть хобби-проект, который я собираюсь посвятить как способ увеличить свой пока ограниченный опыт машинного обучения. Я взял и закончил Coursera MOOC по этой теме. Мой вопрос касается осуществимости проекта.

Задача следующая:

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

Я установил Raspberry Pi с модулем камеры, который может захватывать видео и / или фотографии части сада.

Образец изображения:

Образец изображения сада

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

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

Возможно ли это с помощью обнаружения аномалий? Если да, какие функции вы бы предложили? Мои идеи до сих пор заключаются в том, чтобы просто посчитать количество пикселей с определенными цветами; выполнить какое-либо обнаружение блоба / сегментацию изображения (чего я не знаю, как, и, следовательно, хотел бы избежать), и выполнить такой же анализ цвета на них.

иней
источник
1
Возможно, этот вопрос лучше подходит для сайта перекрестной проверки SE, теперь, когда я об этом думаю. Это различие для меня несколько непонятно ...
Мороз
4
Я думаю, что вопрос очень подходит для этого сайта, так как он обсуждает практическое применение машинного обучения. Кстати, глупый вопрос, почему так мало фотографий кошек? Они приходят только на пять секунд?
insys
@insys, слухи о моей бдительности в отношении мошенника, похоже, распространились в сообществе кошек. Они не задерживаются, как раньше. Я думаю, что это хорошая вещь без реальной цели избавления моего сада от кошек, хотя это усложняет мое предпочтительное, более сложное решение.
Мороз
2
Кажется очевидным, что следующий шаг (после того, как вы включите функцию обнаружения кошек) - это суперразбиватель с малиновым пи :-)
Kryten

Ответы:

8

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

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

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

bogatron
источник
1
Это хорошая идея для контролируемой среды, но я не уверен в ее применимости в этом случае, поскольку мы имеем дело с природной средой, в которой происходят постоянные изменения, то есть изменение погоды, положения солнца, растений и деревьев из-за ветер, времена года и т. д. Я считаю, что область изменений, как вы описываете, в любом случае приблизится к размеру всего изображения.
insys
@insys - я понимаю вашу точку зрения, но я не согласен - я считаю, что это делает детектор более устойчивым к изменениям. Разница во времени между относительными кадрами должна быть небольшой (~ секунды до минуты), поэтому солнце, время года, погода должны быть незначительными. Я согласен, что ветер заставит растения двигаться, но на этапе классификации их можно избежать, поскольку их размер / форма / цвет отличаются от кошек. Кроме того, использование двух кадров в одинаковое время позволяет нормализовать интенсивность пикселей, чтобы лучше справляться с различными условиями освещения (например, кошка в солнечный и облачный день).
Богатрон
На самом деле, я теперь более озадачен вашим ответом, когда я прочитал ваш комментарий :) Возможно, я неправильно понял, но если вы на самом деле используете «извлеченные регионы изменений» для формирования положительных образцов, как упоминалось в вашем вопросе, как вы вообще делаете уверены, что они кошки? Они могут быть чем угодно. Таким образом, ваш этап классификации не сможет обнаружить ничего, кроме того, что учат обнаруживать, то есть изменений любого рода. Так что это фактически повторяет работу детектора «изменений».
insys
Кроме того, условия освещения, безусловно, вызывают беспокойство, но, если я правильно понимаю, неясно, что два похожих изображения, сделанные с разницей в 1 минуту, могли бы предложить для нормализации интенсивности пикселей?
insys
Извлеченные регионы могут представлять как положительные, так и отрицательные примеры - именно их вы бы использовали для обучения классификатора кошек. Что касается интенсивностей, предположим, что классификатор обучен из регионов, извлеченных в основном из солнечных изображений. Тогда классификатор может легко найти кошек с ярко-белым мехом, но это не сработает позже в облачный день (когда белый мех не такой яркий) или почти в сумерках. Выполнение нормализации двух изображений помогает смягчить эту проблему (т. Е. Пара ярких изображений и пара тусклых изображений будут похожи на классификатор).
Богатрон
4

Это интересный и достаточно амбициозный проект :)

Я не уверен, что обнаружение аномалий (по крайней мере, в том смысле, как описано в курсе, которому вы следовали) было бы очень подходящим алгоритмом в этом случае.

Я бы посчитал, что более жизнеспособным подходом будет то, что обсуждалось в конце того курса, где был продемонстрирован рабочий процесс Photo OCR.

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

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

Теперь, конечно, как легко построить точный детектор кошек, это другая тема ..

INSYS
источник
И что будет, если ваш блок разделит разрез на два или более кусочка? Стратегия блокировки является очень распространенным подходом, но, с моей точки зрения, когда камера полностью зафиксирована в определенном положении, обнаружение движения является лучшим и менее трудоемким подходом.
adesantos
@adesantos - То, что вы говорите, вполне может быть правдой, и для предсказания различие между движущимися и неподвижными частями имеет свои преимущества. Но для обучения, как это описывает bogatron, неясно, какие преимущества он приносит на стол. В целом, я считаю, что это добавляет сложности, что значительно удлиняет время отладки. Преимущество перемещения окна заключается в его простоте.
insys
Кстати, в отношении упомянутого вами разделения, очевидной стратегией является перекрытие окон, чтобы позиция разделения не влияла на ваш классификатор.
insys
Я бы добавил к своему предложению (обнаружение движения) использование алгоритма SIFT с текстурой кошки. Метод SIFT также можно использовать с этой стратегией блоков, но в этом случае вы будете сравнивать больше блоков, чем требуется. Обратите внимание, что кошка двигается, но дерево или куст не так много.
adesantos
3

Стратегия обнаружения движения / изменения, безусловно, адекватна, но я бы добавил дополнительную операцию. Я бы обнаружил те области, которые с большей вероятностью могут быть изменены, например, лестница кажется местом, где люди могут быть (также кошками), и травой, где могут быть собаки, кошки или люди.

Я бы захватил карту с размером объекта и траекторией, и с помощью этого я бы создал кластер с целью обнаружения объекта (с определенным размером на изображении в пикселях), который движется с определенной скоростью и траекторией.

Вы можете достичь этого с помощью R или я бы предложил OpenCV для обнаружения движения и отслеживания различных объектов.

adesantos
источник
2

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

vrfsdbelbeml
источник
1

Это птица? Это кот? У нас черно-белая кошка размером! Сороки здесь. так что не получится.

Первым делом следует исключить все зеленые области, кошки редко зеленые.

Затем сравните остальное с эталонным изображением, чтобы удалить статические вещи, такие как камни и лестницы.

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

С двумя камерами вы можете сделать трехмерное отображение объектов и устранить летающие объекты.

user1164
источник