• Login
  • Register
No Result
View All Result
CADS Blog
  • Engineering
  • Data Science
  • Product
  • Life At
  • Career
  • Engineering
  • Data Science
  • Product
  • Life At
  • Career
No Result
View All Result
CADS Blog
No Result
View All Result

Human Pose estimation: An overview

Pose estimation là một tác vụ thị giác máy tính ngày càng phát triển và có nhiều ứng dụng trong cuộc sống như nhận diện hành động, gaming, robotics, ... Trong bài viết này, chúng ta sẽ cùng tìm hiểu từ định nghĩa đến việc chạy một mô hình pose estimation.

Hoan Nguyen by Hoan Nguyen
03/10/2022
in Data Science
Reading Time: 7 mins read
A A
0
0
SHARES
1.1k
VIEWS
ShareShareEmail

Mục lục

Toggle
  • Pose estimation là gì ?
    • Định nghĩa
    • Phân loại
    • Ứng dụng
  • Skeleton-based pose estimation
    • Top-down pose estimation
    • Bottom-up pose estimation
  • Sử dụng Open-pose
  • Tài liệu tham khảo 

Pose estimation là gì ?

Định nghĩa

Human pose estimation (HPE) là tác vụ thị giác máy tính nhằm biểu diễn tư thế của một người ở định dạng đồ họa (graphical format).

Một mô hình pose estimation có nhiệm vụ xác định và phân biệt các khớp (joints) của cơ thể người (các keypoints), liên kết giữa các keypoint được gọi là pairs. Khi kết nối keypoints và pairs ta thu được một sơ đồ giống khung xương cơ thể người (skeleton) và bài toán xác định nhiều skeleton trong 1 khung ảnh còn được gọi là Multi-person pose estimation.

Sơ đồ các keypoints (COCO dataset)

Phân loại

Ta có thể phân loại các phương pháp pose estimation theo các tiêu chí sau

  • Theo hướng tiếp cận: Skeleton-based, Contour-based, Volume-based.

    Các hướng tiếp cận pose estimation
  • Theo tác vụ: Body, Face, Hand, Whole body, … pose estimation
Whole body pose estimation
  • Theo số chiều: 2D và 3D pose estimation.

    2D và 3D pose estimation

Ứng dụng

Pose estimation có nhiều ứng dụng trong thực tế và có thể kể đến một số ứng dụng như sau

  • Action recognition: Nhận diện hành động liên quan đến việc nhận biết, xác định vị trí và dự đoán các hành vi của con người trong video. Skeleton đặc trưng cho tư thế con người và có thể sử dụng làm đầu vào cho các mô hình giải quyết bài toán này. Trong bài viết  Action Recognition có đề cập đến các ứng dụng và các phương pháp nhận diện hành động trong đó có skeleton-based.
Skeleton-based action recognition
  • Gesture recognition: Đây là một bài toán cụ thể trong lớp bài toán Action Recognition, với mục đích là nhận dạng và phân loại cử chỉ tay của đối tượng trong video và hand keypoints có thể được dùng làm thông tin quan trọng để nhận diện các cử chỉ khác nhau.
Nhận diện cử chỉ sử dụng hand keypoints
  • Gaming: Ngoài ra pose estimation còn có nhiều ứng dụng trong gaming khi mô phỏng nhân vật theo hành động của con người.

Skeleton-based pose estimation

Trong phần này, ta sẽ cùng phân tích một số phương pháp pose estimation phổ biến hiện tại. Có thể chia các phương pháp nhận diện 2D-skeleton thành 2 nhóm là Top-down và Bottom-up.

Top-down pose estimation

Mô hình sử dụng phương pháp top-down sẽ phân vùng người có trong khung ảnh trước sau đó áp dụng bộ Single Person Pose Estimation (SPPE) để xác định các keypoints có trong mỗi phân vùng. Sơ đồ hoạt động của Alpha-Pose – mô hình top-down pose estimation có dạng như hình bên dưới.

Alpha-Pose (RMPE) pipeline

Với mỗi phân vùng mô hình sẽ dự đoán nhiều skeleton và sau đó sử dụng thuật toán non maximum suppression (Pose NMS) để chọn ra skeleton có độ chính xác cao nhất. Các mô hình top-down có độ chính xác và thời gian xử lý phụ thuộc vào mô hình nhận dạng người và sẽ tăng lên khi số lượng người trong khung ảnh tăng.

Bottom-up pose estimation

Mô hình sử dụng phương pháp bottom-up sẽ phát hiện tất cả các keypoints của mọi người trong ảnh, sau đó mới phân chia mỗi keypoint về từng người cụ thể. Luồng hoạt động của Open-Pose – một mô hình bottom-up pose estimation có dạng như hình bên dưới.

Open-Pose pipeline

Ảnh đầu vào OpenPose được đưa qua mạng VGG19 (10 layers đầu tiên) để trích xuất đặc trưng tạo thành tập feature maps F. Các đặc trưng này sau đó được đưa vào hai nhánh song song các lớp tích chập (two-branch multi stage CNN).

   Two-branch nghĩa là mạng CNN trả về 2 output khác nhau gồm Confidence maps (St) và Part affinity fields (Lt) :

  • Nhánh đầu tiên dự đoán keypoints của human skeletons (confidence maps of difference body parts location) – Parts
  • Nhánh thứ hai dự đoán một tập hợp 38 Part Affinity Fields (PAFs) thể hiện mức độ liên kết giữa các bộ phận đó – Pairs

   Multi-stage nghĩa là mạng CNN gồm nhiều stage liên kết, xếp chồng lên nhau. Stage đầu tiên nhận input là feature maps trích xuất từ backbone.Những stage tiếp theo có input là kết quả của stage trước ghép với feature map F.

Open-Pose có ưu điểm về thời gian xử lý so với các phương pháp top-down khi thời gian xử lý không thay đổi khi số lượng người trong khung ảnh tăng. Tuy nhiên trong khung ảnh có ít người, mô hình top-down có thể cho kết quả dự đoán keypoints tốt hơn.

Nhìn chung thì các mô hình pose estimation bên cạnh nhiệm vụ xác định chính xác các keypoints phải giải quyết các thách thức như thời gian chạy, hiệu quả của mô hình trong khung ảnh nhiều người, hỉnh ảnh mờ, hình ảnh chỉ chứa một phần cơ thể người, …

Sử dụng Open-pose

Trong phần này ta sẽ sử dụng Open-pose để dự đoán keypoint trong một khung ảnh cũng như trong một video.

Repo của tác giả Open-Pose (Zhe Cao) sử dụng tensorflow v1 có thể truy cập tại đây. Tuy nhiên ở phần này chúng ta sẽ sử dụng repo của tác giả Gunjan Sethi đã chuyển đổi lại để Open-Pose có thể hoạt động với tensorflow v2.

Các phần code dưới đây được viết để thuận tiện chạy trên google colab và có thể truy cập tại đây.

  • Tải repo Open-Pose về colab
# %%capture - don't show log info 
%%capture 
# clone repo
!git clone https://github.com/gsethi2409/tf-pose-estimation.git
%cd tf-pose-estimation/

# install requirement
!pip install -r requirements.txt
!pip install swig

# build open-pose
%cd tf_pose/pafprocess/
!swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace
!pip install git+https://github.com/adrianc-a/tf-slim.git@remove_contrib
%cd ../../

Tại đường dẫn tf-pose-estimation ta có các thư mục và các file như sau:

  • Thêm các thư viện cần thiết
import sys
import time
import os
from tf_pose import common
import cv2
import numpy as np
import tensorflow as tf
from tf_pose.estimator import TfPoseEstimator
from tf_pose.networks import get_graph_path, model_wh
import matplotlib.pyplot as plt
  • Tải pose model

Trong repo đã có sẵn các model Open-Pose với các backbone khác nhau như : CMU / Mobilenet_thin / Mobilenet_v2_large / Mobilenet_v2_small. Tuy nhiên model cmu có backbone VGG19  không có sẵn trong repo nên ta có thể tải về như sau:

%cd models/graph/cmu
!bash download.sh
%cd ../../..
  • Load pose model
%%capture
# Load model 'cmu / mobilenet_thin / mobilenet_v2_large / mobilenet_v2_small'
model = 'cmu';
w, h = model_wh('432x368');
e = TfPoseEstimator(get_graph_path(model), target_size=(w, h));
  • Tải hình ảnh và xác định keypoints
# load image
image_path = 'images/p3.jpg'
t_start = time.time()
frame = cv2.imread(image_path)
# estimate skeletons
humans = e.inference(frame, upsample_size=4.0)
# plot skeletons
frame = TfPoseEstimator.draw_humans(frame, humans, imgcopy=False)

plt.figure(figsize=(8,8))
plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))    
print(f'Inference time: {time.time()-t_start :.2f}s')
  • Kết quả

  • Phần code chạy OpenPose với video chi tiết có trong file Google Colab và có thể tham khảo tại đây.

Vậy là chúng ta đã tìm hiểu tổng quan về pose estimation cũng như sử dụng một mô hình pose estimation. Cảm ơn mọi người đã dành thời gian đọc đến đây và hẹn gặp lại mọi người tại những bài viết tiếp theo.

Tài liệu tham khảo 

  • A Comprehensive Guide to Human Pose Estimation
  • RMPE: Regional Multi-person Pose Estimation (Alpha-Pose)
  • Open-Pose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
  • https://github.com/ZheC/tf-pose-estimation
  • https://github.com/gsethi2409/tf-pose-estimation

How useful was this post?

Average rating 3.5 / 5. Vote count: 4

No votes so far! Be the first to rate this post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Previous Post

[Paper Reading] YOLO – You Only Look Once

Next Post

Gracefully Stop Spark Structured Streaming Jobs On YARN

Hoan Nguyen

Hoan Nguyen

Next Post

Gracefully Stop Spark Structured Streaming Jobs On YARN

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

  • Engineering
  • Data Science
  • Product
  • Life At
  • Career
WHO WE ARE?

© 2022 CADS - The Center of Applied Data Science by FPT Telecom

No Result
View All Result
  • Engineering
  • Data Science
  • Product
  • Life At
  • Career

© 2022 CADS - The Center of Applied Data Science by FPT Telecom

Join us