В данном репозиториии представлена реализация нейросети для решение задачи Human Pose Estimation. Learning Feature Pyramids for Human Pose Estimation: https://arxiv.org/pdf/1708.01101.pdf . Также проделаны эксперименты с разными подходами обработки тепловых карт (heatmaps).
Данная нейросеть выглядит следующим образом:
Как видно нейросеть основана на PRM блоках. Они бывают различных видов PRM-A,PRM-B,PRM-C,PRM-D. В данном репозитории использовался PRM-A.
То есть пусть у нас входные данные имеют вид
где
Где
Для обучения используются тепловые карты (heatmaps). Пусть координата сустава равна
где,
В качестве функции потерь используется MSE. В качестве оптимизатора используется RMSProp с шагом 2e-5.
Данные взяты из датасета MPII Human Pose Dataset. Данные представляют собой изображения людей и анотации к ним. Для тренировки используется около 25 тыс. изображений и для валидации около 3 тыс. . В качестве анотаций нам даны координаты суставов, если суставов не видно на картинке их координаты равны (0,0) , вместо координат бокса в которой помещен был бы помещен человек используется координата центра бокса (center) и размер деленный на 200 (scale) (бокс квадрантый) . Подробнее про данные: https://odr.chalmers.se/bitstream/20.500.12380/253624/1/253624.pdf#page26
Очень важным качественного обучения была правильная агументация данных. Т.к. мы предсказываем точки на одном человеке, для тренировки нам также нужно использовать фотографии, где будет только один человек. Из-за того, что в датасете много фотографии где изображено несколько человек, мы будем вырезать нужного нам человека имея параметры center и scale. Но обрезание человека будет делаться специальным образом, чтобы сохранить прапорции тела, а также чтобы человек всегда был в центре фотографии.
Для данной трансформации воспользуемся следующей матрицей:
Где
Пример: Фото до:
Фото после:
Возникает вопрос как получить координаты из тепловых карт (heatmaps). Рассмотрим 4 способа.
1-ый самый-простой это просто применить argmax к карте.
2-ой это брать "центр тяжести" карты.
3-ий это находить две координаты с максимальными значениями и немного сдвигаться в направлении второго максимального значения.
4-ый с помощью функции максимального правдоподобия оценить
1.Применение argmax к карте
В данном случае
2.Центр тяжести карты
Где
3.Сдвиг ко второму максимальному значению
В данном случае вычисляем координаты
4. Оценка
Данный метод рассматривался в этой статье: https://arxiv.org/pdf/1910.06278.pdf
Что предлагают авторы в этой статье?
Допустим мы предсказали тепловую карту:
Тогда функция максимального правдоподобия равна:
Вычислим первую производную:
Разложим
Где
Из (5), (4), (3) Получаем
Посчитать производные мы можем с помощью численного дифференцирования:
Также для сглаживания тепловой карты можно применить Гауссовское ядро





