- 논문 원문 링크 : Vision Transformers for Dense Prediction
Vision Transformers for Dense Prediction
Abstract
- 밀집 예측(dense prediction) 작업을 위한 모델 백본을 컨볼루션 신경망 대신에 ViT(Vision Transformer)를 사용하는 dense vision transformer를 소개한다.
- 참고) 여기서 "밀집 예측"이라는 용어로 소개한 dense prediction은 이미지 전체에 대한 하나 또는 소수의 대표값을 예측하는 대신에 더 세밀한 위치마다 값을 예측하는 작업이다.
- 여기서 더 세밀한 위치는 픽셀(화소, pixel) 또는 세분화된 공간 위치를 의미하여, 이러한 위치에 대하여 깊이, 클래스, 움직임, 표면의 방향 등을 예측하는 작업이 dense prediction task다.
- 대표적으로 아래와 같은 작업들이 있을 수 있다.
- semantic segmentation : 각 픽셀이 어떤 클래스로 분류되는지 예측
- depth estimation : 해당 픽셀이 카메라로부터 떨어진 거리(깊이) 예측
- surface normal estimation : 픽셀 위치의 표면 방향이 향하는 방향 예측
- edge detection : 픽셀이 경계선(edge)인지의 여부를 예측
- optical flow : 해당 픽셀이 다음 프레임에서 어느 방향으로 이동할지를 예측
- 따라서 아래에서는 "밀집 예측"이라는 단어 대신에 "픽셀 수준 예측"이라는 용어를 사용하려고 한다.
- 참고) 여기서 "밀집 예측"이라는 용어로 소개한 dense prediction은 이미지 전체에 대한 하나 또는 소수의 대표값을 예측하는 대신에 더 세밀한 위치마다 값을 예측하는 작업이다.
- dense vision transformer 구조는 (1) ViT(Vision Transformer)의 여러 단계에서의 토큰(token)을 다양한 해상도(resolution)의 이미지와 같은 표현(image-like representation)으로 조합한다. 그리고 (2) 이 표현을 점진적으로 컨볼루션 디코더(convolutional decoder)를 사용해 전체 해상도(full-resolution)의 예측으로 결합한다.
- 참고) 여기서 image-like representation은 ViT 입력을 위한 1차원 토큰 시퀀스(token sequence)를 이미지처럼 높이(H),너비(W)를 갖는 특성맵(feature map) 형태로 바꾼 표현을 뜻한다.
- 이는 픽셀 수준 예측의 출력인 depth map이나 segmentation map은 이미지 형태의 출력이기 때문이다
- 물론 이미지 형태라는 것은 실제의 RGB이미지처럼 3채널 또는 여러 채널 형태를 반드시 말하는 것이 아니라, 이미지와 같은 2차원 공간배열을 가진 특성맵을 뜻한다.
- 단, 유의해야 할 점은 복원되는 것은 패치 토큰(patch token)의 내부 구조가 아니라, 패치 토큰들의 공간적 배치다.
- 패치 토큰 자체는 여전히 패치가 flatten되거나 embedding vector로 표현된 특성 벡터(feature vector)이며, 패치 토큰들의 배열 형태가 1차원에서 2차원 공간배열로 복원된다고 볼 수 있다.
- 이렇게 되면, 컨볼루션 신경망 대신 ViT를 백본으로 교체하여도 동일하게 픽셀-레벨 예측작업을 수행할 수 있다고 이해할 수 있다.
- 트랜스포머 백본은 각 단계마다 (transformer의 self-attention으로 인한) 전역 수용장(global receptive field)를 가지며, 일정하며(constant) 상대적으로 높은 해상도에서 표현(representation)을 처리한다.
- 이런 특성 덕분에 dense vision transformer는 컨볼루션으로만 된 신경망(fuly-convolutional network)과 비교할 때, 훨씬 상세한 수준의(finer-grained) 그리고 이미지 전체에 일관적인 예측을 수행할 수 있다.
- 참고) CNN backbone에서는 출력 특성맵의 해상도가 단계적으로 줄어든다. 즉, layer가 깊어질수록 공간 해상도(spatial resolution)가 낮아진다. 그러나, ViT에서는 패치 토큰의 개수는 계속 그대로 유지되기 때문에, transformer backbone에서는 패치들이 배치된(patch token grid) 공간해상도가 유지된다.
- 같은 이유로 비록 transformer backbone의 토큰 패치 그리드의 해상도가 처음에는 원본 이미지보다 훨씬 낮지만, CNN backbone의 최종 레이어의 해상도와 비교한다면, 비교적(상대적으로) 높은 해상도를 갖게된다. 즉, CNN과 비교할 때 픽셀 수준 예측에 필요한 세부정보를 덜 잃게 된다.
- 논문에서 수행된 실험에서는 dense vision transformer 구조가 픽셀수준예측 작업에서 (대규모 훈련데이터가 사용가능할 때) 분명한 성능 향상을 보였다.
- 단안 깊이 예측(monocular depth estimation) 작업에서 완전 컨볼루션 신경망과 비교하여 최대 28%의 성능 향상을 보였고, 이미지 분할(semantic segmentation) 작업에서는 최고 성능(ADE20K 데이터셋 기준의로 mIoU 49.02%)을 보였다.
1. Introduction
- 픽셀수준 예측을 위한 (논문 발표 당시의) 거의 대부분 모델들이 컨볼루션 신경망에 기초하고 있다. 또한 신경망을 논리적으로 인코더(encoder)와 디코더(decoder)로 분리하는 설계 패턴을 따르고 있다.
- 인코더는 대개 이미지 분류(image classification)를 위한 모델에서 가져오며, 따라서 백본(신경망)이라고도 부르며 ImageNet과 같은 대규모 데이터에서 사전훈련된다.
- 디코더는 인코더에서 나온 특성들을 통합하며, 최종 픽셀수준 예측(dense prediction)으로 변환한다.
- 픽셀수준 예측 작업에 대한 연구들은 디코더와 그들의 특성 통합 전략(aggregation strategy)에 초점을 맞추고 있다.
- 하지만, 백본 신경망을 잘 선택하는 것이 전체 모델의 성능에 큰 영향을 끼친다고 받아들여지고 있는데,
- 이는 인코더에서 잃어버린 세부 정보는 디코더에서 (보간하거나 추정할 수 있을 지언정) 되살릴 수 없기 때문에
- 원본 입력 이미지의 정보를 덜 잃고, 더욱 풍부한 표현을 가지는 백본의 선택이 중요하다는 의미다.
- 컨볼루션 신경망을 사용하는 백본(Convolutional backbone)은 입력 이미지 크기를 점진적으로 줄여가면서(downsample), 다양한 크기(scale, 이미지 해상도)에서 특성을 추출한다.
- 다운샘플링(downsampling)은 모델이 볼 수 있는 수용장(receptive field)의 크기를 점차 크게 만들 수 있어서, 저-수준 특성들을 묶어서 추상적인 고-수준 특징으로 파악할 수 있고
- 동시에 신경망을 위한 메모리와 연산 요구량을 사용 가능한(tractable) 상태로 유지한다.
- 그러나 다운샘플링은 픽셀수준 예측 작업에서 특히 두드러지는 단점을 가지고 있다.
- 모델의 깊은 레벨로 갈수록 특성 해상도(feature resolution)와 세밀도(granularity)가 손실되며, 이렇게 손실된 정보는 디코더에서 복원되기 어렵다.
- 손실되는 이러한 정보가 비록 이미지 분류와 같은 작업에서는 중요하지 않을 수 있지만, 픽셀수준 예측에서는 핵심적이다.
- 참고) 여기에서 특성 해상도는 특징맵(feature map)이 공간적으로 얼마나 촘촘한 영역으로 표현되는지를 의미했고, 비슷하게 세밀도(granularity)는 작은 구조 또는 국소적인(local) 특성 차이를 얼마나 세밀하게 구분할 수 있는지를 의미한다.
- 특성 세밀도의 손실을 완화하는 여러가지 방법들이 제안되었지만, 여전히 신경망의 기본 구성요소인 컨볼루션(convolution)이 여전히 성능 향상의 한계요소(bottleneck)이었다.
- 참고) 컨볼루션(합성곱, convolution)은 본질적으로 제한된 수용영역을 갖는 선형 연산자다. 제한된 수용장을 갖기 때문에 충분히 넓은 맥락(context)정보와 표현력을 얻으려면 심층 신경망이 되도록 레이어를 쌓는 것이 필요하다.
- 그러나 심층 신경망은 레이어마다의 많은 중간 표현을 얻어야하며, 이는 메모리 점유량이 많아질 수밖에 없다.
- 중간 표현들의 다운샘플링은 현재의 컴퓨터 아키텍쳐에서 가능한 수준의 메모리 사용을 위해서 필수적이었다.
- 이 논문에서는 DPT(Dense Prediction Transformer)를 도입한다.
- DPT는 트랜스포머(transformer)를 인코더의 기본 연산 구성요소로 활용하는 인코더-디코더 구조의 픽셀수준 예측 모델이다.
- 특히, 백본으로 ViT(Vision Transformer)를 사용하며, ViT가 제공하는 BoW(bag-of-words) 방식의 표현을 여러 해상도에서 이미지 형태의 특성 표현(feature representation)으로 재-결합하고,
- 컨볼루션 디코더를 사용해 이러한 특성 표현을 점진적으로 결합하여 최종 dense prediction을 생성한다.
- 참고) ViT의 출력을 BoW 방식으로 표현한 것에는 큰 의미가 없다. 논문에서는 단지, 트랜스포머 아키텍쳐의 출력이 1차원 시퀀스였었다는 의미를 강조하기 위해 사용하였다.
- ViT를 사용할 때, (트랜스포머에서 사용하는 시퀀스 길이는 동일하며 결과적으로) 패치 토큰의 그리드 크기는 계속 유지된다. CNN에서 자동적으로 크기가 다른 특성맵이 생성되는 것과 달리, ViT에서는 특성맵의 크기가 계속 유지된다.
- DPT에서는 일부러 ViT 레이어가 출력하는 특성맵의 공간해상도를 다르게 만들어서, (CNN에서와 마찬가지로) 디코더가 사용할 수 있는 "여러 해상도"의 multi-scale feature map을 제공하며,
- 디코더 역시 이러한 여러 특성맵을 한번에 합치지 않고, 점진적으로(=단계적으로) 결합한다.
- 논문은 단안 깊이 예측(monocular depth estimation)과 (의미론적)이미지 분할(semantic segmentation) 작업에 대해서 실험을 진행한다.
3. Architecture

- 픽셀수준 예측에 그동안 가장 성공적이었던 인코더-디코더 구조는 유지한다.
- ViT를 (인코더의) 백본으로 활용하고, 인코더에 의해서 생성된 표현이 픽셀수준 예측(밀집 예측, dense prediction)으로 효과적으로 이어질 수 있음을 보인다.
Transformer encoder
- 큰 틀에서 ViT는 이미지를 BoW(bag-of-words) 표현처럼 처리한다.
- 개별적으로 특성 공간(feature space)에 임베딩된 이미지 패치나
- 이미지에서 추출된 (모델의 여러 레이어를 거친) deep feature들이 단어(words)역할을 한다.
- 참고) 논문에서는 (다른 연구와 동일하게) 임베딩된 단어(표현)을 토큰(token)으로 언급한다.
- 트랜스포머 구조에서는 멀티헤드 어텐션(MHA)을 포함한 일련의 블록들을 통해 토큰들을 처리하며, 이 때 토큰의 표현들은 서로간의 관계를 반영한다.
- 논문에서는 트랜스포머가 모든 연산과정에서 토큰의 수를 동일하게 유지하는 것을 중요하게 생각한다.
- 각 토큰은 이미지 패치들과 일대일 대응관계를 갖기 때문에,
- 토큰 수의 유지는 모든 트랜스포머의 연산단계에 걸쳐서 첫 임베딩의 공간 해상도(spatial resolution)를 유지함을 뜻한다.
- 트랜스포머의 멀티헤드 어텐션(MHA)은 본질적으로 모든 토큰이 참여하는 전역 연산이다.
- 따라서 최초 임베딩 생성 이후의 모든 단계에서 트랜스포머는 전역 수용영역(global receptive field)을 갖는다.
- 참고) 이것이 연속적인 다운샘플링 컨볼루션 층을 통해서 (특성맵의 크기가 줄고) 수용장의 크기가 점진적으로 커지는 컨볼루션 신경망과 극명한 차이를 보이는 지점이다.
- 특히, ViT는 겹치지 않는(non-overlapping) 정사각형 영역을 이미지로부터 분할한 뒤 각각 임베딩으로 만든다. ($p^2$ 픽셀 영역)
- 각 패치는 벡터형태로 펼쳐지고(flatten), 선형 연산(선형 변환, linear projection)을 통해 임베딩된다.
- 또는 ResNet50과 같은 CNN백본을 이미지에 적용한 후 얻은 특성맵의 픽셀 특성을 임베딩으로 사용하는 ViT 변형모델들도 사용될 수 있다.
- 트랜스포머는 set-to-set 함수로서(참고: 하나의 입력을 받아, 하나의 출력을 내놓는 함수가 아니라, 일련의 입력들을 동시에 입력받아, 일련의 값을 동시에 출력한다), 개별 토큰의 공간적 위치 정보를 보유하지는 않는다.
- 따라서, 개별 토큰(ViT의 이미지 임베딩)에는 학습가능한 위치 임베딩(learnable position embedding)이 결합된다.
- 자연어처리(NLP) 분야의 연구들을 따라(e.g. BERT 등), ViT는 입력 이미지에 직접 대응되지 않는 특수 토큰(special token)을 추가한다.
- 이 특수 토큰은 이미지에 대한 전역 표현으로서 최종적으로 쓰이며, 이미지 분류에 활용된다.
- 참고) 이를 CLS 토큰(class token)이라고 부른다.
- 참고) 그런데, 이미지 분류(classification)와 달리 픽셀수준 예측(dense prediction)을 목표로 하는 DPT에서는 CLS 토큰의 전역 정보를 명시적으로 쓰기에 애매할 수 있다. 따라서 클래스 토큰을 (1)무시하거나(ignore), (2) 각 패치 토큰에 더하거나(add), (3) 각 패치 토큰과 결합한 후 선형 투영하는(project) 방식 중 하나로 적절하게 반영할 수 있다.
- 논문에서는 특수토큰을 readout token이라고 한다.
- 임베딩 추출 절차가 진행되면, $H \times W$ 픽셀 크기의 이미지는 $t^0 = \{ t^0_0, \cdots, t^0_{N_p} \}$의 벡터집합으로 바뀐다. 이 때, 각 토큰의 특성 차원을 $D$차원으로 설정하고($t^0_n \in \mathbb{R}^D$), 토큰의 개수 $N_p = \frac{HW}{p^2}$이며, $t_0$는 위에서 말한 readout 토큰이다.
- 입력 토큰들은 $L$개의 트랜스포머 레이어를 거치며, 적절하게 학습된 표현으로 변환된다.
- $l$번째 트랜스포머 레이어에 의한 (패치)벡터 표현을 $t^l$로 표현한다.
- 기본 ViT구조에서 여러 변형(variants)을 정의할 수 있는데, 이 논문에서는 3가지 형태의 변형 모델을 사용한다.
- ViT-Base : 패치 기반의 임베딩(patch-based embeding)과 12개의 트랜스포머 레이어 사용
- ViT-Large : 같은 방식의 임베딩 벡터를 사용하지만, 더 넓은 벡터 차원 $D$를 갖고 더 많은 24개의 레이어 사용
- ViT-Hybrid : ResNet50 모델을 사용해 이미지 임베딩을 계산하고, 이후 12개의 레이어를 활용
- 모든 실험에서 패치 크기를 위하여 $p=16$을 사용했다.
- ViT-Base와 ViT-Large는 각각 $D=768$과 $D=1024$ 차원의 벡터를 펼치도록 투영한다.
- 두 차원 크기 모두 입력 패치의 픽셀 수보다 크다. 이는 dense prediction 작업을 위해 필요한 추가 정보를 임베딩 과정에서 학습할 수 있음을 뜻한다.
- 참고) 여기서 논의하는 것은 이미지 전체의 픽셀을 활용하지 않고 패치(patch)단위를 사용하더라도 정보의 해상도가 낮지 않음을 말하는 것이다. 즉, 패치단위로 나눴지만, 각 패치를 표현하는 특성 벡터의 차원이 충분히 크기 때문에, 패치 내부의 픽셀 수준의 정보를 보존할 수 있다는 의미다.
- 따라서 이론상으로는(in principle) 하나의 패치 내부의 특성들도 픽셀 수준의 정확도로 구분될 수 있다. 단, 실제 학습과정과 실험에서는 데이터, 학습과정, 손실함수 등에 따라 복원 정도가 달라질 수 있다.
- ViT-Hybrid는 입력 이미지의 1/16 크기의 해상도에서 특성을 추출하는데, 이는 일반적인 컨볼루션 백본에서 사용되는 가장 낮은 해상도의 특성맵보다 2배 높다.
Convolutional decoder
- 디코더는 토큰 집합을 다양한 해상도에서 이미지 형태의 특성 표현으로 조립한다.
- 특성 표현은 점진적으로 최종 픽셀수준 예측에 합쳐지게 된다.
- 이 논문에서는 간단한 3단계 (특성)재조립(Reassemble) 연산을 제안하여,
- 트랜스포머 인코더의 특정 층에서 추력되는 토큰들로부터 이미지 형태의 표현으로 복원한다.
- $\text{Reassemble}^{\hat{D}}_s(t) = (\text{Resample}_s \circ \text{Concatenate} \circ \text{Read} (t)$
- 여기서 $s$는 복원된 표현(recovered representation)의 출력 크기가 입력 이미지 크기에 대해 갖는 비율을 뜻하고
- $\hat{D}$는 출력 특성의 차원을 의미한다.
댓글