GitHub ↗
CHAPTER 03 OF 10
🖼️

Evolution of Vision Representation Learning

Vision 표현 학습의 진화

CNN에서 ViT, 그리고 CLIP·SAM·DINOv2 같은 foundation model까지 — Vision 표현 학습의 역사는 '수동으로 설계한 귀납적 편향'에서 '대규모 데이터로 학습한 보편 표현'으로의 이동이며, AI 엔지니어는 이 스펙트럼에서 언제 어떤 것을 쓸지 판단해야 한다.

Evolution of Vision Representation Learning cheatsheet
🍌 NANO BANANA CHEATSHEET · CH 03

Overview

개관

비전 인식의 역사는 표현(representation)을 어떻게 만드느냐의 역사다. 2012년 AlexNet 이전에는 SIFT, HOG 같은 수작업 피처(handcrafted features)가 표준이었다. 인간이 '엣지', '기울기', '코너'를 정의하고 그 패턴을 SVM에 입력했다. AlexNet은 이 패러다임을 뒤집었다 — 표현을 사람이 설계하는 것이 아니라, 데이터에서 학습한다는 것을 증명했다.

CNN이 지배하던 10년 동안 표현 학습은 두 가지 방향으로 발전했다. 하나는 아키텍처 혁신 — ResNet의 skip connection, EfficientNet의 compound scaling, MobileNet의 경량화. 다른 하나는 학습 방식 혁신 — 지도학습(ImageNet)에서 자기지도학습(SimCLR, MoCo, DINO, MAE)으로. 2021년 ViT(Vision Transformer)가 CNN의 귀납적 편향 없이 충분한 데이터만 있으면 더 나은 표현을 학습할 수 있음을 보여주며 또 한번 패러다임을 전환했다.

지금 우리는 CLIP, SAM, DINOv2 같은 foundation model 시대에 있다. AI 엔지니어의 질문은 '어떤 모델을 처음부터 훈련할 것인가'가 아니라 '어떤 pretrained 표현을 어떻게 활용할 것인가'가 됐다. 이 변화를 이해하는 것이 현대 비전 시스템 설계의 핵심이다.

🎯 Learning Goals
  • CNN의 세 가지 귀납적 편향(지역성, 이동 등변성, 계층성)을 ViT와 대비해 설명할 수 있다
  • SimCLR, DINO, MAE의 self-supervised 학습 방식의 차이를 이해한다
  • CLIP의 contrastive 학습이 무엇을 가능하게 하는지 설명할 수 있다
  • 새 비전 태스크에 어떤 pretrained 모델을 쓸지 선택 기준을 적용할 수 있다

Sections

본문

CNN의 세 가지 귀납적 편향

CNN이 자연 이미지에서 강력한 이유는 세 가지 귀납적 편향이 이미지의 통계적 특성과 완벽히 맞아 떨어지기 때문이다.

1. 지역적 연결성(Local Connectivity): 합성곱 필터는 이미지의 작은 영역(예: 3×3)만 한 번에 본다. 이는 '인접한 픽셀이 상관된다'는 자연 이미지의 특성을 직접 반영한다. 전체 이미지를 한 번에 보는 완전연결층(FC layer)보다 파라미터가 극적으로 적어 학습이 쉽다.

2. 가중치 공유(Weight Sharing, Translation Equivariance): 같은 필터가 이미지 전체에 걸쳐 슬라이딩하며 적용된다. 왼쪽 귀퉁이의 엣지와 오른쪽 귀퉁이의 엣지는 같은 필터로 감지된다. '물체가 어디 있든 같은 물체'라는 자연 이미지의 이동 등변성을 인코딩한다.

3. 계층적 구성(Hierarchical Composition): 얕은 레이어는 엣지와 텍스처를, 중간 레이어는 부품(눈, 코)을, 깊은 레이어는 의미(얼굴, 자동차)를 감지한다. 자연 세계의 객체가 부품들의 계층적 조합으로 이루어진다는 사실과 일치한다.

이 편향들 덕분에 CNN은 수만 장으로도 의미 있는 표현을 학습한다. 반면 이 편향은 의료 이미지처럼 전역 패턴이 중요하거나, 기하학적 변환에 불변하지 않아야 하는 경우에는 단점이 된다.

Vision Transformer: 편향 없는 범용 학습기

2020년 'An Image is Worth 16x16 Words'(ViT) 논문은 이미지를 16×16 패치로 나눈 후 각 패치를 '단어'처럼 취급해 Transformer에 입력했다. 결과는 놀라웠다: CNN의 귀납적 편향 없이도, 충분한 데이터(JFT-300M, 3억 장)가 있으면 CNN을 능가한다.

ViT의 핵심 변화:

  • 합성곱 대신 패치 임베딩 + Positional Encoding
  • Self-attention으로 모든 패치 쌍의 관계를 학습 — 전역적 맥락 포착 가능
  • 귀납적 편향이 약해 데이터 효율이 낮지만, 스케일링 법칙이 작동 — 데이터가 많을수록 빠르게 성능 향상

ViT vs CNN 선택 기준:

상황 추천
레이블 데이터 <100K CNN(ResNet, EfficientNet) — 귀납적 편향 덕분에 샘플 효율 높음
Foundation model fine-tuning ViT 기반 — CLIP, DINOv2 등 강력한 사전학습 모델이 ViT 기반
전역 패턴 중요(의료, 위성) ViT — 장거리 의존성 포착
엣지 디바이스 배포 CNN(MobileNet, EfficientNet-Lite) — 연산 효율

DeiT(Facebook, 2020)는 Knowledge Distillation으로 ViT를 ImageNet만으로 효과적으로 학습시키는 방법을 보여주며 ViT의 데이터 효율 문제를 완화했다.

Self-Supervised Vision Learning: 레이블 없는 표현 학습

레이블 없는 수십억 장의 이미지에서 강력한 표현을 학습하는 방법들이 2020년을 기점으로 폭발적으로 발전했다.

SimCLR (Google, 2020): 같은 이미지의 두 가지 증강(augmentation)을 양성 쌍, 다른 이미지를 음성 쌍으로 취급해 contrastive loss로 학습. 핵심 발견: 색상 지터링, 랜덤 크롭, 블러 등 강력한 증강이 필수적. Batch size가 클수록 음성 쌍이 많아져 성능 향상.

DINO (Facebook, 2021): 'Self-DIstillation with NO labels'. 교사(teacher) 네트워크와 학생(student) 네트워크를 두고, 교사가 학생을 지도한다. 교사는 학생의 가중치를 EMA(Exponential Moving Average)로 업데이트. Contrastive 없이도 강력한 표현 학습. 부산물로 명시적 분할 신호 없이도 객체 경계를 학습 — Attention map이 segmentation mask처럼 보임.

MAE (Meta, 2021): Masked Autoencoder. ViT 패치의 75-80%를 마스킹하고 복원하도록 학습. 직관: 이미지는 공간적 중복이 높아 75%를 가려도 복원 가능 — 이 과정에서 의미 표현이 강제된다. BERT의 비전 버전.

이 세 방법은 각각 다른 귀납적 편향을 가진다. 분류에는 SimCLR/DINO 계열이 강하고, 구조 이해(segmentation, depth)에는 DINO가 강하고, 범용 표현에는 MAE가 강한 경향이 있다.

CLIP과 언어-비전 정렬: Zero-shot의 시대

OpenAI의 CLIP(2021)은 4억 개의 (이미지, 텍스트) 쌍을 contrastive learning으로 학습했다. 핵심 아이디어: 이미지와 그 설명 텍스트는 같은 의미 공간에 가깝게, 관계없는 이미지-텍스트 쌍은 멀게 배치한다.

CLIP이 가능하게 한 것들:

Zero-shot 분류: 훈련에 없던 클래스도 텍스트 설명만으로 분류. 'a photo of a cat' vs 'a photo of a dog' 임베딩과의 코사인 유사도로 결정.

이미지-텍스트 검색: 텍스트 쿼리로 이미지 검색, 이미지로 텍스트 검색 — 같은 공간에 있으므로 직접 비교 가능.

멀티모달 파이프라인의 기반: DALL-E, Stable Diffusion, LLaVA — 현대 멀티모달 AI 시스템의 비전 인코더 대부분이 CLIP 또는 CLIP 파생 모델을 사용한다.

CLIP의 한계: 세밀한 시각적 추론(카운팅, 공간 관계)이 약하고, 의료·위성 같은 도메인 특화 이미지에서는 fine-tuning이 필요하다. OpenCLIP, EVA-CLIP, SigLIP 등이 이를 개선한 변형들이다.

💡 Analogy · 비유
언어 학습의 세 가지 방법

비전 표현 학습의 진화를 외국어 학습에 비유할 수 있다. CNN은 마치 문법책으로 공부하는 것과 같다. 인간이 설계한 규칙(귀납적 편향)을 명시적으로 배운다. '형용사는 명사 앞에 온다', '동사는 주어에 수를 맞춘다' — 이 규칙들은 해당 언어에 특화되어 빠르게 기초를 익히게 해주지만, 다른 언어로 전환하려면 새 문법책이 필요하다.

Self-supervised learning(DINO, MAE)은 원어민 환경에 노출되는 것과 같다. 레이블(번역) 없이 엄청난 양의 원어 텍스트를 읽고, 문맥에서 의미를 추론하며 언어를 익힌다. 규칙을 직접 배우지 않지만, 결국 더 자연스럽고 유연한 이해에 도달한다.

CLIP은 이중언어 상황에서 배우는 것과 같다. 이미지라는 '언어'와 텍스트라는 '언어'를 동시에 노출해 둘이 같은 개념을 가리킬 때 연결짓는다. '고양이 사진'과 'cat'이라는 단어를 반복해 보면서 두 표현 사이의 다리를 만든다. 이 덕분에 'a photo of a snow leopard'라는 텍스트만으로, 직접 보지 않은 동물도 인식할 수 있게 된다(zero-shot).

CLIP을 사용해 zero-shot 이미지 분류를 구현하고, 직접 fine-tuning한 선형 probe와 비교해보자. 이 패턴은 새 도메인에서 '사전학습 표현 그대로 쓸지 vs fine-tuning할지'를 결정하는 실제 평가 방식이다.

python
import torch
import clip
from PIL import Image
import requests
from io import BytesIO

# CLIP 모델 로드 (ViT-B/32 기반)
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

def zero_shot_classify(image: Image.Image, labels: list[str]) -> dict:
    """텍스트 레이블만으로 이미지 분류 (fine-tuning 없음)"""
    # 이미지 전처리
    image_input = preprocess(image).unsqueeze(0).to(device)

    # 텍스트 프롬프트 생성 (CLIP은 자연어 설명에 민감)
    text_prompts = [f"a photo of a {label}" for label in labels]
    text_tokens = clip.tokenize(text_prompts).to(device)

    with torch.no_grad():
        image_features = model.encode_image(image_input)
        text_features = model.encode_text(text_tokens)

        # L2 정규화 후 코사인 유사도
        image_features /= image_features.norm(dim=-1, keepdim=True)
        text_features /= text_features.norm(dim=-1, keepdim=True)
        similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1)

    probs = similarity[0].cpu().numpy()
    return {label: float(prob) for label, prob in zip(labels, probs)}

# 예시 분류
labels = ["cat", "dog", "bird", "fish", "horse"]
# 실제 사용 시 local image로 대체
# result = zero_shot_classify(Image.open("my_image.jpg"), labels)
# print(result)  # {'cat': 0.82, 'dog': 0.12, ...}

핵심은 encode_imageencode_text가 같은 임베딩 공간을 공유한다는 것이다. L2 정규화 후 코사인 유사도(내적)를 계산하면 이미지와 텍스트 간 의미적 거리가 측정된다. Softmax로 확률로 변환하면 zero-shot 분류기가 완성된다. 텍스트 프롬프트를 'a photo of a cat'으로 쓰는 것은 CLIP이 이런 자연어 설명으로 학습됐기 때문이다 — 단순 레이블명보다 성능이 5-15% 높다.

🏭 현업에서의 평가
현대 비전 엔지니어링 평가의 핵심은 '어떤 모델을 처음부터 훈련시킬 것인가'가 아니라 '어떤 foundation model을 어떻게 활용할 것인가'다. 특히 fine-tuning 전략(full fine-tuning vs linear probe vs LoRA)과 domain shift에 대한 이해가 중요하다.

✅ 시니어가 보는 것

  • 주어진 태스크와 데이터 크기에 맞는 pretrained 모델 선택 및 fine-tuning 전략 설계
  • CLIP zero-shot의 한계(세밀한 시각 추론, 도메인 특화)를 이해하고 언제 fine-tuning이 필요한지 판단
  • Self-supervised 표현 품질을 linear probe accuracy로 평가하는 방법 이해
  • 의료/위성 등 특수 도메인에서 일반 비전 모델의 domain shift 문제 인식

⚠️ 레드 플래그

  • ResNet-50을 ImageNet에서 처음부터 훈련시키는 제안 — 사전학습 모델을 활용하지 않음
  • CLIP이 모든 비전 태스크에 적합하다고 가정 — 도메인 특화 필요성 무시
  • fine-tuning 시 learning rate schedule 없이 전체 모델을 그대로 훈련 — catastrophic forgetting

🎤 예상 인터뷰 질문

  1. 의료 방사선 이미지 분류 태스크에서, CLIP zero-shot과 ImageNet pretrained ResNet fine-tuning 중 어떤 것을 선택하겠습니까? 이유는?
  2. DINOv2와 CLIP 모두 강력한 비전 표현을 학습하는데, 어떤 태스크에 각각 더 적합합니까?
  3. Linear probe와 full fine-tuning의 차이는 무엇이며, 각각 언제 사용합니까?
숙달 vs 익숙함: 익숙한 수준은 CLIP, ViT, ResNet을 알고 코드를 실행할 수 있는 것이다. 숙달은 새 비전 태스크가 주어졌을 때 — 데이터 크기, 도메인 특수성, 레이턴시 요구, 레이블 가용성을 분석해 — 처음부터 훈련/사전학습 활용/linear probe/full fine-tuning/LoRA 중 최적을 선택하고 그 결정을 정량적 근거로 설명할 수 있는 것이다.

Key Takeaways

핵심 정리

표현 학습의 역사 = 귀납적 편향의 역사

SIFT→CNN→ViT→Foundation Model은 '수동 설계 편향'에서 '학습된 범용 표현'으로의 이동이다.

CNN 편향 = 지역성 + 이동 등변성 + 계층성

이 세 편향이 자연 이미지에 완벽히 맞아 샘플 효율을 극대화한다. 데이터가 적을 때 여전히 강력하다.

ViT는 데이터가 많을수록 강하다

귀납적 편향이 약해 소규모 데이터에서는 CNN에 뒤지지만, 대규모 사전학습에서 스케일링 법칙이 작동한다.

CLIP = 이미지-텍스트 공유 공간

Zero-shot 분류와 크로스모달 검색의 기반. 현대 멀티모달 AI 시스템의 핵심 빌딩 블록이다.

Self-supervised 학습 = 레이블 없는 표현

MAE, DINO, SimCLR은 수십억 장의 비레이블 이미지에서 강력한 표현을 학습한다.

Foundation model 시대의 역할

'어떤 모델을 훈련할 것인가'에서 '어떤 표현을 어떻게 활용할 것인가'로 AI 엔지니어의 역할이 이동했다.