[ViT] Vision Transformer 구현 -0 Linear Projection of Flattened Pathes
by apsdfjoi2023. 4. 21.
728x90
반응형
Vision Transformer를 모듈별로 구현하며 궁금한 점을 기록했다.
출처 : https://arxiv.org/abs/2010.11929
Vision Transformer(ViT)의 데이터(이미지) 처리 프로세스를 ChatGPT에게 물어봤다.
입력 이미지에서 패치 추출: 입력 이미지에서 패치를 추출합니다. 일반적으로는 16x16 크기의 패치를 사용합니다. 이는 이미지의 크기에 따라 조정될 수 있습니다.
임베딩: 추출한 각 패치는 먼저 임베딩(embedding)되어 벡터로 변환됩니다. 이를 위해 일반적으로 선형 변환(linear transformation)과 사전 학습된(Pre-trained) 모델을 사용합니다.
위치 임베딩: 임베딩된 패치의 위치 정보를 제공하기 위해 위치 임베딩(Positional embedding)이 추가됩니다. 이는 각 패치의 위치에 대한 고유한 값을 포함하는 벡터입니다.
인코더(Encoder) 블록: 인코더 블록은 여러 개의 셀프 어텐션(self-attention) 및 피드 포워드(feedforward) 레이어를 사용하여 패치를 처리합니다. 이러한 레이어는 입력 패치에 대한 내부 상호 작용과 특성 강화를 통해 패턴을 추출하고, 인코더 출력을 생성합니다.
출력 계층: 인코더의 출력은 분류(classification)를 위한 완전 연결(fully-connected) 또는 소프트맥스(softmax) 레이어로 전달됩니다.
ViT는 기존 기계 번역 모델인 Transformer 아키텍처를 그대로 사용하며, text가 아닌 image에서 embedding vector를 구하기 위해 패치로 나누고 'Linear Projection of Flattened Pathes' 작업을 거친다.
C : 이미지 channel , N : patch 개수, P : patch 크기(가로,세로)
이때, Projection 연산은 이미지를 일정한 크기로 나눈 patch들을 바로 Flatten 할 수도 있지만 Convolution 연산으로 진행한다.
댓글