[5주차/김지윤/논문리뷰]ViTPose:SimpleVisionTransformerBaselinesfor HumanPoseEstimation
VitPose 가 나오기 이전, 특정 도메인 지식 없이도 일반적인 비전 트랜스포머가 시각 인식 작업에서 뛰어난 성능을 보여주었지만 포즈 추정에 있어서는 언급이 없었다.
모델 구조의 단순함, 모델 크기의 확장성, 훈련 패러다임의 유연성, 모델 간의 지식 전달 능력을 강조한다.
비계층적인 비전 트랜스포머 사용하여 특정 인물 인스턴스의 특징을 추출하는 백본으로 사용하며, 가벼운 디코더(decoder)를 사용하여 포즈 추정 수행.
모델 용량의 확장성과 트랜스포머의 고도로 병렬 처리 가능한 특징을 활용하여 100M에서 1B 파라미터로 확장될 수 있음. 이로 인해 처리량과 성능 간의 새로운 Pareto frontier를 설정.
또한, 어텐션 유형, 입력 해상도, 사전 훈련 및 미세 조정 전략, 여러 포즈 작업 처리 등에 대해 매우 유연함. 실험 결과, 기본적인 ViTPose 모델은 어려운 MSCOCO 키포인트 감지 벤치마크에서 대표적인 방법들보다 우수한 성능을 보여주었으며, 가장 큰 모델은 MSCOCO 테스트-dev 세트에서 80.9AP로 새로운 최고 성능을 달성.
Human Pose Estimation 은 가려짐, 절단, 크기 변화 및 인간의 외모 등의 변동성으로 인해 어려운 작업임.
기존 모델
합성곱 신경망을 백본으로 채택한 뒤 추출된 특징을 다듬고 신체 키포인트(관절) 간의 관계를 모델링하기 위해 정교한 트랜스포머 구조를 사용
ex)
PRTR : 트랜스포머 인코더와 디코더를 통합하여 추정된 키포인트의 위치를 점차적으로 개선.
TokenPose와 TransPose : 인코더만을 사용하는 트랜스포머 구조를 적용하여 CNN에서 추출된 특징을 처리.
HRFormer : 트랜스포머를 직접 사용하여 특징을 추출하고 고해상도 표현을 다중 해상도 병렬 트랜스포머 모듈을 통해 도입
일반적이고 비계층적인 비전 트랜스포머를 백본으로 사용하여 주어진 인물 인스턴스의 특징 맵을 추출
백본은 마스크 이미지 모델링 사전 텍스트 작업(e.g., MAE)으로 사전 훈련됨.
추출된 특징 맵을 업샘플링하여 키포인트에 대한 히트맵을 회귀하는 경량 디코더가 이어짐.
디코더는 두 개의 디컨볼루션 레이어와 하나의 예측 레이어로 구성
알고리즘적 우월성을 주장하진 않지만, 포즈 추정에 대해 우수한 성능을 보이는 간단하면서 견고한 트랜스포머 베이스라인 제시에 의의가 있음.
백본 인코더의 설계에 특정 도메인 지식이 필요하지 않으며, 단순히 여러 개의 트랜스포머 레이어를 쌓아 비계층적인 인코더 구조를 채택. 디코더는 더 간단하게 단일 업샘플링 레이어와 이어지는 컨볼루션 예측 레이어로 간소화될 수 있음.
다른 수의 트랜스포머 레이어를 쌓고 특징 차원을 증가 또는 감소시킴으로써 모델 크기를 쉽게 조정할 수 있음. 예를 들어 ViT-B, ViT-L 또는 ViT-H를 사용하여 다양한 배포 요구 사항에 대한 추론 속도와 성능을 균형있게 조정할 수 있음.
다른 입력 해상도와 특징 해상도에 대해 손쉽게 적응할 수 있음
높은 해상도 입력에 대해 더 정확한 포즈 추정 결과를 항상 제공함.
단일 포즈 데이터셋으로 ViTPose를 훈련시키는 것이 일반적인 방법이지만, 추가 디코더를 유연하게 추가하여 여러 포즈 데이터셋에 적응하고, 이로 인해 상당한 성능 향상을 이끌어냄. 디코더가 꽤 가볍기 때문에 추가 계산 비용이 거의 없음. 파인튜닝된 데이터셋으로 사전 훈련하거나 어텐션 모듈을 고정시켜 더 적은 훈련 비용으로 최고 성능을 얻을 수 있음.
추가 학습 가능한 지식 토큰을 사용.
TransPose : CNN에서 추출된 특징을 직접 처리하여 전역 관계를 모델링. TokenPose : 토큰 기반 표현을 제안하여 가려진 키포인트의 위치를 추정하고 다른 키포인트들 간의 관계를 모델링.
HRFormer : 특징 추출 단계에서 CNN이 아닌 트랜스포머를 사용하여 고해상도 특징을 직접 추출. 점진적으로 다중 해상도 특징을 결합하기 위해 정교한 병렬 트랜스포머 모듈이 제안됨.
이들 모두 키포인트 추정 벤치마크에서 우수한 성능 보임.
그러나 특징 추출을 위해 CNN을 필요로 하거나 트랜스포머 구조의 디테일한 디자인을 요구함.
💡 포즈 추정을 위해 간단한 비전 트랜스포머만 이용할 순 없을까? ⇒ ViTPose 등장! (in MSCOCO Keypoint dataset)
ViTPose 는 masked image modeling(MIM) 사전 훈련을 백본으로 사용하는 일반적인 비전 트랜스포머를 채택.
더 작은 레이블링 되지않은 포즈 데이터셋을 사용한 사전 훈련도 포즈 추정 작업에 좋은 초기화를 제공할 수 있다는 것을 발견.
가능한 한 구조를 간단하게 유지하고 성능을 향상시킬 수 있도록 화려하지만 복잡한 모듈은 피함. 이를 위해 단순히 트랜스포머 백본 뒤에 여러 개의 디코더 레이어를 추가하여 키포인트에 대한 히트맵을 추정.
간단성을 위해 디코더 레이어에서 스킵 연결이나 교차 어텐션은 사용하지 않고, 단순한 디컨볼루션 레이어와 예측 레이어만을 사용.
(a) The framework of ViTPose
input : 사람 인스턴스 이미지 $X∈R^{H×W×3}$
→ 패치 임베딩 레이어를 통해 이미지를 토큰으로 변환, $F∈R^{(H/d)×(W/d)×C}$
$d$ : 패치 임베딩 레이어의 다운샘플링 비율(=패치의 크기, 디폴트값 16)
$C$ : 채널 차원
(b) The transformer block
그 후, 임베드된 토큰들은 여러 개의 트랜스포머 레이어를 통과하는데, 각각은 multi-head self-attention(MHSA) 레이어와 **feed-forward network(FFN)**로 구성됨.
LN(Layer Normalization) → MHSA → Skip Connection → LN → FFN → Skip connection
$F_i$ : i번째 트랜스포머 레이어의 출력
$F_0=PatchEmbed(X)$ : 패치 임베딩 레이어 후의 피쳐 (트랜스포머 레이어에 대한 입력)
$F_{out} ∈R^{(H/d)×(W/d)×C}$ : 백본 네트워크의 최종 출력 피쳐
공간 및 채널 차원은 각 트랜스포머 레이어마다 일정하게 유지됨.
❓ Skip Connection 네트워크의 중간에 레이어를 더하거나 건너뛰는 방식. 기존의 네트워크에서는 각 레이어의 출력이 다음 레이어로 전달되는데, Skip Connection은 이러한 출력을 다음 레이어에 더하여 특정 레이어의 출력을 재사용. 이렇게 함으로써, 네트워크의 출력이 신규 입력과 기존의 출력을 모두 사용하게 되므로 Gradient Vanishing 문제를 완화할 수 있음.
Multi-head self-attention 특정 위치의 정보를 다른 위치와 상호작용하면서 찾아내는 방법. 입력 시퀀스나 특성 맵의 각 위치가 서로 어떤 위치들과의 상호관계를 갖고 있는지를 학습하는 기법
백본 네트워크에서 추출된 특징을 처리하고 키포인트를 지역화하기 위해 두 가지 종류의 경량 디코더를 채택.
(c) the classic decoder
두 개의 디컨볼루션 블록으로 구성. 각각은 차례대로 디컨볼루션 레이어, 배치 정규화, ReLU로 구성. 각 블록은 피쳐맵을 2배로 업샘플링. 그런 다음 커널 크기 1×1의 컨볼루션 레이어를 사용하여 키포인트에 대한 로컬라이제이션 히트맵을 얻음.
$K=Conv(1×1)(Deconv(Deconv(F_{out})))$ $where$ $K∈R^{(H/4)×(W/4)×N_k}$
$K$ : 추정된 히트맵(각 키포인트별로 하나씩)
$N_k$ : 추정해야 할 키포인트의 수(관절의 수), MSCOCO 데이터셋에는 $N_k$가 17로 설정됨.
(d) the simple decoder
이중 선형 보간법을 사용하여 피쳐 맵을 4배로 업샘플링한 다음, ReLU와 커널 크기 3×3의 컨볼루션 레이어를 사용하여 히트맵을 얻음.
$K=Conv(3×3)(Bilinear(ReLU(F_{out})))$
ViTPose의 구조적 간단성을 입증.
ViTPose 종류
💡 Base, Large, Huge, Gigantic 구분 : 서로다른 층, 채널 수
💡 ResNet 에서는 Classic decoder 와 Simple Decoder 의 성능 차이가 크지만 ViTPose 에서는 거의 유사함. 즉, ViTPose가 특징을 추출하는 능력이 매우 좋으며 이에 따라 복잡한 구조의 Decoder가 필요 없음을 의미.
ViTPose 가 간단하기 때문에 다양한 모델 크기(파라미터 수)의 사전 훈련된 백본을 사용하고 MSCOCO 데이터셋에서 Fine-tune 해봄.
예를 들어, ViT-B, ViT-L, ViT-H, ViTAE-G를 클래식 디코더와 함께 사용하여 포즈 추정을 진행하고 모델 크기가 커짐에 따라 일관된 성능 향상을 관측함.
1. 사전 훈련 데이터 유연성
기본 ImageNet 사전 훈련 설정 이외에도, **MAE(Masked AutoEncoder, 패치의 일부를 마스킹 하면서 Encoder의 끝 부분에서 마스킹 된 부분을 추측하도록 하는 방식)**를 사용하여 MSCOCO 및 AIChallenger 데이터를 무작위로 마스킹하여 이미지의 75% 패치를 재구성하는 방식으로 백본을 사전 훈련함. → 이 사전 훈련된 가중치를 ViTPose의 백본에 초기화하고 MSCOCO 데이터셋에서 모델을 Fine-tuning.
포즈 데이터만 사용하여 훈련된 ViTPose도 경쟁력 있는 성능을 얻을 수 있어, ViTPose가 데이터의 다양한 규모에서 유연하게 좋은 초기화를 학습할 수 있음!
💡 pretraining 에 사용되는 데이터의 종류나 볼륨에 영향을 받지 않음을 확인.
2. 상도 유연성
입력 이미지 크기와 다운샘플링 비율 d(패치 크기)를 다양하게 지정가능
고해상도 입력 이미지는 resize 하고 패치로 나누어 학습
모델의 다운샘플링 비율을 낮춰(높은 피쳐 해상도) 대응할 때는 패치 임베딩 레이어의 스트라이드를 변경하여 겹치는 토큰으로 특징을 파티셔닝합니다.
결과적으로 ViTPose의 성능은 높은 입력 해상도 또는 높은 피쳐 해상도에 대해 일관되게 향상됨.
💡 주목해야할 부분은 앞의 두 열. 224x224 (=150,528) > 256x192(=147,356) 로 왼쪽이 픽셀 수가 더 많기 때문에 더 높은 성능을 기대할 수 있지만 실제로는 오른쪽이 더 높음. Why? MSCOCO 데이터셋의 이미지 비율이 H : W = 4 : 3 이기 때문. 실제로 사람은 가로길이보다 세로길이가 더 기니까 이 비율에 가까운 이미지일수록 성능이 좋게 나오는 것이 자연스러움.
3. 어텐션 타입 유연성
높은 해상도의 피쳐 맵에서 전체 어텐션을 사용하는 것은 계산 복잡성과 메모리 소비 측면에서 큰 부담이 됨 → 상대적 위치 임베딩을 사용하는 윈도우 기반 어텐션 사용!
그러나 단순히 모든 트랜스포머 블록에 윈도우 기반 어텐션을 사용하는 것은 전역 컨텍스트 모델링 능력이 부족해 성능 저하를 가져오기 때문에 두 가지 기법을 도입.
💡 사용되는 GPU메모리가 같음에도 Shift 윈도우를 함께 썼을 때 성능이 크게 오른 것을 볼 수 있음.
4. Fine-tuning 유연성
MSCOCO에서 ViTPose를 미세 조정하면서 각각 모든 매개 변수를 고정시킨 상태, MHSA 모듈을 고정시킨 상태, FFN 모듈을 고정시킨 상태로 실험함. MHSA 모듈을 고정시킨 상태에서도 ViTPose가 fully finetuning 세팅과 비교할 만한 성능을 얻을 수 있음을 보임.
💡 fine-tuning 에서는 FFN이 더 중요한 역할을 함을 확인할 수 있음.
5. 작업 유연성
ViTPose의 디코더는 간단하고 가벼워서, 백본 인코더를 공유하면서 여러 포즈 추정 데이터셋을 처리하기 위해 다양한 디코더를 사용할 수 있음.
💡 다양한 데이터셋으로 multi-dataset training 을 하면 성능이 더 올라감을 확인
작은 모델의 성능을 향상시키는 방법
1. 지식 증류(knowledge distillation) (Transformer 에만 한정되지 않는 기법)
선생 네트워크(Teacher network, 파라미터 수가 아주 많은 큰 모델 ex) ViTPose-H)와 학생 네트워크(Student network, 파라미터 수가 작은 모델 ex) ViTPose-B) 사이에서 지식을 전달하는 방법. 목적은 학생 네트워크의 파라미터 수를 늘리지 않고도 선생 네트워크만큼 좋은 모델로 만드는 것!
선생 네트워크의 출력을 학생 네트워크의 출력과 비교하여 간단한 지식 손실(output distillation loss)을 추가.
$L^{od} _{t→s} = MSE(K_s, K_t)$ ( $od$ : output distillation )
$K_s, K_t$ : 동일한 입력에 대한 학생 네트워크와 선생 네트워크의 출력,예측값
2. 토큰 기반 지식 증류 (Transformer 한정 기법)
선생 네트워크에 추가적인 학습 가능한 지식 토큰을 무작위로 초기화하여 학습. → 학습이 완료된 큰 모델을 고정, 지식 토큰만을 몇 에포크 동안 최적화하여 지식을 얻음.
$t^∗=argmin_t (MSE(T({t;X}), K_{gt}))$
$K_{gt}$ : 정답 히트맵
$X$ : 입력 이미지
$t^∗$ : ground truth 와 토큰의 MSE 가 가장작은 토큰 (= 지식 손실을 최소화하는 최적의 토큰)
그 후, 얻은 지식 토큰 $t^∗$를 학생 네트워크와 연결하여 학생 네트워크의 훈련에 활용. 학생 네트워크의 손실은
$L^{td} {t→s} = MSE(S({t^∗;X}), K{gt})$
💡 학생에게 풀이 방법($t^*$) 을 알려주고 문제의 답($K_{gt}$)과 비교해 채점($MSE$)한다.
또는
$L^{tod} {t→s} = MSE(S({t^∗;X}), K_t) + MSE(S({t^∗;X}), K{gt})$
💡 학생에게 풀이 방법($t^∗$)을 알려주고 문제의 정답($K_{gt}$) 뿐이 아닌 선생님의 정답($K_t$)을 이용해 채점($MSE$)한다.
$L^{td} _{t→s}$: 토큰 지식 증류 손실, $L^{tod} _{t→s}$ : 출력 지식 증류 손실과 토큰 지식 증류 손실의 조합
💡 토큰 사용으로 성능이 소폭 상승함을 확인
대부분의 내용은 위에 중간중간 삽입함.
최종 결과
💡 속도가 아주 빠르고 성능도 향상됨을 확인
구조에 상세한 설계가 없음에도, ViTPose는 MSCOCO 데이터셋에서 최고 수준의 성능을 달성합니다. 복잡한 디코더나 FPN 구조와 같은 것들을 사용해 차후 더 나은 성능을 얻을 잠재력이 있음. 또한 ViTPose의 유연성을 더 증명하기 위해 prompt-based tuning을 탐구하는 것과 같은 더 많은 연구 노력이 필요할 것임. 또한, ViTPose가 동물 포즈 추정이나 얼굴 키포인트 검출과 같은 분야에도 적용될 수 있을 것임.
비전 트랜스포머 기반의 인간 포즈 추정을 위한 간단한 기준선으로서 ViTPose를 제안. 포즈 추정 작업에서의 간결성, 확장성, 유연성, 그리고 전이성을 보여주며, MSCOCO 데이터셋에 대한 다양한 실험을 통해 이를 확실히 입증함. 큰 백본 모델인 ViTAE-G를 사용한 단일 ViTPose 모델이 MSCOCO test-devset에서 최고 수준의 80.9AP를 달성.
Reference
ViTPose: 2D Human Pose Estimation
댓글 영역