Convolutional Neural Network for CIFAR-10


CIFAR-10은 RGB 32x32짜리 이미지이다.
이미지 카테고리는 아래와 같다. 10개여서 CIFAR-10인것이다.

airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck.

공식 사이트는 다음과 같다.
CIFAR-10 dataset

큰 이미지로 바로 테스트 하기 어렵기 때문에 일단 작은 이미지로 modeling을하고 테스팅을 해본다.

Higlights of the Tutorial

핵심 기술은 모두 AlexNet paper에 나온 것들이다.

  • convolution
  • rectified linear activations
  • max pooling
  • local response normalization

Model Architecture

기본적으로 Alex Krizhevsky의 모델을 따르며 위에 계층만 약간 튜닝한 형태를 가진다.

몇시간 동안 트레이닝을 했을 때의 최대 정확도는 86%이다.

코드의 구성

  • cifar10_input.py Reads the native CIFAR-10 binary file format.
  • cifar10.py Builds the CIFAR-10 model.
  • cifar10_train.py Trains a CIFAR-10 model on a CPU or GPU.
  • cifar10_multi_gpu_train.py Trains a CIFAR-10 model on multiple GPUs.
  • cifar10_eval.py Evaluates the predictive performance of a CIFAR-10 model.

Model Training

Prediction을 위해서 n-way classification을 수행 한다.
multinomial logistic regression 또는 softmax regression으로 알려져 있다.

  • batch size는 128로 수행
  • learning rate $10^5$

Launching and Training the Model

아래의 명령어로 실행 한다.

python3 cifar10_train.py

맨 처음에는 이미지 데이터가 없기 때문에 다운로드 부터 시작한다. 데이터 셋은 약 160MB이다.

모델링은 약 몇시간 걸린다.

레퍼런스 성능은 아래와 같다.

System        | Step Time (sec/batch)  |     Accuracy
------------------------------------------------------------------
1 Tesla K20m  | 0.35-0.60              | ~86% at 60K steps  (5 hours)
1 Tesla K40m  | 0.25-0.35              | ~86% at 100K steps (4 hours)

default가 1000k steps니 왠만하면 값을 주고 training하는것이 좋다.
GTX 1080 기준으로 1 step당 0.05인것 같다.

2017-03-03 17:26:35.188576: step 353720, loss = 0.16 (2436.1 examples/sec; 0.053 sec/batch)
2017-03-03 17:26:35.725523: step 353730, loss = 0.14 (2291.4 examples/sec; 0.056 sec/batch)
2017-03-03 17:26:36.253775: step 353740, loss = 0.18 (2391.7 examples/sec; 0.054 sec/batch)
2017-03-03 17:26:36.781440: step 353750, loss = 0.15 (2413.0 examples/sec; 0.053 sec/batch)
2017-03-03 17:26:37.313428: step 353760, loss = 0.15 (2395.6 examples/sec; 0.053 sec/batch)

결국 128 batch size로 1 step당 0.05초 정도 소요된다.

Evaluating a Model

Testing을 위해서 10,000장의 의미지를 사용 한다.

python cifar10_eval.py

레퍼런스 기준으로 precision 1 = 0.860이라고 한다.

jemin@jemin-desktop:~/tf_examples/models/tutorials/image/cifar10$ python3 cifar10_eval.py
2017-05-18 14:15:00.822222: I tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 with pro                           perties:
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.797
pciBusID 0000:01:00.0
Total memory: 7.92GiB
Free memory: 7.66GiB
2017-05-18 14:15:00.822247: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0
2017-05-18 14:15:00.822253: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0:   Y
2017-05-18 14:15:00.822258: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow dev                           ice (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
2017-05-18 14:15:02.951141: precision @ 1 = 0.866

참고 문헌

Tensorflow tutorial, convolutional neural networks
CNN
Convolutional Neural Networks


+ Recent posts