본문 바로가기

카테고리 없음

이미지 데이터셋 총 정리: CIFAR-10, CIFAR-100, STL-10, MNIST, FASHION-MNIST, SVHN, ImageNet 설명 및 PyTorch로 학습하는 방법과 성능 분석

※ 다양한 이미지 분류 데이터 세트 ※

 

  딥러닝 분야에는 매우 다양한 이미지 분류 데이터 세트가 존재한다. 대표적으로 CIFAR-10, CIFAR-100, STL-10, MNIST, FASHION-MNIST, SVHN, ImageNet이 있다. 이러한 데이터 세트들은 논문(paper)에서도 자주 등장한다. 이렇게 자주 사용되는 데이터 세트가 있는 이유는 무엇일까? 일반적으로 딥러닝을 공부할 때는 특정한 방법이나 딥러닝 모델이 기존에 제안되었던 방법들보다 얼마나 우수한지 보여주는 경우가 많다. 그래서 다양한 딥러닝 모델을 동일한 데이터 세트에 대하여 학습하고, 서로 성능을 비교하곤 한다.

 

  참고로 PyTorch로 특정한 이미지 데이터 세트(CIFAR-10 등)에 대하여 학습하는 코드가 있으면, 그것을 조금 바꾸어서 다른 데이터 세트에도 적용할 수 있다. 기본적으로 이미지 분류 모델을 학습하는 방법은 대체로 유사하기 때문이다.

 

  실제로 CIFAR-10과 CIFAR-100의 경우 PyTorch Playground 저장소에서의 모델 아키텍처도 사실상 동일하다. 아래의 데이터 세트들은 모두 기본적으로 PyTorch에서 공식적으로 제공하는 데이터 세트들이다. 세 개의 데이터 세트는 모두 torchvision.datasets를 이용해 다운로드할 수 있다. Torchvision은 PyTorch와 함께 설치하여 사용하는 대표적인 이미지 관련 라이브러리 중 하나다.

 

  해상도 클래스 개수 학습 데이터 수 테스트 데이터 수
CIFAR-10 32 X 32 X 3 10개 50,000개 (클래스당 5,000개) 10,000개 (클래스당 1,000개)
CIFAR-100 32 X 32 X 3 100개 50,000개 (클래스당 500개) 10,000개 (클래스당 100개)
STL-10 96 X 96 X 3 10개 5,000개 (클래스당 500개) 8,000개 (클래스당 800개)
MNIST 28 X 28 X 1 10개 60,000개 10,000개
FASHION-MNIST 28 X 28 X 1 10개 60,000개 10,000개
SVHN 32 X 32 X 3 10개 73,257개 26,032개

 

※ MNIST ※

 

  먼저 MNIST는 0부터 9까지의 숫자 이미지를 모아 놓은 데이터 세트다. 하나의 이미지가 들어왔을 때 0부터 9까지 총 10개의 클래스 중에서 어떤 클래스에 속하는지 맞추는 분류 작업을 수행한다. 28 X 28 X 1의 해상도로 크기가 매우 작다. 일반적으로 CNN을 사용하여 GPU로 훈련하면 10분 안에 99%의 정확도를 낼 수 있다.

 

 

  ▶ MNIST 데이터 세트 설명 및 다운로드http://yann.lecun.com/exdb/mnist/

 

MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges

 

yann.lecun.com

 

※ CIFAR-10과 CIFAR-100 ※

 

  CIFAR-10은 32 X 32 X 3의 해상도의 사물 데이터를 모아 놓은 데이터 세트다. CIFAR-10 데이터 세트는 비행기(airplane), 자동차(automobile), 새(bird), 고양이(cat) 등 총 10개의 클래스로 구성된다. 학습 데이터는 50,000개이고, 테스트 데이터는 10,000개다.

 

 

  그리고 CIFAR-100 데이터 세트는 CIFAR-10과 유사한 데이터 세트다. CIFAR-100은 여러 개의 상위 클래스(super class)가 존재하고, 각 상위 클래스에 세부적으로 클래스(class)들이 존재한다. 부모 클래스(superclass)에는 꽃(flower), 물고기(fish), 벌레(insect) 등이 포함되고, 각 부모 클래스에는 세부적으로 다양한 클래스가 존재한다. 예를 들어 꽃(flower)에는 장미(rose), 해바라기(sunflower), 튤립(tulip) 등이 포함되는 방식이다. 또 다른 예시로 부모 클래스 중에서 사람(people)에는 baby, boy, girl, man, woman 다섯 개의 자식 클래스가 존재한다. 그래서 세부적인 클래스가 총 100개 존재한다. 아래 그림을 확인하면, 매우 다양한 카테고리에 대하여 매우 다양한 클래스가 존재한다.

 

 

  CIFAR-10과 CIFAR-100은 함께 많이 사용되는 데이터 세트라는 점에서 그 특성이 매우 비슷하다. 둘 다 32 X 32 X 3의 해상도를 가지고 학습 데이터는 50,000개이고, 테스트 데이터는 10,000개다.

 

  ▶  CIFAR-10 & CIFAR-100 데이터 세트 설명 및 다운로드https://www.cs.toronto.edu/~kriz/cifar.html

 

CIFAR-10 and CIFAR-100 datasets

< Back to Alex Krizhevsky's home page The CIFAR-10 and CIFAR-100 are labeled subsets of the 80 million tiny images dataset. They were collected by Alex Krizhevsky, Vinod Nair, and Geoffrey Hinton. The CIFAR-10 dataset The CIFAR-10 dataset consists of 60000

www.cs.toronto.edu

 

※ STL-10 ※

 

  STL-10의 이미지들은 96 X 96 X 3의 해상도로 CIFAR-10과 CIFAR-100보다는 크다. 대신에 학습 데이터의 수가 적기 때문에, 결과적으로 학습에 소요되는 시간은 CIFAR-10과 유사하게 소요되는 경우가 많다. STL-10은 CIFAR-10에 기반하여 만들어진 데이터 세트로, 클래스(class) 종류도 굉장히 유사하다. STL-10도 비행기(airplane), 자동차(automobile), 새(bird), 고양이(cat) 등 총 10개의 클래스로 구성된다. 차이점은 이미지의 크기와 데이터의 개수다. STL-10의 학습 데이터는 총 5,000개이고, 테스트 데이터는 총 8,000개다. 참고로 레이블이 지정된 이미지의 경우 ImageNet 데이터 세트에서 데이터를 추출했다고 한다.

 

  STL-10의 핵심적인 특징은 이블이 없는 데이터를 다수(10만 개) 포함하고 있다는 점이다. 즉, 정답 레이블(label)이 없고, 이미지(image)만 존재하는 데이터가 많이 있다는 것이다. 그래서 STL-10은 애초에 레이블이 없는 데이터를 학습에 활용하는 Semi-Supervised Learning (SSL) 메서드를 평가하기에 적합한 데이터 세트이기도 하다.

 

 

  STL-10에 대해서도 다음의 경로에서 자세한 내용을 확인할 수 있다.

 

  ▶ STL-10 데이터 세트 설명 및 다운로드https://cs.stanford.edu/~acoates/stl10/

 

STL-10 dataset

STL-10 dataset The STL-10 dataset is an image recognition dataset for developing unsupervised feature learning, deep learning, self-taught learning algorithms. It is inspired by the CIFAR-10 dataset but with some modifications. In particular, each class ha

cs.stanford.edu

 

※ SVHN ※

 

  SVHN (Street View House Numbers)는 집의 번호판을 촬영한 32 X 32 X 3 해상도의 이미지를 모아 놓은 데이터 세트다. 0부터 9까지의 숫자를 예측한다는 점에서 분류 작업은 MNIST와 굉장히 유사하다. SVHN은 두 가지 형식이 있지만, 아래의 형식(format)이 가장 일반적이다. 다만 이미지 내에 여러 개의 숫자가 겹쳐서 보일 수 있는데, 중간에 있는 숫자를 예측하는 것이 목표다. 이때 학습 데이터는 73,257개, 테스트 26,032개로 구성된다. 추가적으로 훈련 데이터로 사용할 수 있는 다소 덜 어려운 추가 데이터 531,131개가 제공된다.

 

 

  ▶ SVHN  데이터 세트 설명 및 다운로드http://ufldl.stanford.edu/housenumbers/

 

The Street View House Numbers (SVHN) Dataset

SVHN is a real-world image dataset for developing machine learning and object recognition algorithms with minimal requirement on data preprocessing and formatting. It can be seen as similar in flavor to MNIST (e.g., the images are of small cropped digits),

ufldl.stanford.edu

 

※ Fashion-MNIST ※

 

  Fashion-MNIST는 MNIST와 매우 유사한 형태의 데이터 세트로, 각 이미지는 28 X 28 X 1의 해상도를 가지는 회색(grayscale) 이미지로 구성되어 있다. 이 데이터 세트에는 셔츠(shirt), 코트(coat), 가방(bag) 등 총 10개의 클래스(class)가 존재한다. 데이터 세트는 MNIST와 동일하게 60,000개의 학습 데이터와 10,000개의 테스트 데이터로 구성된다.

 

 

  ▶ SVHN  데이터 세트 설명 및 다운로드https://github.com/zalandoresearch/fashion-mnist

 

GitHub - zalandoresearch/fashion-mnist: A MNIST-like fashion product database. Benchmark

A MNIST-like fashion product database. Benchmark :point_down: - GitHub - zalandoresearch/fashion-mnist: A MNIST-like fashion product database. Benchmark

github.com

 

※ 딥러닝 모델 학습 방법 ※

 

  위에서 언급한 데이터 세트들에 대해서 학습을 진행하기 위해서는 기존에 다른 사람들이 작성해 놓았던 PyTorch 소스 코드를 확인해 볼 필요가 있다. 필자가 참고한 코드 저장소(repository)들은 다음과 같다.

 

1. PyTorch Playground

 

  ▶ 링크https://github.com/aaron-xichen/pytorch-playground

 

GitHub - aaron-xichen/pytorch-playground: Base pretrained models and datasets in pytorch (MNIST, SVHN, CIFAR10, CIFAR100, STL10,

Base pretrained models and datasets in pytorch (MNIST, SVHN, CIFAR10, CIFAR100, STL10, AlexNet, VGG16, VGG19, ResNet, Inception, SqueezeNet) - GitHub - aaron-xichen/pytorch-playground: Base pretrai...

github.com

 

2. PyTorch Classification

 

  ▶ 링크https://github.com/seongkyun/pytorch-classifications

 

GitHub - seongkyun/pytorch-classifications: Pytorch classification with Cifar-10, Cifar-100, and STL-10

Pytorch classification with Cifar-10, Cifar-100, and STL-10 - GitHub - seongkyun/pytorch-classifications: Pytorch classification with Cifar-10, Cifar-100, and STL-10

github.com

 

3. PyTorch Wide Residual Networks

 

  ▶ 링크https://github.com/meliketoy/wide-resnet.pytorch

 

GitHub - meliketoy/wide-resnet.pytorch: Best CIFAR-10, CIFAR-100 results with wide-residual networks using PyTorch

Best CIFAR-10, CIFAR-100 results with wide-residual networks using PyTorch - GitHub - meliketoy/wide-resnet.pytorch: Best CIFAR-10, CIFAR-100 results with wide-residual networks using PyTorch

github.com

 

※ 기본적인 분류 성능과 참고 사항 ※

 

  CIFAR-10, CIFAR-100, STL-10 데이터 세트는 다양한 논문에서 제안한 메서드의 성능을 검증하기 위한 목적으로 많이 활용된다. 아직까지도 많은 논문에서 베이스라인(baseline)이 되고 있는 ResNet 아키텍처를 기준으로 대략적인 분류 정확도는 각각 다음과 같다.

 

  1) CIFAR-10: 약 95% top-1 accuracy
  2) CIFAR-100: 약 80%의 top-1 accuracy
  3) STL-10: 약 85%의 top-1 accuracy

  4) MNIST: 약 99%의 top-1 accuracy

  5) Fashion-MNIST: 약 95%의 top-1 accuracy

  6) SVHN: 약 96%의 top-1 accuracy

 

  정확도(Accuracy)
CIFAR-10 약 95%
CIFAR-100 약 80%
STL-10 약 85%
MNIST 약 99%
FASHION-MNIST 약 95%
SVHN 약 96%

 

  참고로 위 내용은 ResNet 기반의 아키텍처를 활용하여 일반적인 학습(standard data augmentation 적용)을 이용했을 때에 대한 결과에 해당하고, 다양한 논문에서 제안한 매우 많은 학습 메서드들이 있다는 점을 기억하자. 또한 전이 학습(transfer learning)을 이용하면 위 성능들은 더욱 개선될 수 있다.

  STL-10의 경우에는 이미지의 해상도가 96 X 96이기 때문에 CIFAR-10과 CIFAR-100에 비하여 가로/세로가 3배씩 크다. 그렇기 때문에 zero-padding을 12 pixels 만큼 주는 경우가 많다. 더불어 CIFAR-10과 CIFAR-100에서는 기본적으로 200번의 epoch으로 학습하는 경우가 많지만, STL에서는 epoch 수를 더 늘리는 경우도 많다. 그리고 STL-10은 레이블이 없는 데이터를 다수(10만 개) 포함하고 있기 때문에, 애초에 Semi-Supervised Learning (SSL) 메서드를 평가하기에 적합한 데이터 세트이기도 하다.

 

  위 세 가지 데이터 세트(CIFAR-10, CIFAR-100, STL-10)에 대한 실험 결과를 모두 포함하고 있는 논문으로는 CutOut 논문이 있다.

 

  ▶ CutOut 논문 링크https://arxiv.org/abs/1708.04552

 

Improved Regularization of Convolutional Neural Networks with Cutout

Convolutional neural networks are capable of learning powerful representational spaces, which are necessary for tackling complex learning tasks. However, due to the model capacity required to capture such representations, they are often susceptible to over

arxiv.org