CV 분야에서 Transformer
Image Generation (이미지 생성)
- Image Transformer (2018): 텍스트 생성 방식(GPT-like)을 이미지 픽셀에 적용
- Taming Transformer (2020): VQ-VAE와 Transformer를 결합해서 더 효율적인 생성 가능
잠깐!
- CNN: 근처 픽셀 중심으로 점점 넓혀서 보기
- Transformer: 처음부터 전체를 보고, 어디가 중요한지를 학습
| 항목 | CNN | Transformer (ViT 등) |
| 입력 처리 방식 | 필터로 국소 영역 처리 | 패치 단위로 전체 주목 |
| 시야 범위 | 처음엔 작음 → 깊어지며 커짐 | 처음부터 전체를 볼 수 있음 |
| 관계 학습 | 국소적, 계층적 | 전역적, 위치 간 관계 바로 학습 가능 |
| 병렬 처리 | 상대적으로 빠름 | 상대적으로 느릴 수 있음 (ViT 초기에는) |
Image Recognition (이미지 인식) : 이미지를 픽셀 단위로 자른 '패치(patch)'들을 입력으로 사용하여 각 패치를 일종의 단어(token)처럼 취급 하고 모든 패치 간의 중요도(Attention score)를 계산해서 인식 한다.
- ViT (Vision Transformer): 이미지를 패치로 나눠서 입력하고, Attention으로 각 위치 간 관계를 학습
- Transformer를 그대로 이미지에 적용
- Swin Transformer: 계층적 구조를 도입해 로컬 정보 + 전역 정보 동시에 처리 가능
- CNN의 계층적 구조를 결합한 더 실용적인 Vision Transformer
- 이미지 분류 (cat/dog), 객체 탐지, 이미지 세그멘테이션 등
| 항목 | Vision Transformer (ViT) | Swin Transformer |
| 등장 | 2020년 | 2021년 |
| 구조 | 이미지를 패치로 나눈 후, 전역 self-attention 수행 | 슬라이딩 윈도우(local window) 기반 attention → 계층적 구조 도입 |
| 시야(Field of View) | 처음부터 이미지 전체 | 작은 윈도우 → 점점 넓게 (CNN처럼 계층적 확장) |
| 특징 | 전역 관계 학습에 탁월 | 계산량 줄이고, 국소-전역 정보 모두 활용 |
| 장점 | 전체 패치 간 관계 학습 가능 (전역적) | 효율성 ↑, 해상도 높은 이미지도 잘 처리 |
| 단점 | 고해상도에서 느리고 비효율적 | 구조 복잡함, 구현 난이도 있음 |
Transformer 등장 이전: RNN 기반 이미지 생성
PixelRNN / PixelCNN 은 이미지를 “왼쪽 → 오른쪽, 위 → 아래” 순서로 한 픽셀씩 예측해서 생성한다
PixelRNN 구조 ➡ 단점: 속도 느림, 병렬화 어려움
- 각 픽셀을 이전 픽셀들에 대한 조건부 확률로 모델링
- 즉, 이미지도 시퀀스(sequence)처럼 보고 처리
| 구조 |
설명 |
| Row LSTM | 가로 방향으로 한 줄씩 순차 예측 |
| Diagonal BiLSTM | 대각선 방향으로 병렬화 가능 |
| PixelCNN | CNN을 사용해서 병렬화 시도 (하지만 여전히 느림) |
Conditional PixelCNN ➡ 텍스트 조건부 이미지 생성의 시초 격 구조
- 특정 조건(h)에 따라 이미지 생성. 예: "숫자 3을 그려줘" → 조건을 기반으로 픽셀 예측
- 구조는 Gated PixelCNN, ResNet 기반 등 발전
| 용어 |
의미 |
| Conditional PixelCNN | 조건(h)을 입력받아 해당 조건에 맞는 이미지를 픽셀 단위로 생성 |
| Gated PixelCNN | 게이트 연산을 추가해서 더 복잡하고 정교한 분포를 학습할 수 있게 개선한 구조 |
| ResNet 구조 도입 | 잔차 연결(residual connection)을 통해 딥한 네트워크 학습 안정화 및 성능 향상 |
이미지 생성에서의 Transformer
PixelCNN을 대체하기 위해 등장한 첫 Transformer 기반 이미지 생성 모델이다. 픽셀을 토큰처럼 보고, GPT처럼 한 픽셀씩 생성한다. Masked Self-Attention 사용하여 미래 픽셀은 안 보고 이전 픽셀만 보고 예측할 수 있다.
- Local Self-Attention: 전부 다 보진 않고, 가까운 픽셀끼리만 Attention → 연산량 절감
- 1D, 2D attention 둘 다 시도
- 성능은 PixelCNN/PixelRNN보다 비슷하거나 더 나은 성능을 보인다
Generative Pretraining from Pixels (GPP)
GPT처럼 이미지를 픽셀 단위 시퀀스로 바꾸고, Autoregressive 또는 Masked 방식으로 사전학습한다. 이건 이미지 Transformer가 어떻게 사전학습(Pretraining)을 하느냐에 대한 설명이다.
| 방식 |
설명 | GPT/BERT 유사 |
| Autoregressive | 이전 픽셀만 보고 다음 픽셀 예측 | GPT |
| Masked Prediction | 중간 픽셀 일부 가리고 맞추기 | BERT |
TransGan: CNN을 전혀 쓰지 않은 GAN
- Generator, Discriminator 모두 순수 Transformer 블록만으로 구성
- CNN 없이 이미지를 생성하고 평가
| 기존 GAN 문제 | TransGAN 장점 |
| 대부분 CNN 기반 | CNN 없이 Transformer만으로 구현 |
| CNN은 지역 정보 강함, 전역 정보 약함 | Transformer는 전체 정보를 더 잘 모델링 |
| 고해상도 한계 있음 | Transformer로 더 유연한 구조 가능성 제시 |
Taming Transformers: 고해상도 이미지를 Transformer로 생성하기, Transformer는 픽셀 하나하나를 토큰으로 보면 너무 길어지고 무거워 지기 때문에 여러가지 해결책들이 나왔다.
| 구성 |
요소설명 |
| VQ-VAE | 이미지를 코드북(codebook)으로 압축 |
| VQ-GAN | GAN Loss로 더 자연스러운 이미지 압축 |
| + Transformer | 압축된 코드들을 시퀀스로 처리해서 이미지 생성 |
| 단계 | 구성 요소 | 설명 |
| ① 이미지 압축 | VQ-VAE | 이미지를 discrete 코드(token)로 압축 (ex: 32x32 코드) |
| ② 고급 압축 | VQ-GAN | 더 고화질 유지 + GAN loss로 퀄리티 ↑ |
| ③ 생성 | Transformer | 텍스트처럼 코드를 시퀀스로 예측 (auto-regressive) |
| ④ 복원 | VQ-GAN 디코더 | 예측한 코드를 다시 이미지로 복원 |
정리
| 시기 | 이름 | 특징 | 한 줄 설명 |
| 2018 | Image Transformer | 픽셀 단위 생성 (AutoRegressive) | PixelCNN을 Transformer로 대체 |
| 2020 | GPP | GPT/BERT 스타일 시각 학습 | 픽셀을 시퀀스로 학습, 전이 학습용 |
| 2020 | Taming Transformer | VQ-VAE + GAN + Transformer | 고해상도 이미지 생성도 가능 |
| 2021 | TransGAN | Generator/Discriminator 모두 Transformer | CNN 없는 순수 Transformer GAN 구현 |
이미지 인식에서의 Transformer
Vision Transformer (ViT) - 이미지 인식용 트랜스포머의 시작
Google에서 2020년에 발표한 논문: "An Image is Worth 16x16 Words" -> 이미지를 작은 패치(조각)로 나눈 뒤, 이걸 텍스트 토큰처럼 Transformer에 넣는다.
| CNN | ViT |
| 로컬 영역 중심 처리 (필터 중심) | 전역 패치 간 관계를 모델링 |
| 이미지 전체를 한 번에 처리 | 패치 단위로 나눠 처리 |
| Conv 연산 기반 | Self-Attention 기반 |
| 항목 | ResNet | ViT |
| 기반 | CNN (Conv) | Transformer (Attention) |
| 입력 | 전체 이미지 | 패치 분할 후 입력 |
| 학습 유연성 | 다양한 크기 이미지 잘 처리 | 패치 개수에 민감 |
BEiT: 이미지용 BERT 스타일 사전학습 -> BEiT는 ViT 기반이지만, BERT처럼 마스킹된 이미지 패치를 복원하는 식으로 사전학습
| 구조 | 설명 |
| 이미지 → 패치 | 이미지를 여러 조각으로 분할 |
| 마스킹 | 일부 패치를 [M]으로 가림 |
| 예측 | 나머지 패치들을 보고 마스킹된 걸 복원 |
| 토크나이저 | 이미지 패치를 ‘시각 토큰’으로 바꾸는 도구 사용 |
MAE (Masked AutoEncoder)
| 구성 |
요소설명 |
| Encoder-Decoder 구조 | 인코더로 관찰된 패치 처리, 디코더로 전체 복원 |
| 75% 패치 마스킹 | 적은 양의 정보만 보고 복원하도록 학습 (효율성↑) |
| 비대칭 구조 | 인코더는 작고 빠름, 디코더는 복원만 전담 |
SAM (Segment Anything Model)
Segment Anything은 “프롬프트만 주면 어떤 이미지든 객체를 분할”할 수 있는 범용 모델입니다.
| 파트 |
설명 |
| Prompt Encoder | "이거 분할해줘!"라는 위치/텍스트 정보를 입력 |
| Image Encoder | ViT 기반으로 이미지 패치를 인코딩 |
| Decoder | Cross-attention을 통해 프롬프트 반영 + 마스크 생성 |
'인공지능' 카테고리의 다른 글
| Vision 생성모델 - Diffusion (1) | 2025.05.28 |
|---|---|
| Vision 생성 모델 - VAE, GAN (5) | 2025.05.28 |
| Post Transformer(feat. GPT, BERT) (2) | 2025.05.27 |
| RNN 기반 Sequence-to-Sequence 모델과 Attention (3) | 2025.05.27 |
| 알고 있으면 쓸모 있는 AI 지식(14) (2) | 2025.05.26 |