기준 최신 2D 자세 추측 모델의 추론 속도
개시하다
2D 포즈로 추정하면 오픈포스트가 유명하지만, SOTA는 매년 업데이트하고 Jetson에 탑재할 수 있는 경량 비즈니스 모델도 등장한다.앱을 만드는 토대 위에서 현재 추론 속도가 얼마나 되는지 알고 싶어서 조사해봤어요.최근 모델의 연산량이 공개된 것 같은데 최종적으로 Jetson Nano의 실측값(이번에는 서버 사용)을 확인하고 싶다.
부수적인 샘플 코드를 사용해 빠르게 평가한다는 방침이어서 공정한 비교가 없을 수 있으니 참고가 되길 바란다.오류 지적 등을 환영합니다.
기준 조건
COCOCOval 2017의 모든 이미지에 대해 데이텀 개체 모델로 포즈를 추정한 결과 총 시간/장수(5000장)가 FPS였다.카메라에서 입력한다고 가정하면 추론은 한 과정에서만 순서대로 실행된다. (실제로는 중첩될 수 있다.)
탑다운(Top-Down) 방식은 사람의 Bbox를 입력하기 때문에 사람을 감지하는 시간은 포함되지 않지만, 사람의 감지와 자세 추측을 할 수 있는 배관 동작을 하는 전제에서 자세로 추정되는 추론 시간에 따라 FPS를 계산한다.한편, Bottom-Up 방식은 각 이미지의 추론 시간에 따라 FPS를 계산합니다.
운영 환경
Hardware
COCOCOval 2017의 모든 이미지에 대해 데이텀 개체 모델로 포즈를 추정한 결과 총 시간/장수(5000장)가 FPS였다.카메라에서 입력한다고 가정하면 추론은 한 과정에서만 순서대로 실행된다. (실제로는 중첩될 수 있다.)
탑다운(Top-Down) 방식은 사람의 Bbox를 입력하기 때문에 사람을 감지하는 시간은 포함되지 않지만, 사람의 감지와 자세 추측을 할 수 있는 배관 동작을 하는 전제에서 자세로 추정되는 추론 시간에 따라 FPS를 계산한다.한편, Bottom-Up 방식은 각 이미지의 추론 시간에 따라 FPS를 계산합니다.
운영 환경
Hardware
Software
데이터 세트
COCO val2017
평가 모델
최신 2D 포즈 추정 모델(OpenPose 포함)에는 총 8개의 벤치가 있다.모델의 초파라미터는 가장 가볍다고 여겨지는 것과 정밀도가 좋다고 여겨지는 것을 마음대로 선택한다(경량의 모델을 찾으려면 정밀도가 좋은 모델은 참고 정도이기 때문이다).
Top-Down 방식
Bottom-Up 모드
결실
AP를 가로축으로 하고 FPS를 세로축으로 하여 차트를 그립니다.성능을 추구하기 때문에 FPS의 결과는 상당히 심각하다.특히 탑다운(Top-Down) 방식은 이미지에 나타난 사람 수에 비례해 연산량을 늘렸기 때문에 애플리케이션에 맞는 디자인이 필요하다.
성능은 Dark Pose가 우수하며, TransPose가 Bbox 단위로 가장 빠릅니다.Bottom-Up 방식은 OpenPose 이외에 FPS가 낮고 용도가 제한적입니다.
Top-Down 방식
Bottom-Up 모드
총결산
최신 2D 자세 추정 모형을 벤치로 표시해 보았다.다음에는 정밀도를 눈을 감고 추론 속도가 빠른 모델을 중심으로 추론 속도의 고속화에 대해 토론하고 싶습니다.
부록: 실행 방법 노트
TopDown 방식
Deep High-Resolution-Representation-Net
최신 2D 자세 추정 모형을 벤치로 표시해 보았다.다음에는 정밀도를 눈을 감고 추론 속도가 빠른 모델을 중심으로 추론 속도의 고속화에 대해 토론하고 싶습니다.
부록: 실행 방법 노트
TopDown 방식
Deep High-Resolution-Representation-Net
$ python3 tools/test.py --cfg experiments/coco/hrnet/w32_256x192_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pose_hrnet_w32_256x192.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX False \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/coco/hrnet/w32_256x192_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pose_hrnet_w32_256x192.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX True \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/coco/hrnet/w48_384x288_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pose_hrnet_w48_384x288.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX False \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/coco/hrnet/w48_384x288_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pose_hrnet_w48_384x288.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX True \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 GPUS '(0,)'
Fast Human Pose Estimation
$ python3 tools/test.py --cfg experiments/fpd_coco/hrnet/w32_256x192_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pose_hrnet_w32_student_FPD.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX False \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 100000 \
WORKERS 4 GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/fpd_coco/hrnet/w32_256x192_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pose_hrnet_w32_student_FPD.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX True \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 100000 \
WORKERS 4 GPUS '(0,)'
DarkPose
$ python3 tools/test.py --cfg experiments/coco/hrnet/w32_256x192_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/w32_256×192.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX False \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 \
GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/coco/hrnet/w32_256x192_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/w32_256×192.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX True \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 \
GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/coco/hrnet/w48_384x288_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/w48_384×288.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX False \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 \
GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/coco/hrnet/w48_384x288_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/w48_384×288.pth \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX True \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 \
GPUS '(0,)'
TransPose
$ python3 tools/test.py --cfg experiments/coco/transpose_r/TP_R_256x192_d256_h1024_enc3_mh8.yaml \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX False \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4
$ python3 tools/test.py --cfg experiments/coco/transpose_r/TP_R_256x192_d256_h1024_enc3_mh8.yaml \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX True \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4
$ python3 tools/test.py --cfg experiments/coco/transpose_h/TP_H_w48_256x192_stage3_1_4_d96_h192_relu_enc6_mh1.yaml \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX False \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 \
GPUS '(0,)'
$ python3 tools/test.py --cfg experiments/coco/transpose_h/TP_H_w48_256x192_stage3_1_4_d96_h192_relu_enc6_mh1.yaml \
TEST.FLIP_TEST False \
TEST.USE_GT_BBOX True \
TEST.BATCH_SIZE_PER_GPU 1 \
PRINT_FREQ 1000000 \
WORKERS 4 \
GPUS '(0,)'
Lite-HRNet
- naive_litehrnet_18_coco_256x192.py의 keypointhead의 in채널을 40에서 30으로 변경합니다 (pre-traained 모델과 일치하기 위해).
- use_gt_bbox는 config 파일로 지정됩니다.
$ python3 tools/test.py configs/top_down/naive_litehrnet/coco/naive_litehrnet_18_coco_256x192.py \
pre-trained/naive_litehrnet_18_coco_256x192.pth
$ python3 tools/test.py configs/top_down/lite_hrnet/coco/litehrnet_18_coco_256x192.py \
pre-trained/litehrnet_18_coco_256x192.pth
Bottom-Up 모드
OpenPose
$ time ./build/examples/openpose/openpose.bin --image_dir data/coco/images/val2017 \
--display 0 --num_gpu 1 --write_json result.json --render_pose 0 --logging_level 2 --disable_multi_thread
HigherHRNet
$ python3 tools/valid.py --cfg experiments/coco/higher_hrnet/w32_512_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pytorch/pose_coco/pose_higher_hrnet_w32_512.pth \
TEST.FLIP_TEST False \
TEST.LOG_PROGRESS True
$ python3 tools/valid.py --cfg experiments/coco/higher_hrnet/w32_512_adam_lr1e-3.yaml \
TEST.MODEL_FILE models/pytorch/pose_coco/pose_higher_hrnet_w32_512.pth \
TEST.SCALE_FACTOR '[0.5, 1.0, 2.0]' \
TEST.FLIP_TEST False \
TEST.LOG_PROGRESS True
HRNet-DEKR
$ python3 tools/valid.py --cfg experiments/coco/w32/w32_4x_reg03_bs10_512_adam_lr1e-3_coco_x140.yaml \
TEST.MODEL_FILE model/pose_coco/pose_dekr_hrnetw32_coco.pth \
TEST.LOG_PROGRESS True \
TEST.FLIP_TEST False \
PRINT_FREQ 10000
$ python3 tools/valid.py --cfg experiments/coco/w32/w32_4x_reg03_bs10_512_adam_lr1e-3_coco_x140.yaml \
TEST.MODEL_FILE model/pose_coco/pose_dekr_hrnetw32_coco.pth \
TEST.LOG_PROGRESS True \
TEST.FLIP_TEST False \
TEST.NMS_THRE 0.15 \
TEST.SCALE_FACTOR 0.5,1.0,2.0 \
PRINT_FREQ 10000
$ python3 tools/valid.py --cfg experiments/coco/w48/w48_4x_reg03_bs10_512_adam_lr1e-3_coco_x140.yaml \
TEST.MODEL_FILE model/pose_coco/pose_dekr_hrnetw48_coco.pth \
TEST.LOG_PROGRESS True \
TEST.FLIP_TEST False \
PRINT_FREQ 10000
$ python3 tools/valid.py --cfg experiments/coco/w48/w48_4x_reg03_bs10_512_adam_lr1e-3_coco_x140.yaml \
TEST.MODEL_FILE model/pose_coco/pose_dekr_hrnetw48_coco.pth \
TEST.LOG_PROGRESS True \
TEST.FLIP_TEST False \
TEST.NMS_THRE 0.15 \
TEST.SCALE_FACTOR 0.5,1.0,2.0 \
PRINT_FREQ 10000
Reference
이 문제에 관하여(기준 최신 2D 자세 추측 모델의 추론 속도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tutu/items/72a51a4de01ba98159b5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)