본문 바로가기
프로그램/SKT FLY AI

SKT FLY AI : 35일차

by hsloth 2023. 8. 11.

HPE(Human Pose Estimation)


  • 사람의 관절이나 중요 신체부위를 keypoint로 지정하여 사람의 자세를 예측하는 기술

2D HPE란?


  • 입력 이미지로부터 사람의 2D 관절 좌표(x,y)를 추정하는 기술

2D HPE 방법론

  • Heatmap-based approach vs Regression-based approach
  • Top-down approach vs Bottom-up approach

Headmap-based approach

  • 입력 이미지로부터 각 관절이 나타날 확률(heatmap)을 추정
  • Gaussian filter를 통해 Ground truth heatmap 생성
  • Heatmap으로 부터 J번째 관절 위치(최대 pixel value를 갖는 위치)와 confidence value(pixel value)출력
  • 학습 방법*
  • 2D 관절 정답 좌표를 히트맵으로 변환
  • 모델에서 추정된 히트맵과 오차를 줄이는 방향으로 학습(L2 Loss)
  • 입력 이미지에 관절 위치를 알 수 없는 경우? Loss를 0으로 지정

특징

  • 2D HPE에서 일반적으로 사용
  • Optimization이 쉽고, 일반화에 강건함
  • 정확도가 높음
  • 공간적인 위치정보를 보존함
  • 히트맵 크기에 따라 연산량이 커질 수 있음

Regression-based approach

  • 입력 이미지로부터 ent-to-end 방식으로 2D 관절 좌표를 직접 추정하는 방식

학습 방법

  • 모델에서 추정된 2D 관절 좌표와 2D 정답 관절 좌표와의 오차를 줄이는 방향으로 학습

특징

  • 효율적이며 실시간 어플리케이션에 적합
  • 입력 이미지로부터 관절 좌표 맵핑이 비선형적이기 때문에 local optimum에 빠지기 쉬움

Top-down aproach

  • Human detection(e.g. YOLO) + single person pose estimation
  • 사람 영역만을 검출하여 모델에 입력되므로 상대적으로 정확도가 높음
  • Human Detector에 관절 추출 성능이 좌우됨
  • 사람 영역 검출 후 관절 좌표를 추출하기 때문에 연산량이 상대적으로 많음

Bottom-up approach

  • Joint detection + grouping
  • 원본 이미지로부터 여러 사람 관절을 직접 추출하기 때문에 연산량이 상대적으로 적음
  • 관절 추출에 사용되는 사람영역 이미지가 저해상도일 수 있음

2D HPE 평가방법

  • Percentage of Correct Keypoints (PCP)
  • Percentage of Detected Joints (PDJ)
  • Percentage of Correct Keypoints (PCK)
  • Average Precision (AP)
  • Object Keypoint Similarity (OKS)

2D HPE 모델링 순서

  • 전처리
  • Architecture
  • Loss
  • 평가
  • 후처리

전처리

이미지 데이터 전처리

  • 이미지 Crop (Top-down approach 적용)
    • 입력 이미지에서 사람 영역에 해당하는 부분만을 자르는 방법
    • 인물 관절 좌표를 기준으로 상하좌우 10~20% 만큼 margin 확보
  • 이미지 Resize
    • 딥러닝 모델 입력 크기에 맞도록 이미지 사이즈를 변환
    • 학습 데이터셋의 사람 영역 이미지 Height:Width 비율에 따라 달리질 수 있음
  • Normalization
    • 데이터의 범위를 사용자가 원하는 범위로 제한하는 것
    • 학습 속도를 높이고 Local optimum에 빠지는 확률을 낮춤
  • 이미지 Normalize
    • 이미지 데이터를 RGB 각 채널 평균을 뺀 뒤, RGB 각 채널 표준 편차를 나누어 정규화
    • 위 수치는 많은 Vision 모델들의 pretraining에 사용된 ImageNet 데이터셋의 평균 및 표준편차

관절 데이터 전처리

  • 관절 좌표 위치 변환
    • 원본데이터에서 관절 좌표 위치를 Crop된 바운딩 박스 기준 좌표 위치로 변환 하는 것
  • 관절 좌표 -> 히트맵 변환 (heatmap-based-approach)
    • 각 관절 별로 가우시안 필터링을 적용한 히트맵이미지를 생성(J x H x W)
  • 관절 좌표 normalize (regression-based approach)
    • 바운딩 박스 이미지 내의 절대좌표를 0.0~1.0 사이의 값으로 normalize

HPE에서 활용되는 데이터 증강 예시

  • Random rotation
  • Random scale
  • Horizontal Flip

Architecture

딥러닝 네트워크 구성

  • Backbon : 입력 이미지로부터 feature map 추출
  • Neck : Backbone과 Head사이를 이어주는 연결부
  • Head : feature map으로 부터 원하는 결과를 만드는 단계

Stacked Hourglass(2016)

  • 8개의 hourglass module을 쌓은 모델
  • Maxpooling을 통한 low resolution feature 생성 -> upsampling을 통한 high resolution feature 생성 과정을 반복
  • Intermediate supervision으로 정확도 향상

Hourglass module

  • Bottom-up, Top-down Inference : 여러 scale에 걸쳐 필요한 정보를 포착
    • 얼굴, 손과 같은 작은 부분의 식별 뿐만 아니라 몸 전체 부분에 대한 식별
  • Residual module : 몇 개의 layer를 건너뒤어 skip connections을 적용하여 gradient vanishing(기울기 소실) 문제 완화

Stacked Hourglass with Intermediate supervision

  • 최종적으로 예측된 heatmap을 통해서만 loss를 구하지 않고, hourglass module 사이사이에 heatmap에 대해서도 추가적으로 loss를 구해 적용함으로써 틀린 부분을 보다 정교하게 보정4
  • 이전 hourglass 모듈의 결과값과 현재 hourglass 모듈의 결과값을 결합

**Simple Baseline(2018)

  • 단순한 네트워크 구조로 높은 성능 달성
  • BackBone : ResNet50, Head: Three Deconv. Layer
  • ResNet50 : 입력 이미지를 32배 downsample, Three Deconv. : 8배 upsample
  • Deconv. layer는 고해상도의 rich semantic information을 뽑기 위함

Deconvolution

  • feature map의 크기를 증가시키는 연산
  • CNN의 최종 결과물을 다시 반대로 되돌려 입력 사이즈를 만들어내고 싶을 때 활용 (e.g. semantic segmentation)
  • 과정 : 입력 픽셀 주위에 zero-padding을 추가 -> Convolution 연산

HRNet(2019)

  • 이전 HPE 모델 문제점
    • BackBone에서 입력 이미지가 downsample되어 저해상도 feature map을 초래
    • 저해상도 featuremap에서는 인간의 작은 파트(손목 등)이 사라질 수 있음
  • 고해상도 feature map을 전체 프로세스 내내 보존, 저해상도 featuremap을 병렬적으로 추가
    -> 한번도 up/down sample되지 않은 feature map으로 인해 정확도 향상
  • Multi-Scale feature fusion : 더욱 강인한 feature추출을 가능하게 함

ViTpose(2022)

  • 현재 2D HPE 분야 Top rank 성능(APL 81.1 on COCO)
  • Backbone : Vision Transformer
  • Head : Simple Decoder (4 Scale Upsample -> ReLu -> 3 x 3 Conv)

Transformer

  • NLP에서 높은 성능을이끌고 있는 모듈
  • 입력으로 들어오는 token들 사이의 correlation을 계산하고 correlation에 기반하여 모든 token feature을 aggregate

Vision Transformer

  • NLP 분야에서 활용된 transformer를 컴퓨터비전에 적용한 네트워크

  • CNN에 의존하지 않고 이미지 패치의 시퀀스를 입력값으로 사용하여 CNN 기반의 모델 성능을능가

  • Transformer의 Encoder부분 활용

  • 장점

    • 높은 연산 효율성과 확장성
      • 모델 크기를 다양하게 조절 가능
      • Transformer의 레이어를 쌓거나, feature dimension을 쉽게 늘리거나 줄일 수 있음
      • 데이터셋과 모델 크기가 계속 커져도 모델 성능이 포화되지 않고 지속적으로 개선
    • Transfer learning시 CNN보다 연산량이 적음
  • 단점

    • Inductive bias가 부족하여 CNN보다 더 많은 데이터 필요
    • Inductive bias : 모델이 처음보는 입력에 대한 출력을 예측하기 위하여 사용하는 가정
  • 과정

    • 이미지 패치 단위로 자르기
    • 위치 정보를 포함하도록 Positional Embedding 추가
    • Class 정보를 포함하는 [CLS] 토큰을 제일 첫부분(0번)에 추가
    • Patch를 Flatten(Linear Projection) 한 뒤 Transformer encoder에 입력
    • Transformer encoder를 거쳐 나오는 [CLS] 토큰 값을 MLP Head에 넣어서 Class를 예측

MAE(Masked AutoEncoder)

  • 기존 vision task에서는 ImageNet을 활용하여 backbone 사전학습 -> Pose estimation task와는 거리가 멀고 많은 양의 데이터 필요
  • 적은 양의 Pose 데이터셋으로 BackBone 사전학습을 진행
  • Patch의 일부를 마스킹 하면서 Encoder의 끝 부분에서 마스킹 된 부분을 추축하도록 하는 방식

Bilinear Interpolation

  • x, y의 2차원에 대해 보간법을 통해 필요한 값을 채우는 방법

Mask R-CNN(2017)

  • 기준 Top-down approach와 차이 -> 입력 이미지에서 사람 영역을 crop and resize
  • RolAlign -> 입력 이미지가 아니라 feature map에서 crop and resize
  • Human detection과 pose estimation이 공유 -> e2e learning and more efficient

RolAlign

  • Feature map에서 crop and resize(미분 가능)
  • 인간 영역의 feature을 bilinear interpolation을 통하여 추출함
  • 추출된 단일 사람의 feature는 pose estimation에 사용됨

2D Human Pose Estimation

  • 추출된 단일 사람의 feature로부터 2D heatmap 추정
  • Shape of 2D heatmap : J x H x W

Associative Embedding(2017)

  • 2D 관절 추출을 위한 heatmap 추정 _ 추정된 관절을 사람별로 grouping 하기 위한 associative embedding 수행 (bottom-up approach)
  • 각 픽셀이 어떤 사람에게 속하는지 tag value를 embedding
  • 같은 사람에 속하는 관절들은 같은 tag value를 같도록 학습
  • 테스트 단계에서 tag value들의 차이가 임계치보다 적으면 같은 관절에 속한다고 판정
  • 한계점 : 보이는 부분에만 tag value를 주기 때문에, 폐색(occluson)에 취약

OpenPose(2017)

  • 입력 이미지로부터 여러 사람의 2D 관절을 실시간으로 추정(Bottom-up approach)
  • 관절 좌표 예측을 위한 confidence map 추정 + 각 인물의 관절을 연결하기 위한 Part affinity Fields 추정
  • 구조
    • Backbone: VGG-19
    • Two branch
      • Confidence map(S) : 신체 관절 좌표 위치 추정(heatmap)
      • Part affinity field(L) : 추출된 관절이 어떤 사람에 속하는지 추정(2d vector fields)
    • Two branch의 결과와 feature map을 연결하여 같은 과정을 여러 번 반복하여 결과 refine

Confidence map

  • 신체부위가 위치할 가능성을 확률로 표현한(0.0~1.0) 이미지
  • 관절이 위치한 픽셀을 중심(중심 값은 1.0)으로 퍼지면서 값이 감소하는 heatmap을 생성

Part affinity fields(PAFs)

  • 한 관절 파트에서 다른 관절 파트로 이어지는 방향을 인코딩한 2D 벡터(인체부위 사이의 연관 정도)
  • 관절이 연결된 정보를 담고 있고 누구의 것인가를 파악하는데 사용

HigherHRNet(2019)

  • HRNet과 같은 motivation 활용 (고해상도 feature map 사용)
  • Bottom-up approach들이 입력으로 받는 여러 ㄴcale의 사람을 강건하게 추정하기 위하여
    • Multi-resuolution supervision 적용 : 여러 resolution의 heatmap 추정
    • Multi-scale fusion 적용 : 여러 resolution의 heatmap을 조합하여 나은 추정을 하도록 학습

Deconvolution module

  • 영상 속 작은 영역 사람은 고해상도 feature map 필요
  • Deconv. module은 HRNet에서 출력된 히트맵의 해상도를 높이는 역할
  • 4x4 deconvolution 수행

Grouping

  • 추정된 관절을 사람별로 grouping 하기 위한 associative embedding수행
  • 각 픽셀이 어떤 사람에게 속하는지 tag value를 embedding

Loss

L2 Loss(Heatmap-based approach)

  • HPE에서 일반적으로 사용되는 방식
  • 모든 조인트에 대한 정답 히트맵과 예측된 히트맵의 오차를 줄이는 방향으로 학습

평가

  • 패ㅡ쓰

후처리(Post processing)

Pose Resampling (PoseFix, 2019)

  • 기존 2D HPE 모델을 통해 출력된 2D 관절 좌표를 refine하는 네트워크
  • 기존 2D HPE 연구들에서 추정된 2D 관절좌표는 유사한 error distribution을 가지고 있음
  • 이 error의 통계를 사전정보로 활용하여 합성 포즈(synthetic pose)를 생성하고 훈련데이터로 활용

Synthesize pose

  • 자세의 오차 분포를 기반으로 무작위로 합성된 자세를 생성
  • Good : 정답 관절 좌표와 아주 작은 변위(very small displacement)가 있는 것
  • Jitter : 정답 관절 좌표와 작은 변위가 있는 것
  • Inersion : 관절 좌표가 좌우가 뒤 바뀐 것
  • Swap : 관절 좌표가 다른 사람에 속한 것
  • Miss : 정답 관절 좌표와 아주 큰 변위가 있는 것

Smooting

  • 인접한 프레임의 관절 좌표 정보를 활용하여 추출 결과를 부드럽게 하는 방법
  • 실제로 관절을 보면 많이 흔들린다.
  • 방법 : Low-pass filter, Savitzky-golay filter
  • Low-pass filter
    • 노이즈가 많은 고주파 신호는 걸러내고, 저주파 신호는 통과시키는 필터
    • 이전 프레임(i-1)의 관절 정보를 얼마나 참고할지 Smoothing factor값을 조절하여 현재 프레임의 필터링 된 관절 위치 결정 및 노이즈 제거
    • Smoothing factor a(alpha)의 크기에 따라 Jitter(떨림), lag(지연) 현상 발생
      • smoothing factor가 낮아지면 : Jitter 발생
      • smoothing factor가 높아지면 : lag 발생

Svitzky-golay filter

  • Moving average : 시계열 데이터에서 window마다 데이터 일부분을 순차적으로 평균을 구하여 smoothing하는 방법
  • 다항 회귀모델을 이용해서 window 마다 smoothing을 적용하는 방법

김성욱 님의 도움으로 작성된 글입니다. 성욱아 고마워 ㅎㅎ