Image Classification

본 section에서는 Image Classification에 대해서 다루고자 한다.

 

Image Classification은 "core computer vision task"로 input image에 대해서, 고정된 한 집합의 category에서 하나의 label로 분류하는 것을 말한다. 본 task는 Object Detection이나 Segmentation 같은 세부 task도 포함한다.

Image Classification

Image Classification은 왜 hard-problem, 어려운 문제일까?

Image Classification은 "Semantic Gap"이라는 큰 문제(problem)를 가지고 있다. 위 그림과 같이 computer가 image를 인식하는 방법은 248x400 pixel의 RGB 값이다. 이 pixel value(248x400x3=297,600)와 "cat"이라는 semantic meaning(label) 사이의 gap이 너무나도 크기 때문에 발생하는 문제이다. 

 

또한, real-world image data 자체에서 오는 challenge도 Image Classification을 어렵게 만든다.

  • Viewpoint Variation: 한 객체의 방향이 여러 카메라의 각도로 인해 달라지는 경우
  • Scale Variation: 같은 객체에 대해서도 크기가 다른 경우
  • Deformation: 한 객체가 정형화(고정)된 body를 가지고 있진 않기 때문에 발생하는 변형
  • Occlusion: 한 객체가 다른 객체나 background에 겹쳐져서 (극히) 일부만 보이는 경우
  • Illumination Conditions: 빛(조명)에 따른 변형
  • Background Clutter: (도마뱀 보호색처럼) background와 객체의 색이 비슷하여 구분이 어려운 경우
  • Intra-Class Variation: 한 class의 객체가 다양한 모양, 색을 가지는 경우
  • Fine-Grained Categories: 한 class의 객체 안에, 세분화된 class의 (비슷한) 객체들이 존재하는 경우

 

Image Variation Challenges

 

좋은 Image Classification Model은 이런 여러 challenge의 variation에 대해서 invariant 해야 한다.

 

이런 여러 난관들과 문제가 있음에도 불구하고, 왜 우리는 Image Classification에 도전하고 끊임없이 발전시키려 할까?

이유는 단순하다. Image Classification이 매우 유용하기 때문이다!

Medical image로 암 환자를 분류하거나, Galaxy image로 운하 모양을 분류할 수도 있다. 

수없이 쏟아지는 image라는 data를 자동으로 (어떤 task에서는 인간보다 높은 정확도로) 분류함으로써, Image Classification은 인간의 삶에 직접적인 도움을 줌으로써 지대한 영향을 미치고 있다.

Image Classification을 세분화하면, 다시 여러 task로 나뉜다. 
1. Object Detection
2. Image Captioning
3. Image Segmentation
4. Playing Games (developed to Reinforcement Learning)

 

Image Classification을 위한 방법으로 어떤 magical way가 있을까?

절대 없다! 

 

물론 간단하게 생각해서, image에서 edge를 찾고, 그 edge의 corner 각도 등을 계산하여 "cat"이라는 것을 알아낼 수는 있겠지만, 그렇다면 galaxy는? galaxy image는 모두가 검은색 우주 배경에 비슷하게 둥근 모양을 하고 있다. 여기서도 edge의 corner 각도를 계산하는 것은 어불성설이다. 

즉, task에 맞춰서 hard-coding 하는 것에는 한계가 있다. cat 분류에는 edge corner의 각도를 계산하고, galaxy 분류에는 타원의 모양을 계산하고... 이런 식의 hard-coding(직접 코딩)은 너무나도 한정적일 수밖에 없다. 

 

그래서 "Data-Driven Approach", 인간이 학습하는 것과 유사한 방법이 차용되었다. 

수많은 데이터를 algorithm에게 제공함으로써 스스로 학습하도록 하는 것이다. 인간이 어렸을 때, 눈으로 여러 개의 사과를 인식하여 최종적으로 "사과"를 분류해 내는 것처럼. (다만 computer는 "semantic gap"이 있고, 숫자로 학습을 해야 하기 때문에 인간보다는 훨씬 많은 학습 데이터를 필요로 한다.)

 

Image Data for Training

 

1. image와 label이 한 세트인 dataset을 모은다.

2. Machine Learning을 사용하여 classifier(분류기)를 train(학습)한다.

3. 학습에 사용되지 않은 완전히 새로운 image를 가지고 classifier를 evaluate(평가)한다.

  • 이때, evaluation은 완전히 새로운 image(=test data)의 label(=ground truth)와 비교하여 이루어진다.
def train(images, labels):
	# Machine Learning
    return model

def predict(model, test_images):
	# Use model to predict labels
    return test_labels

Data Set

현재 opensource로 제공되고 있는 image data의 종류를 살펴보자.

 

1. MNIST

 

2. CIFAR10 / CIFAR100

 

3. ImageNet

 

4. MIT Places365

 

Number of Training Pixels are Increasing!

 

5. Omniglot

 


참고자료

'Image > Basic' 카테고리의 다른 글

4. First Classifier: k Nearest Neighbor  (0) 2022.03.16
2. Deep Learning for Computer Vision & it's History  (0) 2022.03.15
1. What is Computer Vision?  (0) 2022.03.13

+ Recent posts