Vision AI의 최신 연구 중 하나인 EVA (Empirical Vision Architecture) 모델에 대해 정리한 글입니다.
CLIP을 활용한 Self-Supervised Learning 방식이 핵심이며, 직접 실습과 개념을 이해하면서 정리했어요!
CLIP Vision Encoder가 생성한 의미 벡터를 복원하도록
마스킹된 이미지를 입력으로 학습하는 Self-Supervised Vision Transformer 모델
EVA는 기존 MIM 방식(Masked Image Modeling)의 한계를 넘어서
"픽셀 복원" → "의미 복원"으로 발전한 모델이에요.
| 항목 | 설명 |
|---|---|
| 구조 | ViT-G, ViT-L 등 Transformer 기반 |
| 학습 방식 | 마스킹된 이미지를 보고 CLIP feature 복원 |
| 목표 벡터 | CLIP Vision Encoder의 출력 |
| 손실 함수 | 1 - Cosine Similarity |
| 장점 | 텍스트 없이도 의미 중심 표현 학습 가능 |
🖼️ 원본 이미지
│
┌───────────────▼───────────────┐
│ │
[일부 마스킹] 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 벡터라는 접근이 궁금하다면
직접 코드 실습도 꼭 해보시길 추천합니다!
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 벡터라는 접근이 흥미롭다면, 직접 실습을 해보는 것도 추천드립니다.