///
Search
Duplicate
🎉

DINO

Created
2021/06/28 08:32
발표일자
2021/05/31
발표자
홍기호
Tags
VisionTransformer
✅main
포스팅 종류
논문리뷰
컴퓨터 비전 분야에서는 오래전부터 Hand-crafted Feature 를 사용하는데 익숙했다.
이미지와 비디오에서 필요한 정보를 추출하기 위한 기법으로 활용
하지만 대부분 인간의 경험에 바탕을 둔 정보 선택으로 만들어진 기법들이라 높은 수준의 이미 정보를 추출하기는 어려웠다.
예를 들어 SIFT, HOG 와 같은 알고리즘들을 이용해 객체의 엣지나 텍스쳐 정보들을 추출하거나 표현하였다.
이런 식으로 이미지의 정보를 추출하는 방법은 과거 이미지 프로세싱 분야에서 인기를 얻어지만 요구되는 문제들의 복잡성이 증가함에 따라 점차 CNN 분야로 완전히 그 영광을 넘기게 되었다.
하지만 이에 따른 학습 데이터 구축 비용의 증가는 개발에 많은 부담을 준다.
이런 문제들을 타계하기 위해 비지도 학습(unsupervised learning) 방식이 제안되기도 했다.
하지만 비지도 학습의 경우 사전에 가정된 정보(Prior)가 실제 데이터와 맞지 않으면 엉뚱한 결과를 얻게 된다.
자기 지도 학습(self-supervised learning)은 비지도 학습 방법론 중 한가지 특별한 형태로 고려할 수 있다.
이 방식은 비지도 학습과는 달리 별도의 가정보다는 데이터 자체의 정보를 이용하여 레이블을 구성하는 방식을 사용한다.
따라서 대규모로 데이터를 수동 구축하지 않더라도 쉽게 학습이 가능하다.
보다 현실적인 방법은 소량의 데이터를 구축하고 이를 확장하는 것이다.
이를 Few-shot learning 이라고 한다.
Transformer 는 최근 NLP 에서 각광받은 기술로 CNN 에도 영향을 주고 있다.
그 결과 ViT(Vision Transformer) 와 같은 기술도 소개되었다.
하지만 아쉽게도 ViT 는 CNN 기법에 비해 뭐가 더 좋은지 이야기하기가 애매하다.
더 많은 학습 데이터가 필요하지만 성능은 딱히 더 좋지 못함
이제 이 논문의 소개를 진행한다.
self-supervised 기법이 ViT 에 미치는 영향을 확인한다. 보통의 ViT 와 CNN에서는 나타나지 않는 몇가지 흥미로운 속성을 발견했다.
이미지 내의 레이아웃. 특히 객체의 경계를 명시적으로 포함한다는 사실을 확인했다. 이것을 맨 마지막 레이어에서 바로 확인할 수 있다.
별도의 Fine-tunning 없이 K-NN 을 수행할 경우 좋은 성능을 보인다. ImageNet 데이터에 대해 78.3% 이라는 top-1 정확도를 보인다.

Vision Transformer

NLP 쪽에서 영감을 받아 Transformer 기법을 이미지 모델에도 적용
원래 Transformer 는 토큰 Embedding 을 1D 데이터로 입력 받지만 2D 인 이미지를 입력받기 위해 이미지를 Flatted 된 2D 패치로 입력받게 된다.
BERT 의 [class] 토큰과 유사하게 학습 가능한 별도의 Embedding 토큰이 추가되어 있다.
pre-training/fine-tuning 시에 여기에 MLP 를 하나 붙여 학습을 진행한다.
Position embedding 도 추가되어 있다.
일반적인 1D embedding 을 사용한다.
Transformer Encoder 를 보면 LN(LayerNorm)과 Residual connect가 사용된 것을 확인할 수 있다. MLP 에서는 GELU가 사용된다.
대략적인 모델의 내용은 위 그림만 보면 된다.
좀 더 자세한 수식은 다음을 참고하자.
LayerNorm 은 다음과 같다.
이제 전체 ViT 에 대해 살펴보자.
DETR와 같이 NLP와 CNN을 결합한 시도라고 할수 있다.
이 아이디어는 매우 간단한데 이미지 분류 문제에 Transformer 를 사용하는 것.
만약 대규모듸 데이터셋으로 pre-training 을 수행한 뒤 좀 더 작은 크기의 데이터셋 (예를 들면 ImageNet, CIFAR-100, VTAB 등)으로 학습을 하면 ViT 는 CNN보다 더 좋은 성능을 얻을 수 있음이 확인되었다.
이는 CNN을 사용하여 학습하는 것보다 더 적은 리소스가 요구된다.

Knowledge Distillation

KD 란 큰 모델의 결과를 작은 결과의 학습에 사용하는 것을 의미한다.
큰 모델의 유용한 정보를 작은 모델이 학습하여 더 좋은 결과를 얻어낼 수 있다.
Teacher 네트워크는 분류 결과에 대한 확률 분포를 출력합니다.
Student 네트워크는 분류 결과를 예측합니다.
두 확률 분포 사이의 차이를 최소화하기 위한 방법으로 Loss 를 설계합니다.
Teacher 네트워트의 정보를 더 잘 추출하기 위해 파라미터 T를 사용합니다.
큰 T 값은 좀더 "soft" 확률 분포 결과를 전달하게 됩니다.
qi=exp(zi/T)exp(zi/T)q_i=\frac{\exp(z_i/T)}{\sum{\exp(z_i/T)}}
이 때의 T를 온도(temperature)라고 부릅니다.
Teacher/Student 모델에서는 Loss 함수에 2개의 Term 을 사용하게 됩니다.
자세한 내용은 생략합니다. (그림만 봐도 쉽게 이해 됩니다.)

Self-supervised Learning with Knowledge Distillation (SSL w/ KD)

Self-supervised Learning 을 이후부터는 SSL이라고 부른다.
SSL 에서 KD를 쓰는 방법에 대한 설명
가장 먼저 서로 다른 view 를 가지는 이미지를 크롭한다. (multi-crop strategy)
우선 주어진 이미지로부터 여러 view 를 추출하여 Set V 를 생성한다.
V 에는 크기 224를 가지는 2개의 global view 가 포함되고 그 외에는 96 크기를 가지는 작은 여러 view 가 포함된다.
Global view 는 Teacher 모델로, 그 외의 view 는 Student 모델로 들어간다.
두 네트워트(Teacher/Student)는 동일한 Backbone 으로 구성된다. (ViT 나 ResNet)
하지만 서로 다른 parameter 수와 prjection head 를 가진다.
Projection head 는 2048 Dim 으로 구성된 3-layer MLP 로 구성된다.
그 뒤로 L2 정규화 및 K-dim 을 가지는 weight norm FC 를 사용한다.
모든 결과가 uniform distribution으로 수렴하는 것을 막기 위해 or 결과에 상관없이 하나의 레이블로만 판정되는 것을 막기 위해 2가지 기법을 제안하였다.
teacher 모델에 bias term 인 c 를 추가
gt(x)gt(x)+cg_t(x)\leftarrow g_t(x) + c
center cc 는 EMA(exponential moving average) 로 업데이트 된다.
cmc+(1m)1Bb=1gθt(xb)c \leftarrow mc +(1-m)\frac{1}{B}\sum_{b=1}{g_{\theta_{t}}(x_b)}
여기서 mm 은 0보다 크고 BB 는 batch size 를 의미한다.
Centering 은 특정 클래스로 쏠리는 현상을 막을 수 있지만 Uniform distribution으로 흐르는 것은 막지 못한다.
반면 Shapening 은 온도 τ\tau를 작게 가져가면 커지게 되고 Centering 과 정확히 반대의 작용을 수행하게 된다.
결국 서로 상보적인 관계로 어느 한쪽만을 사용하게 되면 붕괴(collapse) 상황에 놓이게 된다.
단일로만 사용하는 경우
Entropy 의 경우 각각 0, 1 로 수렴되어 붕괴
KL 값은 모두 0
Teacher 결과는 평균으로 된 중심 값을 사용한다.
두 네트워크의 유사성은 cross-entropy 로 측정된다.
Teacher 모델의 경우 Stop-Gradient (sg) 가 적용되어 있다.
따라서 오로지 student 의 gradient 값만 하우로 전파된다.
Teacher 파라미터는 EMA(exponential moving average) 형태로 업데이트 된다.
θtλθt+(1λ)θs\theta_t \leftarrow \lambda\theta_t +(1-\lambda)\theta_s
학습 중에는 λ\lambda의 값을 0.996에서 1까지 올린다. ( cosine lr)
Cosine Annealing 은 lr-schedule 기법 중 하나로 큰 lr 로 시작했다가 급격하게 낮추는 방식을 사용하고 이를 여러 번 반복하는 형태를 취한다.

실험 결과

일단 ImageNet 을 활용한 pretrain 작업을 레이블 없이 수행하였다.
batch size 는 1024를 사용하고 초기 10epoch 까지는 lr 을 선형 증하시키고 이후 cosine-lr 을 사용한다. (흔한 방식임)
사용한 Data Augment 는 다음과 같다.
컬러 지터링 : brightness, contrast, satutation, hue 를 랜덤하게 조절.
가우시안 블러링 적용
Solarization 사용
기타 자세한 내용은 논문 참고
multi-crop 을 사용하고 position embedding 을 적용하기 위해 bicubic-interpolication을 사용한다.
입력 이미지의 크기를 늘려도 패치 크기는 유지하기 때문에 입력 패치 수 N 이 변경된다.
따라서 Transformer 에서는 더 많은 토큰을 처리하기 위한 모델 및 분류기를 수정할 필요가 없다. (대신 position embedding은 조절해야 한다.)
원칙적으로는 bilinear interpolation 같은 전통적인 scaling 기법을 사용해도 문제가 없어야한다. 하지만 bilinear 보간법은 이웃에 비해 이웃간 l2-norm 을 줄이게 된다. low-norm 벡터는 pre-train Transformer 에 적합하지 않으며 fine-tuning 작업을 거지치 않는 경우 accuracy 가 크게 떨어지는 것을 확인했다.
다음 그림은 training loss 를 표현한 그림이다.
lr 값이 너무 작으면 로스가 감소는 하겠지만 너무 느리게 내려간다.
최적의 lr 영역으로 들어가게 되면 loss 함수가 크게 감소하는 것을 확ㅇ니할 수 있다.
여기에 lr 값을 키우면 다시 loss 값이 반등되고 심지어 loss 값이 크게 증가한다.
최상의 lr 값은 loss 값이 확 떨어지는 것과 관련이 있다.

평가

평가는 ResNet-50 또는 DeiT-samll 모델을 사용
평가 프로토콜은 linear or k-NN로 평가
사전 훈련된 네트워크에서 feature 를 추출하여 평가
분류는 k-NN 으로 사용 (이 때 weighted k-NN을 사용한다.)
가까운 이웃이 미치는 영향이 먼 이웃보다 커야한다는 가정
k-NN 의 개조
이미 빨간색, 녹색으로 판별된 point 가 있는 상태에서 검은 point 를 판별
K=5 인 경우 가까운 5개의 point 에 대해 distance 를 고려하여 계산
가중치를 활용하므로 다음과 같은 상황도 발생함
k-NN 결과 확인
DINO가 ResNet-50 최신 기술과 동등한 성능임을 확인할 수 있다.
ViT 를 사용하는 경우 성능이 매우 높다
DINO 로 더 큰 ViT 를 학습하면 성능이 향상되지만 패치 크기를 줄이는 게 성능에 더 큰 영향을 준다.
패치 크기를 줄리면 실행시간은 줄어들지만 메모리 사용량이 늘어난다.
8x8 패치를 사용하는 기본 ViT 모델로 80.1% 라는 놀라운 성능을 얻었다.

Self-Attention Visualizations

attention map 을 시각화하기 위해서 Nearest Neighbor 보간 방법을 이용해서 원래 크기의 이미지로 확대한다.
Nearest Neighbor 보간 방법은 가장 가까운 점을 선택하고 모든 인접 포인트를 고려하지는 않기 때문에 개별 포인트마다 상수 타임에 계산된다.
알고리즘 자체가 아주 쉽기 때문에 많이 구현되는 기법.
[CLS] 관련
이 토큰에는 레이블(label)이나 정답 등이 기술되지 않는다.
이 말은 모델이 자동으로 클래스 단위의 feature 들을 학습하여 unsupervised object segmantation을 만들어낸다는 의미.
처음 1-3 레이어의 경우 아주 세부적인 pixel 정보들을 함축하고 더 깊은 레이어인 4-6 레벨의 경우 좀 더 global 패치의 정보들을 포현하고 있음을 알 수 있다.

Video instance segmentation

DAVIS-2017 비디오 데이터를 이용하여 segmantation 평가를 수행한다.