Как я могу использовать методы сглаживания для устранения дрожания в оценке позы?

Я получаю много дрожания при использовании OpenPose для извлечения данных позы из видео. Это выглядит неестественно, и мои результаты не выглядят естественными и человеческими.

Я должен работать с данными, полученными из модели OpenPose, и я не могу улучшить качество модели. Весь видеоклип обрабатывается, и 15 анатомических ключевых точек сохраняются в базе данных. Я хотел бы использовать некоторую обработку сигналов для сглаживания этих данных. Как мне избавиться от этого дрожания?

введите описание изображения здесь

1 ответ

Используйте фильтр Savgol для сглаживания данных.

использование фильтра savgol для сглаживания оценки позы

Gif на Imgur

Видео, показывающее разные уровни сглаживания.

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

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

Первым шагом в сглаживании является сбор данных поз для всего видео и сохранение их в файле.csv. save_pose_data.py

Иногда модель переворачивается. На следующем шаге части тела меняются местами, так что слева всегда слева. swap_body_parts.py

Часть тела № 9 - левое колено, а часть тела № 12 - правое колено. Иногда модель смешивает правое и левое колено. Я должен обеспечить:

x_coord for body part #9 < x_coord for body part #12

Итак, если № 9 осталось от № 12, я поменяю местами.

left_and_right_knees

Наконец пришло время применить сглаживание. Для 60 кадров в секунду я обнаружил, что значения от 9 до 31 хорошо работают для параметра window_length (чем ниже, тем меньше сглаживания, а выше - больше сглаживания). smooth_with_savgol.py

В этом gif правый локоть (зеленый) был сглажен, а левый локоть (розовый) нет.

введите описание изображения здесь

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

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

Или, может быть, попросите скелета попробовать горячий сидр вместо кофе:)

Другие вопросы по тегам