Pull to refresh

Comments 18

Очень необычный и оригинальный подход детектирования временных событий, спасибо за статью, а это на основе какой-то статьи или сами придумали?

Хорошо бы еще убедиться, что в первом случае сеть определяет именно различия, а не пятна, сгенерированные конкретным способом. Для этого можно нанести одинаковые дефекты на оба изображения, а на одном ещё несколько.
В третьем случае сеть может определять направление по позе человека. Чтобы убедиться, что она ловит именно движение, можно "проиграть" запись задом наперед (разместить кадры справа налево и снизу вверх).
А, вообще, прикольно

По первому случаю: обучение на дефектах одинаковой природы создаёт отпечаток образа этих дефектов внутри весов.

Я делал "проверку на вшивость" на реальной задаче. Искал дефекты печати при шелкографии.

На прикрепленных картинках тройки изображений.
Верхнее изображение: дефектное слева + нормальное справа
Среднее изображение: дефектное слева + дефектное справа
Нижнее изображение: GT для первого изображения

Примеры работы на реальных данных.
Примеры работы на реальных данных.

Отмечу, что Йолка чувствительна к размеру объекта на который она была обучена. В данном случае она не была обучена на огромные дырки в краске, как на первом и втором примере.

Бывает такое, что определяет дефекты просто потому, что они похожи на дефект. То есть правая часть не всегда играет роль. Пока что думаю, что это недостаточное обучение.

По третьему случаю: задача не только определить направление, но и поймать именно тот момент, когда человек на пороге. То есть "поза над порогом" тоже важна :)

Вот этой картинки мне и не хватало 😁

А как вы пришли к пониманию, как это работает? Как свертки, по вашему мнению, "видят" контект с соседних фреймов внутри слепленного кадра? На последнем примере F1 составила 0,6 при "бинарной" детекции. На первый взгляд вылгядит как детекция голов и угадывание (чуть лучше чем просто угадывать "вход" или "выход", возможно из-за дисбаланса классов) классов. Да и судя по Confusion matrix выглядит удручающе

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

как по мне, то метрики говорят о том, что процесс детекции похож на процесс угадывания

К точному пониманию как это работает я не пришел. Есть только догадки, которые не проверял. Появилась идея -> проверил на скорую руку. По результатам проверки есть намёки что оно работает.

Заметку как раз написал, чтобы послушать чужие мнения.

По поводу F1=0.6. Из кадров видно, что определение выходящего человека работает хуже. Оно может работать хуже по разным причинам:
1. Обучающий дотасет был сформирован автоматически. Причем следующим образом: При помощи дипсорта детектировался человек. Затем я для каждого человека (если он входит или выходит) брал 10й кадр его нахождения в поле зрения камеры. Считал что он примерно попадет на порог. Понятно, что далеко не все люди в обучающей выборке попали на порог. Но я их не фильтровал, обучал как есть.
2. Часто встречаются два FP детектирования. Одно на кадр раньше, второе - на кадр позже. Но они FP именно с точки зрения разметки. Такие ложные детектирования не мешают определять что человек вышел.

Спасибо за интересную статью!

Какую версию yola использовали?

Тоже размышлял над подобными экспериментами, все руки не доходили проверить. Не думали еще, вместо склейки двух взображений размещать их просто в слоях RGB? У вас в примерах серые изображения. Можно один кадр разместить в канале R, второй в G, а в B третий кадр или маску какую-нибудь.

Эксперименты сделаны еще на 5й yolo, год назад. Кажется, 8й еще не было:)

Да, вместо склейки двух кадров пробовал их размещать в разные каналы. Тоже работает. Там чуть сложнее становится с наглядностью), так как изображения начинают "рябить".
Остался пример батча GT и Prediction. GT - левая половина кадров, без числа в красной рамке. Правая половина, где есть число в рамке - prediction

GT - Prediction, при подаче кадров в разные каналы.
GT - Prediction, при подаче кадров в разные каналы.

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

Метрики сравнения двух методов.
Метрики сравнения двух методов.

получается поканально лучше. Если идет полная тренировка YOLO с самого начала, то мы спокойно можем сказать, что на вход подается не три канала (RGB), а сколько угодно.

Не понял Вас. Имеете в виду, что каждый элемент входного тензора - отдельный канал?

Изначально YOLO на вход принимает 3 канала (RGB). Мы можем подавать, к примеру, -3, -2, -1 кадр (черно-белый), текущий RGB и еще +1, +2, +3 кадр (тоже черно-белый для экономии). Получится 9 каналов на вход. Но это если мы сами обучаем нейросеть.

Для этого и архитектуру надо подправить. Моя Идея заключалась в том, чтобы архитектуру не изменять.

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

Sign up to leave a comment.

Articles