Как запустить OpenPose с Spatial Temporal Fields менее чем за 5 минут
Carnegie Mellon выпустили свой репозиторий оценки поз пару лет назад, что позволило разработчикам быстро получить доступ к ресурсам OpenPose и использовать их. На практике требуется довольно много времени, чтобы запустить OpenPose и все его ресурсы.
Один из участников OpenPose CMU (SoulSlicer) выпустил живую версию STAF для обнаружения и отслеживания поз нескольких человек в режиме реального времени. Это означает, что OpenPose использует поля пространственно-временной близости. Это делает оценку позы более точной за счет просмотра вперед на один кадр и назад на один кадр и не позволяет текущим ключевым точкам тела отклоняться слишком далеко в любом направлении от того, что находится впереди или позади него. Это делает его гораздо более точным. Для получения более подробной информации о специфике OpenPose-STAF вы можете ознакомиться с этой статьей, Статьей на Medium этого замечательного джентльмена или с этим видео на YouTube.
Вот репозиторий SoulSlicer для OpenPose-STAF. Вот мой форк с работающими изменениями. Мне пришлось изменить вызываемую модель с Body_21 на Body_25, чтобы она работала правильно. Модели находятся в папке models/pose. Вот докер, который я создал, чтобы вы могли мгновенно запустить OpenPose-STAF в режиме реального времени.
Начать
Вам понадобится графический процессор, чтобы иметь возможность запускать OpenPose, я рекомендую такой сервис, как AWS EC2 или Google Cloud.
В настоящее время протестировано и запущено в экземпляре Google Cloud:
Регион: US-West-1b Конфигурация машины: n1-standard-8 (8 виртуальных ЦП, 32 ГБ памяти) Графический процессор: 1 Nvidia Tesla K80 Образ ОС: Образ для глубокого обучения: TensorFlow 1.15.0 m41 (TensorFlow 1.15.0 с CUDA 10.0 и Intel® MKL-DNN, Intel® MKL.) Размер диска: 500 ГБ Примечание: если вам нужен сервер jupyter, вы должны разрешить трафик http/https и иметь статический IP-адрес.
# Launch instance, then pull Docker
docker pull broderickhigby/openpose-staf:latest
Чтобы попасть внутрь контейнера, введите:
docker run -it --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0broderickhigby/openpose
Запустить вывод
Скопируйте видео в папку the./video внутри вашего док-контейнера, набрав:
docker cp <container id>:<file dir inside docker> .
Вы можете получить идентификатор контейнера, набрав docker ps в работающем контейнере Docker.
Выполнить вывод (обработать видео)
Убедитесь, что вы находитесь внутри своего контейнера внутри папки openpose/, а затем вам нужно будет запустить одну из следующих команд в зависимости от того, настроили ли вы отображение для своего докера или нет.
Для серверов (без дисплея или в докере)
Вы можете взять свое. Вам нужно вставить сюда название вашего видео, i.esddf. ./build/examples/openpose/openpose.bin --video <VideoName> --write_video <VideoName> --write_json output/ --model_pose BODY_25 --render_pose 2 --tracking 0 --number_people_max 1 --display 0
Для локальных машин (когда у вас есть дисплей)
В большинстве случаев у вас не будет дисплея в докере (если вы не настроили его для этого). Если у вас есть дисплей, вы можете запустить что-то похожее на эту команду, чтобы получить живые результаты OpenCV:
build/examples/openpose/openpose.bin --model_pose BODY_25 --tracking 1 --render_pose 1 --write_video <VideoName> --write_json output/ --video <VideoName>
Сохранить изменения контейнера Docker
sudo docker commit CONTAINER_ID nginx-template
Рекурсивно сохранить видео из выходной папки
Как только ваше видео будет обработано, вы должны увидеть сообщение об успешном выполнении с указанием времени, которое потребовалось, а затем вы сможете получить его из докера и просмотреть в процессе. docker cp как и раньше. На этот раз вам нужно будет переключить from, to around как таковой:
Docker cp <from location> : <to location> .
Если вам нужны JSON, вы можете заархивировать всю папку, как показано ниже.
cd video
tar -czvf openpose-staf-jsons.tar.gz output
Когда дело доходит до OpenPose, существует множество различных вариантов. Чтобы получить помощь по флагам, введите: build/examples/openpose/openpose.bin --help
Будущее OpenPose-STAF
Как поясняется в документе, одним из ограничений является то, что этот метод пока не может обрабатывать изменения сцены. Это потребует обновления состояния или перезапуска алгоритма для новой сцены. Кроме того, из-за меньшей пропускной способности сети крошечные люди в непосредственной близости не обрабатываются, а также более глубокая сеть с большим весом. Это то, что нужно исследовать и в будущем.
Я надеюсь, что это поможет продвинуть вперед сообщество Computer Vision. Дайте мне знать, если у вас есть какие-либо вопросы или мысли!