Как стать автором
Обновить

Детектирование частей тела с помощью глубоких нейронных сетей

Время на прочтение8 мин
Количество просмотров27K
Всего голосов 55: ↑55 и ↓0+55
Комментарии23

Комментарии 23

А как уточняющие сети могут уточнять положение суставов, если у них нет всей картинки? Если, например, картинки со спортсменами будут иметь разрешение UltraHD, то кусочек 220х220 в районе сустава особо полезной информации не предоставит. Или модель не рассчитана на такие данные? / Или я что-то не так понял?
Приведу простой пример.
Изначально есть большая картинка, на которой есть маленький человечек. Он на столько маленький, что, упихнув всю картинку в 220x220, становится еле видно его ноги и руки. Нейронная сеть на первом этапе находит их, но очень примерно. Далее же, мы уже откинем здоровенную часть исходной картинки, так как будем смотреть на кусочки вокруг предсказанных координат. Поскольку исходная картинка была большой, то на новых кусочках, упиханных в 220x220, будет отчетливее видны детали человечка. Поэтому следующий слой нейронной сети сможет сделать более точные предсказания.
Вот так это работает. Стало понятнее? Если нет, то спрашивайте.
В данном примере да. Но в моем примере на большой картинке есть такой же большой человечек. Не понимаю, как сети сработают в этом случае.
Если я правильно понял, то картинка произвольного размера масштабируется до необходимых размеров.
Нейронка специально этому обучалась, поэтому она может распознавать по частям тела, перекрытые объекты, объекты которые не в фас — иначе чудес не будет.

Для примера здесь процесс ручной аннотации — машина наполовину перекрыта трейлером. В нейронку при обучении попадает сама эта картинка и маска(уже с полным контуром машины).


Возьмем сложные картинки и пропустим через github.com/psycharo/cpm
Как видно, если картинка человека неполная, то нейронная сеть рисует суставы в том месте, где они должны были быть — получается полная фигня, естественно)

image
image
image
image
image
image
То есть модель не работает на больших картинках?
Размер картинки на входе сети фиксирован и это зависит от конфигурации модели.
Здесь вход это 650x400px и такого разрешения достаточно под эту задачу.
Это значит, что сделай мы модель под ultrahd, 4k,100500k мы получим такой же результат, а зачем платить больше?
Еще один кирпич в стену цифрового концлагеря.
Это дистанционный Бертильонаж.

Да, с такой штукой можно устроить идеальную массовую слежку. Вышел из метро — камера распознала лицо, а другая камера посмотрела как ты уходишь вдаль, ну, еще и походку записала.
И все, теперь нам подойдет домофонное качество видео, чтобы определить тебя за километр по походке — с распознаванием лиц такое не сработает, а тут прям идеально)
Интересующимся данной темой рекомендую посмотреть на проект openpose. Дает хорошие результаты в распознавании поз, лица и рук. Там же ссылка на датасет, на котором тренировалась их сеть.
а не будет ли точнее решена задача, если каким-нить «edge detection»-ом отделить «тело» от фона, а потом с помощью «ridig + nonrigid image registration» совместить изображение с наиболее подходящим из уже размеченных в заранее заготовленной базе?
Не могу знать наверняка. Однако решение, которое ищет позы в базе данных, кажется более ограниченным.
Можно погуглить, возможно кто-то ровно такое и делал.

1) Сети куда эффективней сегментируют сцену на человек/не человек, чем edge detector’ы на традиционном зрении.
2) Параметризовать человека, а потом пытаться вписать параметрическую модель в сцену, минимизируя какую-нибудь ошибку репроекции — это так раньше делали, но trainable подходы, основаные на сетках работают лучше. Посмотрите на видосики того, как работает DensePose, «классикой» вряд ли получится такое качество получить.

Видео там потрясные. Сделать такое «классическими алгоритмами» ну очень не просто.
image
image
я знаю рабочий подход для сегментации органов в 3D без нейросетей, но потом подумал: получается, что в 2D руки и ноги постоянно перекрывают друг друга, образуя «кашу», что делает задачу более нетривиальной.
Прелесть нейронки — она за один проход найдет все объекты, и за константное время. Все что нужно — аннотированный датасет и обучить сеть.
Теперь проще нанять тыщу индусов, которые будут аннотировать картинки, чем писать алгоритмы:)
в том и дело, что во время работы нейросети на результат мы получаем прелесть, а во время подготовки примеров и самого процесса обучения прелестями даже не пахнет )
Это не проблема — уволить сто программистов и нанять 10 тысяч людей, которое будут тупо смотреть на картинку и нажимать три кнопки. Потом и их заменят на нейронку) Корпорации уже держат такие отделы. Получается быстрее и результат — бриллиант.

Плюс, здесь мы решаем одну задачу — pose estimation, а с алгоритмами придется решить сто адовых задач, прежде чем мы дойдем хотя бы до выяснения позы. А у нас получается, что это как бы из коробки — мы сеть заставляем распознавать позы людей обучая на фото людей и инфе о позе — вот она и распознает сходу и людей, и позы.
А датчик расстояния ( как в кинекте) дает что то алгоритму или он не подходит?
Датчики глубины нужны для работы с облаком точек(Point cloud) это немного другая задача, здесь говорится о распознавании частей тела в координатах xy.
Т.е. в кинект его от балды прикрутили?
Нет, как я выше сказал это другая задача. Поясню, в случае когда мы захватываем изображение или видео поток с камеры мы имеем двумерное изображение в координатах xy и его мы обрабатываем как изображение соответственно на выходе мы тоже получим плоские координаты, это как раз тот случай что описывается в статье. Если стоит задача получить положение частей тела в пространстве (xyz), то нужно получить глубину и существует несколько способов это сделать например «склеивание» двух изображений на разном фокусном расстоянии, использование инфракрасных датчиков(как в кинекте или intel realseance), но в любом случае нужно трехмерное представление объекта. При любом выбранном способе мы получаем облако точек и условно говоря нейросеть уже в этом случае нужно обучать по объемным датасетам, а не по изображениям. Датчик расстояния для способа описанного в статье ни к чему в общем.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий