EVA 모델에 대하여

피리붐·2025년 4월 4일

논문리뷰

목록 보기
3/4

🧠 EVA 모델 완전 정복! (Exploring the Limits of Masked Visual Representation Learning at Scale)

Vision AI의 최신 연구 중 하나인 EVA (Empirical Vision Architecture) 모델에 대해 정리한 글입니다.
CLIP을 활용한 Self-Supervised Learning 방식이 핵심이며, 직접 실습과 개념을 이해하면서 정리했어요!


🔍 EVA란?

CLIP Vision Encoder가 생성한 의미 벡터를 복원하도록
마스킹된 이미지를 입력으로 학습하는 Self-Supervised Vision Transformer 모델

EVA는 기존 MIM 방식(Masked Image Modeling)의 한계를 넘어서
"픽셀 복원" → "의미 복원"으로 발전한 모델이에요.


📘 EVA 핵심 요약

항목설명
구조ViT-G, ViT-L 등 Transformer 기반
학습 방식마스킹된 이미지를 보고 CLIP feature 복원
목표 벡터CLIP Vision Encoder의 출력
손실 함수1 - Cosine Similarity
장점텍스트 없이도 의미 중심 표현 학습 가능

🧠 CLIP은 뭐고, 어떻게 쓰였을까?

  • CLIP: 이미지-텍스트 쌍으로 학습된 모델 (OpenAI)
  • EVA에서는 CLIP의 Vision Encoder 출력 벡터학습의 정답값(target)으로 사용
  • 직접 포함되거나 학습되지는 않음! ❌

🔁 EVA 학습 구조 다이어그램

                        🖼️ 원본 이미지
                             │
            ┌───────────────▼───────────────┐
            │                               │
     [일부 마스킹]                    CLIP Vision Encoder
            │                               │
            ▼                               ▼
    마스킹된 이미지                 ✅ 정답 feature 생성
            │                               │
            ▼                               │
       EVA 모델                         (gradient X)
            │
            ▼
     🔵 예측된 feature
            │
            ▼

🔻 Cosine Similarity Loss 계산
(예측 vs 정답)


🔄 모델 학습 (EVA만!)


🧾 코드 흐름 예시 (간단 버전)

# 이미지 준비
image_tensor = preprocess(image).unsqueeze(0)

# 마스킹
masked_image = apply_mask(image_tensor, mask_ratio=0.4)

# EVA 모델 예측
pred_feature = EVA(masked_image)

# CLIP에서 정답 feature 추출
with torch.no_grad():
    target_feature = CLIP.encode_image(image_tensor)

# 손실 계산
loss = 1 - cosine_similarity(pred_feature, target_feature)

📌 핵심 정리

질문답변
EVA에 CLIP이 들어있나요?❌ 아니요. CLIP은 학습 시 정답으로만 사용돼요
CLIP 벡터는 어떤 의미인가요?"a cat", "a dog" 같은 개념이 담긴 의미 벡터
EVA는 무엇을 예측하나요?CLIP의 의미 벡터 (Vision feature)
왜 좋은가요?텍스트 없이도 고차원 개념을 학습 가능

🎯 직접 실험해본 예시

고양이 사진을 넣고 EVA-style 방식으로 Cosine Loss를 계산한 결과:

Cosine Loss (EVA style): 0.2415
→ 예측한 벡터가 정답과 약 76% 유사한 방향!

🎨 마스킹 시각화도 해봤어요!

원본 이미지마스킹된 이미지마스크 영역
🐱🐱 (일부 가림)흑백 블록


→ 마스킹 후에도 EVA는 CLIP feature를 잘 예측해냅니다 💪


✅ 마무리

EVA는 CLIP의 강력한 의미 표현을 Vision Transformer에 녹여낸
Self-supervised 학습의 최신 트렌드라고 볼 수 있어요.

📌 MIM + 의미 복원 + CLIP 벡터라는 접근이 궁금하다면
직접 코드 실습도 꼭 해보시길 추천합니다!


💻 실습에 사용한 코드 (EVA-style Cosine Loss 계산)

def apply_mask(image_tensor, mask_ratio=0.4):
    B, C, H, W = image_tensor.shape
    mask = torch.rand(B, 1, H//16, W//16) < mask_ratio
    mask = mask.repeat(1, C, 16, 16)
    mask = torch.nn.functional.interpolate(mask.float(), size=(H, W), mode='nearest')
    return image_tensor * (1 - mask)

image_tensor = preprocess(image_raw).unsqueeze(0).to(device)
masked_image = apply_mask(image_tensor.clone())

with torch.no_grad():
    predicted_feature = model.encode_image(masked_image)
    target_feature = model.encode_image(image_tensor)

predicted_feature /= predicted_feature.norm(dim=-1, keepdim=True)
target_feature /= target_feature.norm(dim=-1, keepdim=True)
cosine_loss = 1 - torch.cosine_similarity(predicted_feature, target_feature).mean()

print(f"Cosine Loss (EVA style): {cosine_loss.item():.4f}")

이 코드는 EVA 논문 방식처럼, 마스킹된 이미지를 입력으로 넣고
CLIP Vision Encoder로부터 생성된 의미 벡터와 비교하여
Cosine Similarity Loss를 계산하는 구조입니다.

EVA는 CLIP의 강력한 의미 표현을 Vision Transformer에 녹여낸
Self-supervised 학습의 최신 트렌드라고 볼 수 있어요.
MIM + 의미 복원 + CLIP 벡터라는 접근이 흥미롭다면, 직접 실습을 해보는 것도 추천드립니다.

profile
끄적이다

0개의 댓글