[CS231n]Lecture02-Image classification pipeline

기본적으로 Computer vision에서 가장 핵심이 될 수 있는 작업은 Image Classification이라고 할 수 있을 것이다. Image classification이 가능하면 detection, segmentation, captioning 작업들이 수월하게 작업이 가능해진다.

이미지는 기본적으로 3차원의 배열 형태로 [0, 255] 사이의 수로 이루어져 있다. 3차원은 기본적으로 이미지가 컬러인 경우이며, 각각의 차원은 RGB채널로 불린다.

이미지는 카메라 앵글이라던지 보는 시각에 따라 달리 보이며, 밝기도 다를 수 있으며, 형태의 변형, 그리고 은폐, 은닉 등등 여러 문제들이 존재한다.

그렇다면, 우리는 이런 문제들을 가진 상태에서 classification을 하는데 있어서 숫자를 정렬하는 알고리즘과 같은 명백한 알고리즘이 존재하지 않는다는 것이 문제점으로 떠오를 것이다. 물론 이미지를 보고 이미지의 edge, chunk를 찾아서 library화 하고 이미지가 어떻게 배열되어 있는지와 같은 feature들을 가지고 들어온 이미지를 classification하는 방식으로 진행해왔지만, 이 정도만으로는 역부족이었다.

이제는, 데이터 기반의 접근방식을 사용한다.

- 1) Labeling 되어있는 data를 준비한다.
- 2) Image classifer를 훈련시키기 위해 Machine Learning을 사용한다.
- 3) test image set을 활용해서 classifier를 평가한다.

먼저 지금은 잘 사용되지 않는 Nearest Neighbor Classifier를 설명해 볼 것이다.
방법은 간단하다. 먼저 모든 train data와 각 image data의 label을 읽어 메모리상에 기억하게 해놓는다.
그런 후에 가장 비슷한 train image의 label으로 예측하게끔 하는 방법이다.

위에서 말한 가장 비슷한 image라는 것은 소위 생각해보면 데칼코마니 같이 서로 겹쳐 놓았을때 같게 되면 두 image는 동일한 image라고 생각하기 때문에 각각의 동일한 위치의 픽셀값을 빼 절대값의 합을 취하는 L1 norm을 사용하는 방법과

ConvNet(CNN)은 data가 엄청 많아야 학습 시킬 수 있다라는 생각은 잘못된 생각일 수 있다. 왜냐하면 우리 모델을 처음부터 학습시키는 것이 아닌 학습되어 있는 모델의 가중치를 가져와 쓰는 Fine Tune이 있기 때문이다.