AI/Dataset

[Dataset] ImageNet-A, ImageNet-R, ImageNet-C download 다운받는법 / DINO eval 방법, 구성

도도걸만단 2026. 4. 10. 07:59
반응형
  • ImageNet-A
    •  “natural adversarial examples”용 벤치마크임. 합성 노이즈를 넣은 데이터가 아니라, 현실에서 자연스럽게 찍힌 원본 이미지인데도 기존 ImageNet 분류기가 자주 틀리도록 adversarial filtration으로 선별한 데이터임. 논문 기준으로 7,500장, 그리고 ImageNet-1k 중 200개 클래스 subset으로 구성됨. 그래서 이 벤치마크는 “모델이 진짜 object semantics를 봤는지, 아니면 ImageNet식 편한 cue에 너무 의존했는지”를 보기 좋음. 인간에게는 비교적 쉬운데 모델은 크게 무너질 수 있다는 점이 핵심임.
  • ImageNet-R
    •  R은 rendition임. 즉 사진이 아니라 cartoon, painting, sketch, embroidery, sculpture, toy, video game render 같은 다양한 스타일의 “표현물” 이미지들로 만든 벤치마크임. 공식 설명상 30,000장, 200개 ImageNet 클래스로 구성됨. 이 벤치마크는 low-level texture나 사진 도메인에 과적합된 표현보다, style이 달라져도 category identity를 유지하는 representation이 더 잘 버티는지 보는 데 적합함.
  • ImageNet-C
    •  A/R과 다르게, 새 이미지를 모은 게 아니라 기존 ImageNet 이미지에 corruption을 인위적으로 입힌 benchmark임. 원래 benchmark는 15개 corruption type을 쓰고, 각 corruption마다 severity 5단계가 있어서 총 75개 corruption setting이 생김. 카테고리는 대체로 noise, blur, weather, digital이고, canonical corruption 예시는 Gaussian noise, shot noise, impulse noise, defocus blur, glass blur, motion blur, zoom blur, snow, frost, fog, brightness, contrast, elastic transform, pixelate, JPEG compression임. 여기서는 보통 mCE(mean Corruption Error) 같은 지표를 많이 보고, 낮을수록 좋음.

A / R / C의 차이를 직관적으로 보면

세 개가 다 robustness benchmark이긴 한데, 무너뜨리는 방식이 다름.

ImageNet-A
자연 이미지인데도 모델이 유독 잘 틀리게 되는 natural adversarial examples임.
즉 “합성 corruption 없음, 그냥 현실 이미지인데 어려운 샘플”임. (arXiv)

ImageNet-R
사진이 아니라 painting, cartoon, sketch, sculpture, toy, game render 같은 rendition/style shift가 있는 이미지임.
즉 “object identity는 같지만 표현 방식이 달라졌을 때”를 봄. (GitHub)

ImageNet-C
같은 원본 이미지에 노이즈, blur, JPEG compression 같은 corruption을 입힌 것임.
즉 “이미지는 같은데 quality가 망가졌을 때”를 봄. (arXiv)

그래서 아주 간단히 요약하면:

  • A: 자연 hard sample robustness
  • R: 스타일/표현 변화 robustness
  • C: 저수준 열화/corruption robustness (arXiv)

ImageNet-A

  • 정식 성격: natural adversarial examples
  • 이미지 수: 7,500장
  • 클래스 수: 200 classes (ImageNet-1k subset)
  • 데이터 형태: 새로 수집한 실제 자연 이미지
  • 평가 포인트: 모델이 쉬운 shortcut이 아니라 진짜 semantic object understanding을 했는지 확인 (arXiv)

다운로드는 보통 이렇게 함:

wget https://people.eecs.berkeley.edu/~hendrycks/imagenet-a.tar
tar -xvf imagenet-a.tar

ImageNet-R

  • 정식 성격: rendition / style shift benchmark
  • 이미지 수: 30,000장
  • 클래스 수: 200 classes
  • 데이터 형태: art, cartoon, graffiti, embroidery, sculpture, sketch, toy, video game render 등
  • 평가 포인트: 사진 도메인을 넘어 style이 변해도 class identity를 유지하는가 확인 (GitHub)

다운로드는 보통 이렇게 함:

wget https://people.eecs.berkeley.edu/~hendrycks/imagenet-r.tar
tar -xvf imagenet-r.tar

ImageNet-C

  • 정식 성격: common corruptions benchmark
  • 이미지 수: 일반적으로 ImageNet validation 이미지 기반
  • 클래스 수: 사실상 ImageNet-1k validation labeling 구조
  • 데이터 형태: 기존 validation 이미지에 15 corruption × 5 severity 적용
  • corruption 수: 15 types
  • severity 수: 5 levels
  • 대표 지표: CE, mCE
  • 평가 포인트: blur, noise, weather, compression 등에 대한 안정성 확인 (arXiv)

1. ImageNet-R download


1. 공식 다운로드 링크

ImageNet-R GitHub에서 제공하는 링크는 다음 파일임:

https://people.eecs.berkeley.edu/~hendrycks/imagenet-r.tar

2. 터미널에서 다운로드

가장 기본:

wget https://people.eecs.berkeley.edu/~hendrycks/imagenet-r.tar

혹은 curl:

curl -O https://people.eecs.berkeley.edu/~hendrycks/imagenet-r.tar

3. 압축 해제

tar -xvf imagenet-r.tar

그러면 보통 이런 구조로 나옴:

imagenet-r/
 ├── n01443537/
 ├── n01484850/
 ├── ...

→ 각 폴더가 ImageNet class (WordNet ID)


4. (중요) ImageNet label 매핑

ImageNet-R은 200개 클래스 subset이라서
ImageNet-1k label index 그대로 쓰면 안 되고:

  • 별도 mapping 필요
  • 보통 논문/코드에서 imagenet_r_mask 또는 subset indices 제공함

예:

imagenet_r_indices = [...]  # 200개 클래스 index

5. 추천: 경로 정리

실험할 때는 이렇게 해두는게 편함:

mkdir -p datasets/imagenet-r
mv imagenet-r/* datasets/imagenet-r/

6. (실험 관점 핵심)

  • train 없음 → evaluation only dataset
  • 보통 pipeline:
Image → DINO encoder → feature
→ pretrained linear head (ImageNet-1k)
→ subset filtering (200 classes)
→ accuracy 계산

자주 하는 실수

  1. ❌ ImageNet-1k 전체 logits 그대로 eval
    → 틀림
  2. ✅ 반드시 200 class subset만 남겨야 함

 


2. Imagenet-A download

 

1. 공식 다운로드 링크

ImageNet-A 는 아래 링크로 제공됨:

https://people.eecs.berkeley.edu/~hendrycks/imagenet-a.tar

이건 논문/깃허브에서도 동일하게 안내되는 공식 경로임 (Kaggle)


2. 터미널에서 다운로드

wget https://people.eecs.berkeley.edu/~hendrycks/imagenet-a.tar

또는

curl -O https://people.eecs.berkeley.edu/~hendrycks/imagenet-a.tar

3. 압축 해제

tar -xvf imagenet-a.tar

구조는 이렇게 나옴:

imagenet-a/
 ├── n01443537/
 ├── n01531178/
 ├── ...

→ ImageNet class별 폴더 (200 classes)


4. 데이터 특징 (실험할 때 중요)

  • 7,500장 이미지
  • 200개 클래스 subset
  • “모델이 일부러 틀리도록 선별된 이미지”
    → 그래서 accuracy가 극단적으로 떨어짐 (ResNet50 ~2% 수준) (arXiv)

5. (중요) eval할 때 주의

ImageNet-R이랑 동일하게:

이렇게 하면 틀림

1000-class logits 그대로 accuracy 계산

반드시 이렇게 해야함

  1. ImageNet-1k classifier 사용
  2. 200 class subset index만 남김
  3. 그 위에서 accuracy 계산

6. 추천 디렉토리 정리

mkdir -p datasets/imagenet-a
mv imagenet-a/* datasets/imagenet-a/

 

ImageNet-A는 그냥 어려운 데이터가 아니라:

“모델이 reliance하고 있는 shortcut (texture, color, background)을 일부러 깨는 데이터”

  • DINO feature robustness
  • nuisance disentanglement
  • minority perception

이거 검증할 때 굉장히 중요한 benchmark임


 

3. ImageNet-C download

ImageNet-C는 새로운 사진을 수집한 데이터셋이 아니라, 기존 ImageNet validation 이미지들에 다양한 corruption을 인위적으로 적용해서 만든 robustness benchmark임. 핵심 목적은 “모델이 분류를 잘하냐”가 아니라, 노이즈, blur, 압축, 날씨 효과 같은 현실적인 열화가 생겼을 때 얼마나 덜 무너지냐를 평가하는 것임. (arXiv)

ImageNet-C는 총 15개의 corruption type을 사용하고, 각 corruption마다 severity 1~5의 다섯 단계가 있음. 그래서 전체 평가 조건은 15 × 5 = 75개 corruption setting으로 생각하면 됨. (arXiv)

대표 corruption들은 보통 다음 네 그룹으로 나눔.
noise: Gaussian noise, shot noise, impulse noise
blur: defocus blur, glass blur, motion blur, zoom blur
weather: snow, frost, fog, brightness
digital: contrast, elastic transform, pixelate, JPEG compression (arXiv)

즉 ImageNet-C는 이런 질문을 던지는 benchmark라고 보면 됨:

“깨끗한 validation 이미지에서는 맞추는데,
조금 흐려지거나 압축되거나 안개가 끼면 바로 무너지는가?”

그래서 clean accuracy와는 다른 성질을 측정함. 어떤 모델은 clean ImageNet top-1은 높아도 corruption robustness는 약할 수 있고, 반대로 조금 덜 맞아도 corruption에 더 안정적일 수 있음. (arXiv)


ImageNet-C는 보통 어떻게 평가해?

ImageNet-C에서는 보통 단순 accuracy도 볼 수 있지만, 대표적으로는 CEmCE를 많이 씀.

  • CE (Corruption Error): 특정 corruption 하나에 대해 5개 severity 전체에서의 error를 집계한 값
  • mCE (mean Corruption Error): 15개 corruption 전체에 대한 평균 CE (arXiv)

실전에서는 그냥 이렇게 이해해도 충분함:

  • accuracy 높을수록 좋음
  • error / CE / mCE는 낮을수록 좋음 (arXiv)

특히 DINO 같은 feature extractor를 볼 때는,

  1. ImageNet clean에서 linear probe를 학습하거나 classifier를 준비하고
  2. 그 classifier를 ImageNet-C의 corruption 이미지들에 그대로 적용해서
  3. corruption별 성능 저하폭을 측정하는 식으로 많이 평가함. 이때 핵심은 “backbone feature가 corruption에 얼마나 안정적인가”를 보는 것임. 이 해석은 DINOv2 계열 robustness 평가 방식과도 잘 맞음. (arXiv)

 


공식 repo는 robustness repo 쪽에서 안내됨:

git clone https://github.com/hendrycks/robustness

실제 다운로드는 repo의 안내 링크를 따라 받는 식으로 진행하는 경우가 많음. 공식 benchmark 설명은 corruption robustness benchmark로 제공됨. (GitHub)


실험할 때 중요한 공통 주의점

A와 R은 200-class subset이라서,
ImageNet-1k classifier 결과를 그대로 accuracy 계산하면 안 되고 해당 200개 클래스 subset으로 logits/filtering해서 평가해야 함. 반면 C는 기본적으로 ImageNet validation 기반 corruption benchmark라서 보통 ImageNet-1k classifier 체계를 그대로 따라감. (arXiv)

즉 네가 DINO encoder로 평가한다면 보통 이렇게 됨:

  • A/R: ImageNet-1k classifier 출력 → 200-class subset만 남김 → accuracy 계산
  • C: corruption version들에 대해 그대로 top-1 / error / mCE 계산 (arXiv)

DINO eval 방법, 구성

 

먼저 큰 그림부터 말하면, ImageNet-A / ImageNet-C / ImageNet-R는 전부 “ImageNet-1k로 배운 표현이, 분포가 조금만 바뀌어도 무너지는지 아닌지”를 보는 robustness / domain generalization benchmark임.

반면 DINO의 가장 기본적인 공식 eval은 원래 ImageNet k-NN evalImageNet linear eval이 중심이고, 이후 DINOv2에서는 여기에 ImageNet-V2, ReaL, A/R/C, Sketch, segmentation, depth, retrieval 같은 다운스트림 평가가 크게 확장됨.

 

ImageNet-A는 “natural adversarial examples”용 벤치마크임. 합성 노이즈를 넣은 데이터가 아니라, 현실에서 자연스럽게 찍힌 원본 이미지인데도 기존 ImageNet 분류기가 자주 틀리도록 adversarial filtration으로 선별한 데이터임.

논문 기준으로 7,500장, 그리고 ImageNet-1k 중 200개 클래스 subset으로 구성됨.

그래서 이 벤치마크는 “모델이 진짜 object semantics를 봤는지, 아니면 ImageNet식 편한 cue에 너무 의존했는지”를 보기 좋음.

인간에게는 비교적 쉬운데 모델은 크게 무너질 수 있다는 점이 핵심임. (GitHub)

 

ImageNet-R의 R은 rendition임.

즉 사진이 아니라 cartoon, painting, sketch, embroidery, sculpture, toy, video game render 같은 다양한 스타일의 “표현물” 이미지들로 만든 벤치마크임.

공식 설명상 30,000장, 200개 ImageNet 클래스로 구성됨. 이 벤치마크는 low-level texture나 사진 도메인에 과적합된 표현보다, style이 달라져도 category identity를 유지하는 representation이 더 잘 버티는지 보는 데 적합함. (GitHub)

 

ImageNet-C는 A/R과 다르게, 새 이미지를 모은 게 아니라 기존 ImageNet 이미지에 corruption을 인위적으로 입힌 benchmark임.

원래 benchmark는 15개 corruption type을 쓰고, 각 corruption마다 severity 5단계가 있어서 총 75개 corruption setting이 생김.

카테고리는 대체로 noise, blur, weather, digital이고, canonical corruption 예시는 Gaussian noise, shot noise, impulse noise, defocus blur, glass blur, motion blur, zoom blur, snow, frost, fog, brightness, contrast, elastic transform, pixelate, JPEG compression임.

여기서는 보통 mCE(mean Corruption Error) 같은 지표를 많이 보고, 낮을수록 좋음. (Oregon State University Engineering)

 

이제 DINO에서 eval을 어떻게 하느냐를 보면, 가장 기본은 두 가지임.


첫째, k-NN eval:

backbone은 freeze하고, ImageNet train set feature를 bank처럼 모아둔 뒤 validation image feature와 가까운 이웃들로 분류 성능을 측정하는 방식임. 즉 head를 학습하지 않고 feature 자체 품질을 보는 테스트라고 이해하면 됨.

DINO 논문도 self-supervised ViT feature가 k-NN 분류기에서도 매우 강하다고 강조했고, 공식 repo도 eval_knn.py를 바로 제공함. (arXiv)

 

둘째, linear eval(linear probe):

backbone은 역시 freeze하고, 그 위에 선형 분류기 하나만 supervised로 학습해서 성능을 봄.

이건 “현재 feature가 class-separable한가”를 보는 가장 표준적인 프로토콜임.

DINO 논문은 ViT-Base에서 80.1% top-1 linear eval을 보고했고, 공식 repo도 eval_linear.py를 제공함.

또한 공개된 명령어를 보면 ViT-Base에서는 마지막 block feature와 patch-token average pooling 같은 설정(--n_last_blocks 1 --avgpool_patchtokens true)을 쓰는 recipe도 함께 제시됨. (arXiv)

 

원래 DINO(2021) 공식 repo가 바로 제공하는 evaluation 목록은 생각보다 명확함.
ImageNet k-NN, ImageNet linear classification, DAVIS 2017 video object segmentation, revisited Oxford/Paris image retrieval, Copydays copy detection이 README에 공식 절차와 스크립트 이름까지 같이 정리되어 있음.

 

즉 original DINO는 classification만 보는 게 아니라, feature가 retrieval이나 dense/local correspondence에도 쓸 만한지까지 확인하는 구조였음.

또 논문 abstract 자체도 self-supervised ViT feature 안에 semantic segmentation 정보가 드러난다고 강조함. (GitHub)

 

반면 ImageNet-A/C/R를 DINO 계열에서 어떻게 평가하느냐DINOv2 설명이 가장 직접적임.

DINOv2 논문은 먼저 ImageNet-1k에서 frozen backbone 위 linear classifier를 학습하고, 그다음 그 best linear classifier를 그대로 A/R/C/Sketch에 inference하는 방식을 썼다고 명시함.

즉 backbone을 다시 A/R/C에 맞춰 finetune하는 게 아니라, ImageNet-1k에서 배운 linear head + frozen feature 조합이 분포 이동에서도 얼마나 버티는지를 보는 방식임.

 

논문 Table 6에서도 Im-A, Im-R은 높을수록 좋고, Im-C는 낮을수록 좋다고 명시돼 있음.

그래서 실험 해석은 보통 이렇게 하면 됨.
k-NN이 높다 → label supervision 없이도 feature space가 잘 뭉쳐 있음.
linear eval이 높다 → global descriptor가 class-separable함.


ImageNet-A가 높다 → 자연스러운 hard example에도 semantic robustness가 좋음.
ImageNet-R이 높다 → style / rendition shift에 강함.
ImageNet-C에서 mCE가 낮다 → blur, noise, compression 같은 low-level corruption에 강함.

 

mCE?

더보기

1. ImageNet-C의 mCE가 정확히 뭐냐

ImageNet-C는 ImageNet validation 이미지에 15개 corruption을 각각 5단계 severity로 적용해서 robustness를 보는 benchmark임.

corruption 종류는 noise, blur, weather, digital artifact 같은 것들임.

 

여기서 핵심 지표가 mCE(mean Corruption Error)임.

개념은 간단함.
각 corruption 에 대해 네 모델의 error를 기준 모델인 AlexNet의 error로 나눈 값CEc이고, 그걸 15개 corruption에 대해 평균낸 것이 mCE임.

 

그래서

\(CEc=error of your model on corruption cerror of AlexNet on corruption cCE_c = \frac{\text{error of your model on corruption } c}{\text{error of AlexNet on corruption } c} mCE=115∑cCEcmCE = \frac{1}{15}\sum_c CE_c

 

처럼 생각하면 됨. 낮을수록 좋다는 게 중요함.

100이면 AlexNet 수준, 100보다 낮으면 AlexNet보다 robust, 높으면 더 취약하다는 뜻임.

 

왜 accuracy 대신 mCE를 쓰냐면, corruption마다 난이도가 달라서 그냥 accuracy 평균을 내면 비교가 불공평해지기 때문임.

예를 들어 fog와 JPEG compression은 모델에 주는 타격이 다르니, 이를 기준 모델로 정규화해서 비교하는 것임.

결국 mCE는 “이미지가 망가졌을 때 성능이 얼마나 덜 망가지느냐”를 보는 지표라고 이해하면 됨.


그리고 segmentation / depth / retrieval까지 좋으면, 그 표현이 단순 분류용 global vector를 넘어 spatially meaningful한 feature도 갖고 있다는 뜻으로 해석할 수 있음. (arXiv)

더보기

5. segmentation / depth / retrieval이 각각 뭐냐

이 셋은 전부 downstream task 이름임. 핵심은 “좋은 feature면 분류 말고도 다른 구조적 문제를 풀 수 있어야 한다”는 것임.

segmentation

이미지 전체에 label 하나를 붙이는 classification과 달리, 픽셀마다 label을 예측하는 task임. 예를 들어 사람, 차, 도로를 픽셀 단위로 나누는 식임. 이걸 잘하면 feature가 단순 global class cue만 가진 게 아니라, 공간 구조와 객체 경계까지 어느 정도 담고 있다는 뜻임. DINO 계열에서는 이런 성질을 semantic segmentation이나 video object segmentation으로 확인함.

depth

각 픽셀이 카메라에서 얼마나 먼지를 예측하는 task임. 즉 2D 분류가 아니라 3D geometry 감각이 있는 feature인지 보는 것임. depth는 original DINO 핵심 공식 eval 목록에는 직접 강조되지 않지만, DINOv2는 dense prediction 전반과 함께 이런 geometric understanding 계열 task도 확장 평가 범주로 다룸.

retrieval

query 이미지와 비슷한 이미지들을 검색하는 task임. 예를 들어 에펠탑 사진을 넣었을 때 다른 에펠탑 사진을 잘 찾아오면 retrieval이 좋은 것임. 이건 feature가 semantic similarity를 얼마나 잘 보존하는지, viewpoint나 crop이 달라도 같은 instance를 잘 묶는지를 본다. original DINO repo의 Oxford/Paris evaluation이 바로 이런 retrieval benchmark임.

 

 


ImageNet-A/R/C는 “clean ImageNet accuracy 말고, 표현이 얼마나 안 무너지는가”를 보는 robustness 세트이고,

DINO의 core eval은 k-NN + linear probe, 그리고 DINOv2는 그 위에 A/R/C 같은 domain generalization까지 체계적으로 얹은 버전이라고 보면 거의 정확함. (GitHub)

더보기

6. DAVIS 2017 video object segmentation은 뭐냐

DAVIS 2017은 비디오 object segmentation benchmark임. 보통 첫 프레임에서 object mask가 주어지고, 이후 프레임들에서 그 객체를 계속 분할해내야 함. 즉 단순히 “이 프레임에 고양이가 있다”가 아니라, 시간이 지나도 같은 객체를 계속 정확히 따라가며 픽셀 단위로 분할해야 함.

이걸 DINO feature로 평가하는 이유는, 좋은 feature라면
객체를 배경과 잘 구분해야 하고,
시간이 지나도 동일 객체를 일관되게 잡아야 하고,
local correspondence가 어느 정도 살아 있어야 하기 때문임.
즉 DAVIS는 공간 구조 + 시간적 일관성 + 객체 수준 표현력을 같이 보는 task임.

7. revisited Oxford/Paris image retrieval은 뭐냐

이건 landmark image retrieval benchmark임. query로 특정 건물 사진을 넣으면, 데이터베이스에서 같은 장소/건물의 다른 사진들을 찾아야 함. “revisited”는 옛 Oxford/Paris benchmark를 더 엄격하게 다시 정리한 버전이라는 뜻임. DINO repo가 이 benchmark를 eval에 포함한 이유는 feature가 단순 class label이 아니라, instance-level similarity도 잘 보존하는지 확인하려는 것임.

쉽게 말해 classification은 “둘 다 교회면 같은 클래스로 본다”인데, retrieval은 “그 많은 교회 중 이 교회가 바로 이 교회냐”를 더 많이 봄. 그래서 retrieval이 좋다는 건 feature가 더 세밀한 identity 정보도 잡는다는 뜻임.

8. Copydays copy detection은 뭐냐

Copydays는 원본 이미지와 그것의 변형본을 매칭하는 copy detection benchmark임. crop, blur, compression, rotation 같은 변형이 들어가도 “이건 같은 이미지의 변형이다”를 알아내야 함. DINO repo에서 이 benchmark를 넣은 이유는 feature가 low-level 변화에 대해 적절한 invariant를 갖는지 보기 위해서임.

retrieval과 비슷해 보이지만 차이가 있음.
retrieval은 보통 “의미적으로 비슷한 이미지”를 찾는 것이고,
copy detection은 “원본의 변형판인지”를 찾는 것이어서 더 near-duplicate / transformed duplicate 검출에 가까움.

 

더보기

5. DINOv2에서 semantic segmentation은 어떻게 하냐

여기서부터는 original DINO와 다름.

DINOv2 논문은 semantic segmentation 평가를 명시적으로 설명함.
논문/이슈 설명 기준 핵심은:

  • backbone에서 patch tokens를 얻음
  • 각 patch token에 대해 linear layer가 class logits를 예측함
  • 그러면 patch grid 크기의 low-resolution segmentation map이 생김
  • 이걸 원본 해상도로 upsample해서 segmentation map을 만듦

예를 들어 patch size 16이고 입력이 512×512면 patch grid는 32×32가 됨.
그러면 32×32×C logits를 만들고, 이를 512×512로 업샘플하는 구조임.

즉 DINOv2의 semantic segmentation eval은
per-image classification head가 아니라
per-patch dense prediction head를 학습하는 것임.


6. DINOv2 semantic segmentation을 실제로 하려면

가장 쉬운 공식 출발점은 repo의 notebook임.

  • notebooks/semantic_segmentation.ipynb 존재
  • Colab 버전도 공식으로 열려 있음

큰 흐름은 이렇다.

Step 1. backbone 준비

DINOv2 pretrained backbone을 로드함.
이 backbone은 frozen feature extractor로 쓰는 경우가 많음.

Step 2. patch token 추출

입력 이미지에서 CLS token 말고 patch token들을 꺼냄.
semantic segmentation은 spatial prediction이 필요하므로 CLS 하나로는 안 되고 patch token이 필요함.

Step 3. segmentation head 부착

각 patch token에 linear layer 또는 segmentation decoder를 붙여 class logits를 만듦.
논문에서 설명한 가장 단순한 버전은 linear layer임.

Step 4. upsample

patch-grid logits를 bilinear interpolation 등으로 원래 해상도에 맞게 업샘플함.

Step 5. loss 학습

GT segmentation mask와 cross-entropy 같은 dense prediction loss로 학습함.
보통 ADE20K 같은 semantic segmentation dataset에서 train/val split으로 진행함. DINOv2 논문은 semantic segmentation benchmark 평가를 포함함.

Step 6. mIoU 평가

semantic segmentation의 대표 metric인 mIoU로 평가함.
논문은 여러 dense task benchmark를 사용해 semantic segmentation 성능을 보고함.


ReaL / V2는 어떤 지표인가

논문에서 자주 등장하는 ReaLV2는 지표(metric)가 아니라,
ImageNet을 기반으로 만든 추가 평가용 데이터셋이다.

즉, 모델 성능을 더 다양한 관점에서 확인하기 위해 사용하는
확장된 테스트 셋이라고 이해하면 된다.


1. ImageNet-V2

ImageNet-V2는 기존 ImageNet validation 데이터와 동일한 클래스 구성을 유지하면서,
새롭게 수집된 이미지들로 구성된 데이터셋이다.

특징

  • ImageNet-1k와 동일한 1000개 클래스 사용
  • 이미지 내용은 비슷하지만, 데이터 분포가 다름
  • 사람이 다시 수집한 이미지로 구성됨

목적

ImageNet-V2는 다음 질문에 답하기 위해 사용된다.

“이 모델이 기존 데이터가 아닌, 약간 다른 분포의 데이터에서도 잘 작동하는가?”

즉, 일반화 능력 (generalization)을 평가하기 위한 데이터셋이다.

평가 방법

ImageNet-V2에서는 일반적인 ImageNet과 동일하게
Top-1 accuracy로 성능을 측정한다.


2. ImageNet-ReaL

ImageNet-ReaL은 이미지 자체는 기존 ImageNet validation을 그대로 사용하지만,
라벨을 다시 정제한 데이터셋이다.

왜 필요한가

기존 ImageNet에는 다음과 같은 문제가 있다.

  • 하나의 이미지에 여러 객체가 존재하지만
  • 라벨은 하나만 지정됨

예를 들어, 한 이미지에 dog와 cat이 모두 있는 경우에도
정답은 하나만 주어질 수 있다.

이 경우 모델이 다른 객체를 맞추더라도
틀린 것으로 처리되는 문제가 발생한다.


ReaL의 해결 방식

ImageNet-ReaL은 이러한 문제를 해결하기 위해:

  • 하나의 이미지에 대해 여러 개의 정답 라벨을 허용
  • 더 정확한 정답 기준을 제공

평가 방법

ImageNet-ReaL 역시 기본적으로 Top-1 accuracy를 사용하지만,
다음과 같은 차이가 있다.

  • 예측한 클래스가 여러 정답 중 하나에 포함되면 정답으로 인정

즉, 기존보다 더 현실적인 평가가 가능하다.


3. V2와 ReaL의 차이

두 데이터셋의 차이는 다음과 같이 정리할 수 있다.

구분ImageNet-V2ImageNet-ReaL

변화 요소 데이터 (이미지) 라벨
목적 분포 변화 대응 능력 평가 라벨 정확성 기반 평가
이미지 새로 수집됨 기존 ImageNet 사용
라벨 기존 유지 재정의 (multi-label 가능)

4. 정리

  • ReaL과 V2는 새로운 지표가 아니라 평가용 데이터셋
  • 두 데이터셋 모두 Top-1 accuracy로 평가
  • 단,
    • V2는 데이터 분포 변화
    • ReaL은 라벨 품질 개선
      을 반영한다

이 두 데이터셋은 기존 ImageNet보다 더 현실적인 환경에서
모델의 성능을 확인하기 위해 널리 사용된다.

 


Table 7, 8, 9, 10

 

무슨 데이터로, 무슨 목적에, 어떤 방식으로 feature를 평가한 건지


핵심은 이 4개 표가 전부 **“DINOv2 backbone은 frozen”**이고, 그 위에 아주 간단한 readout만 붙여서 다운스트림 성능을 본 실험이라는 점이야. 논문도 Table 7은 “All the features are frozen with a linear probe on top”, Table 8은 “logistic regression on precomputed features”, Table 9는 “non-parametric approach”, Table 10은 “frozen features and a linear classifier / +ms”라고 명시한다. (arXiv)

Table 7: 다른 이미지 분류 + 비디오 분류

이 표의 목적은 **“ImageNet 밖의 분류 태스크로 transfer가 되느냐”**를 보는 것이다.
데이터셋은 이미지 분류 3개와 비디오 분류 3개다.

  • 이미지: iNaturalist 2018, iNaturalist 2021, Places205
  • 비디오: Kinetics-400, UCF-101, Something-Something v2

논문 설명에 따르면, 이미지 쪽 3개는 Sec. 7.1과 같은 data augmentation을 사용해 linear classifier를 학습했고, 비디오 쪽은 비디오에서 일정 간격으로 frame을 뽑아 feature를 만든 뒤,

  • UCF-101, Kinetics-400은 frame feature를 평균해서 linear classifier를 학습하고,
  • SSv2는 temporal 정보를 더 남기기 위해 concatenation을 사용했다.
    평가 지표는 accuracy다. (arXiv)

즉 Table 7은 한 줄로 말하면:

frozen DINOv2 feature를 일반 분류와 비디오 액션 분류에 선형 readout만 붙여서 transfer 성능을 본 표

이다. (arXiv)

GitHub에서 대응되는 파일은 classification 쪽으로 보면 가장 가까운 것이

  • dinov2/run/eval/linear.py
  • dinov2/run/eval/log_regression.py
  • dinov2/run/eval/knn.py

이다. repo README도 classification evaluation entrypoint로 이 파일들을 직접 안내한다.
다만 Table 7의 비디오 평가용 전용 스크립트가 README에 따로 공개되어 있지는 않다. 즉 이미지 분류 transfer는 linear.py/log_regression.py 계열 철학과 맞고, 비디오는 논문 프로토콜 설명은 있으나 repo README에서 바로 “이 파일로 Table 7 비디오 재현”까지는 연결해주지 않는다. (GitHub)

Table 8: fine-grained transfer classification

이 표의 목적은 **“세밀한 범주 구분이 필요한 여러 transfer benchmark에서 frozen feature가 얼마나 좋은가”**를 보는 것이다.
데이터셋은 총 12개이고, 논문 표에는 다음 약칭으로 나온다.

  • Food
  • C10
  • C100
  • SUN
  • Cars
  • Aircr
  • VOC
  • DTD
  • Pets
  • Cal101
  • Flowers
  • CUB

논문은 이것을 Chen et al. (2020)의 transfer classification protocol을 따랐다고 설명하고, precomputed feature 위에 logistic regression을 학습했다고 명시한다. Birdsnap은 공개 문제 때문에 CUB로 교체했다고도 적어둔다. 즉 Table 8은 classification이긴 하지만 Table 7보다 더 전형적인 transfer benchmark 모음에 가깝다. (arXiv)

한 줄 요약은 이거다.

여러 fine-grained / scene / texture benchmark에 대해, frozen backbone feature를 뽑고 logistic regression만 얹어서 비교한 표

이다. (arXiv)

GitHub에서 가장 가까운 대응 파일은 dinov2/run/eval/log_regression.py다. README도 이 파일을 “Logistic regression classification on ImageNet-1k”용으로 직접 안내한다. 즉 Table 8의 철학은 정확히 이 파일 계열과 맞다. 다만 논문에 나온 12개 데이터셋 전체를 위한 공개 launcher/config 묶음이 README에 정리돼 있지는 않다. (GitHub)

Table 9: instance recognition / image retrieval

이 표의 목적은 category classification이 아니라 **“같은 인스턴스를 얼마나 잘 식별하느냐”**를 보는 것이다.
논문은 이것을 instance-level recognition이라고 부르고, 방법도 classification과 다르다. non-parametric retrieval, 즉 query 이미지와 database 이미지의 feature를 뽑은 뒤 cosine similarity로 ranking한다. 학습되는 classifier가 따로 없다. (arXiv)

데이터셋은 4개다.

  • Oxford
  • Paris
  • Met
  • AmsterTime

Oxford/Paris는 landmark recognition benchmark이고, Met은 Metropolitan Museum의 artwork 데이터, AmsterTime은 현대 street view와 오래된 Amsterdam archival image를 매칭하는 데이터라고 논문이 설명한다. 지표는 mAP 중심이다. 표 헤더에도 Oxford/Paris는 M/H, Met은 GAP/GAP-, AmsterTime은 ACC/mAP 식으로 데이터셋별 주 지표가 적혀 있다. (arXiv)

한 줄 요약은:

frozen feature를 embedding으로 써서, query–database similarity ranking으로 instance retrieval 성능을 본 표

이다. (arXiv)

여기에 대해 GitHub에서 classification 파일과는 다른 closest artifact는 명시적인 run/eval/image_retrieval.py가 DINOv2 README에는 보이지 않는다는 점이다. 즉 original DINO repo는 retrieval 전용 eval script가 있었지만, DINOv2 repo README는 classification/depth/segmentation 중심으로 공개돼 있고 Table 9용 retrieval 평가 엔트리포인트를 README에서 직접 안내하지는 않는다. 대신 repo README는 backbone과 notebook, pretrained heads 위주로 정리돼 있다. (GitHub)

Table 10: semantic segmentation

이 표의 목적은 patch-level feature가 dense prediction에 얼마나 좋은지 보는 것이다.
데이터셋은 3개다.

  • ADE20K
  • Cityscapes
  • Pascal VOC

논문은 semantic segmentation 평가를 두 가지 setup으로 나눈다.

1) lin.

  • patch token에서 class logits를 예측하는 linear layer를 학습
  • low-resolution logit map을 만들고
  • 그것을 full resolution으로 upsample해서 segmentation map 생성

2) +ms

  • lin.의 boosted 버전
  • 마지막 4개 레이어 patch tokens를 concatenate
  • 입력 해상도를 640으로 키우고
  • multiscale test-time augmentation 사용

즉 Table 10은 “full finetuning segmentation model”이 아니라, frozen backbone + 단순 linear segmentation probe와 그것을 조금 강화한 multiscale inference recipe를 비교한 것이다. 지표는 mIoU다. (arXiv)

논문은 추가로 frozen backbone + ViT-Adapter + Mask2Former head 실험도 별도로 언급하는데, 이건 Table 10 자체의 lin./+ms setup과는 다른 “SOTA pipeline에 frozen backbone을 꽂는 추가 실험”이다. ADE20K에서 ViT-g/14 backbone으로 60.2 mIoU를 얻었다고 적는다. (arXiv)

한 줄 요약은:

frozen DINOv2 patch feature 위에 segmentation head를 얹어서, 단순 linear probe와 multi-scale 강화 버전을 비교한 dense prediction 표

이다. (arXiv)

GitHub에서 대응되는 파일/리소스는 가장 명확하다.

  • notebooks/semantic_segmentation.ipynb
  • pretrained segmentation heads
  • ViT-g/14용 Mask2Former checkpoint

repo README가 이 notebook을 “segmentation heads를 matching backbone과 함께 쓰는 방법, 그리고 ADE20K용 Mask2Former-based segmentation model을 불러오는 방법”으로 직접 설명하고, pretrained semantic segmentation heads도 backbone별로 공개한다. (GitHub)

표별로 아주 짧게 다시 묶으면

Table 7
Image/video transfer classification.
Frozen feature 위에 linear classifier.
이미지 데이터는 iNat18, iNat21, Places205, 비디오는 K400/UCF101/SSv2.
이미지는 일반 linear eval, 비디오는 frame feature 평균 또는 concat 후 linear 분류. (arXiv)

Table 8
12개 fine-grained transfer classification benchmark.
Frozen feature를 미리 뽑고 logistic regression만 학습.
목적은 세밀한 분류/장면/질감 transfer 성능 확인. (arXiv)

Table 9
Instance retrieval / instance recognition.
Oxford, Paris, Met, AmsterTime.
Classifier 학습 없이 cosine similarity ranking으로 retrieval, 지표는 mAP류. (arXiv)

Table 10
Dense prediction 중 semantic segmentation.
ADE20K, Cityscapes, Pascal VOC.
Frozen patch feature 위에 linear segmentation head (lin.)와 multi-scale 강화 버전 (+ms). 지표는 mIoU. (arXiv)

지금 repo 기준으로 실제로 손댈 수 있는 것

현재 공개 repo 관점에서 바로 실험 흐름을 따라가기 쉬운 것은:

  • Table 7/8의 분류류 → dinov2/run/eval/linear.py, log_regression.py
  • Table 10의 segmentation → notebooks/semantic_segmentation.ipynb, pretrained seg heads
  • depth는 Table 11로 이어지고 → notebooks/depth_estimation.ipynb, pretrained depth heads

반면 Table 9 retrievalTable 7 비디오 분류는 논문 프로토콜 설명은 있지만, README에서 “이 파일로 재현”까지 바로 연결되는 공개 entrypoint가 상대적으로 덜 명확하다. (GitHub)

 

반응형