분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
[Pose Estimation] DeepPose 논문 리뷰
안녕하세요! 오늘은 Pose Estimation에서 최초로 DNN을 적용한 모델인 Deep Pose의 논문을 리뷰했습니다.
Deep Pose는 DNN 기반의 Pose Estimation(사람의 관절 위치를 찾는 task) 방법을 제안하며, 해당 task 최초로 DNN을 적용하여 SOTA를 달성하였습니다.
그 뿐만 아니라, 당시에는 딥러닝을 주로 Classification task에만 사용하였는 데 Regression task에서도 훌륭히 적용할 수 있음을 증명했습니다.
Pose Estimation task에서 CNN이 적합한 이유
Input Image가 CNN을 통과하면 각 관절 별로 x, y 좌표 2개씩 k개의 관절에 대해서 예측 값을 도출하며, 이는 총 2k 차원의 벡터를 의미합니다.
이때 벡터 y_i는 i번째 관절의 x, y 좌표를 담은 2차원 벡터이고, 벡터 y는 2차원 벡터 k개를 쭉 펼쳐서 이어 붙인 2k 차원의 벡터입니다.
벡터 y_i는 i번째 관절의 x, y 좌표와 중심점 간의 차를 구하고, 각각을 너비와 높이로 나눠 주어 normalize하여 사용합니다.
예를 들어, Bounding Box (x, y, w, h) = (120, 150, 200, 300)이고 머리에 대한 좌표가 (120, 370)이라면 normalize된 좌표는 다음과 같습니다.
해당 normalize 과정을 Pose Vector 모두에 적용해주면 다음과 같은 normalized pose vector를 얻을 수 있습니다.
이렇게 normalize된 값을 통해 학습하여 예측 값을 도출할 수 있습니다.
그렇다면, 예측 값을 원래 이미지에 찍어주기 위해서는 normalize에 대한 역 연산을 진행해야하며 수식은 다음과 같습니다.
즉, Input image와 파라미터를 통해 CNN이 normalize된 예측 값을 도출하고 이를 다시 역으로 적용하면 관절 예측 벡터인 y*를 구할 수 있게 됩니다.
다만, 이런 방식(Initial Stage)의 경우 큰 이미지를 보고 예측한 결과 값이기 때문에 정교함이 떨어질 수 있습니다.
따라서, 이를 보완하기 위한 아이디어는 예측 좌표를 기반으로 bounding box를 다시 그리고 crop하여 다시 CNN 모델을 통과하는 Cascasde 방식(Stage S)입니다.
앞서 Pose Vector에 대해 진행한 Normalize는 crop 전 이미지 내 좌표이기 때문에 이후 과정에서 원활히 사용하기 위함
앞서, 설명한 바와 같이 예측 좌표를 기반으로 bounding box를 다시 그리고 crop하여 CNN 모델을 통과시키면 정교화된 좌표 예측값을 구할 수 있습니다.
이는 식으로 표현하면 다음과 같습니다.
이때, 모든 좌표들에 대해서 새로운 바운딩 박스를 그리며, σ*diam(ys)라는 수식에 의해서 크기가 결정됩니다.
Stage 1만 진행하는 것보다 관절 별로 모델 학습 시 탐지 성능이 증가함을 확인할 수 있습니다.
Reference
[1] https://arxiv.org/abs/1312.4659
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved