CS231n: L02-Image Classification

Image Classification 은 computer vision에서 핵심 task이다. 컴퓨터가 image를 입력받으면 이 image가 어떤 이미지 인지를 미리 정해놓은 category set의 요소 중에서 하나 고르는 task이다.

어떤 image를 사람이 바라볼 때랑 컴퓨터가 바라볼 때가 완전히 다르다. 이러한 차이를 Semantic gap(의미론적 차이)라고 한다. 즉, category set에서 해당 image에 해당하는 label은 (예를 들어, 고양이) 사람이 그 이미지에 붙힌 의미상의 label이다. 하지만, 그건 사람입장에서의 의미일 뿐이고 컴퓨터는 단순히 그 이미지의 pixel값만 입력받을 뿐 다른 의미는 없다. 이게 문제가 되는 이유는 이미지의 작은 변화만 주어도 의미는 그대로지만 이미지의 pixel값들은 완전히 달라지기 때문이다.

  • Image Classification Challenges
    • Illumination
    • Deformation
    • Occlusion
    • Background Clutter
    • Intraclass variation

이러한 문제를 해결하기 위해서 Data-Driven Approach에 기반한 Model을 만들어야 한다.

  • Data Driven Approach
    1. Collect a dataset of images and labels
    2. Use Machine Learning to train a classfier
    3. Evaluate the classifier on new images

이를 위해 두 개의 함수가 필요하다. 그리고 이게 곧 Machine Learning의 key insight이다.

  • 하나는 Train함수이다. input은 image와 label이고 output은 model이다.
  • 다른 하나는 Predict 함수이다. input은 model이고 output은 image에 대한 prediction이다.

Nearest Neighbor

이 수업은 주로 Deep Learning, 특히 Convolutional Neural Networks에 대해서 다루지만, Data-Driven Approach는 그보다 더 일반적인 개념이다. 그래서 본격적으로 Deep Learning을 살펴보기에 앞서 가장 간단한 Data-Driven Approach에 기반한 Model을 살펴볼 것이다. 그게 바로 Nearest Neighbor이다.

cs231n-ch2_1

  • Train
    • 저장하고 있는 모든 image를 메모리에서 기억한다.
  • Predict
    • 새로운 이미지가 들어오면 새로운 이미지와 기존 train 데이터와 비교해서 가장 유사한 이미지로 label을 예측한다.

cs231n-ch2_2

CIFAR-10이라는 데이터셋을 소개한다. 이 데이터셋은 수업의 Assignment에서도 사용될 예정이다.

cs231n-ch2_3

test 이미지 하나를 모든 train이미지들과 비교할 때는 여러 가지 비교 방법이 있다. 여러 비교 함수 중 어떤 함수를 사용할지에 의해 결정된다. 여러 함수 중 하나로 L1 distance(Manhattan Distance)가 있다. 각 pixel 위치마자 test와 train이미지의 pixel값 차이의 절대값을 구해서 모든 pixel 위치에서의 차이의 절대값을 다 더하면 그게 바로 L1 distance값이다.

하지만, time complexity(시간 복잡도) 측면에서 이 Nearest Neighbor 알고리즘을 따져보면 굉장히 비효율적이다. Train time은 상수시간 $O(1)$이다. 왜냐하면 데이터를 메모리에서 기억하기만 되기 때문이다. 하지만, Test time $O(N)$ 이다. N개의 train 데이터를 전부 test 이미지와 한번씩 비교해야하기 때문이다. 우리가 원하는 classifier는 training에서 느린건 괜찮지만 prediction에서 최대한 빨라야한다. Nearest Neighbor는 반대다.

cs231n-ch2_4

단순한 Nearest Neighbor는 label할 때, 가장 유사한 이미지 1장만을 가지고 하기 때문에 위에 보는 거처럼 공간상의 문제점이 발생한다. 예를 들어, K=1일때 초록색 label 가운데에 노란색 label이 있다거나 파란색 label쪽으로 초록색 label이 침범했다. 이를 해결하기 위해 가장 유사한 이미지 1장(K=1)가 아니라 유사한 이미지 여러개를 뽑아서 그 중에서 가장 많은 label을 찾는 방식의 K-Nearest Neighbors 알고리즘이 등장했다. 다수결의 힘이다.

컴퓨터 Vision을 공부하는 동안 다양한 광점을 유연하게 다루는 능력은 중요하다.

  1. 이미지를 고차원 공간에 존재하는 하나의 점이라고 생각
  2. 이미지의 픽셀들을 하나의 고차원 벡터로 생각하는 관점

이 두 관점을 자유롭게 오갈 수 있어야 한다.

cs231n-ch2_1

L1 Distance말고도 다른 비교함수도 많은데 그중 하나가 L2 Distance(Euclidean distance)이다. L2 Distance는 차이의 제곱합의 제곱근이다. 어떤 거리 척도(distance metric)를 사용할지는 매우 중요하다. 왜냐하면 서로 다른 척도에서는 해당 공간의 근본적인 기하학적 구조 자체가 다르기 때문이다. 이 두 가지 거리척도 간에는 중요한 차이점이 있다.

  • L1 : 어떤 좌표 시스템이냐에 따라 큰 영향을 받는다. 가령 기존의 좌표계를 회전시키면 L1 distance가 변한다.
  • L2 : 좌표계와 아무 상관없다. 좀더 robust하다.

만일 feature vector의 각 element들이 개별적인 의미를 가지고 있다면(e.g. 키, 몸무게) L1 distance가 더 잘 어울릴 수도 있다. 하지만 feature vector가 element간의 실질적인 의미를 잘 모르거나 다 같은 의미를 지니는 경우라면 아마도 L2 distance가 더 잘 어울릴 수 있다.

0032

동일한 데이터에 Distance Metric만 바꿀 경우, Decision Boundary(결정 경계)의 모양 자체가 달라진다.

Hyperparameters

cs231n-ch2_6

K의 개수와 Distance Metric의 종류에 따라서 여러 Model을 만들 수 있다. 이때 K와 Distance Metric을 Hyperparameter라고 한다. 나의 Problem과 Data에 꼭 맞는 모델을 어떻게 찾을까? 가장 간단한 방법은 데이터에 맞게 다양한 hyperparameter 값을 넣어보고 가장 결과가 좋은 값을 고르면 된다.

training set / validation set / test set

cs231n-ch2_7

Hyperparameter를 정하는 방법 위의 3가지 방법 중에서 idea #3을 써야 한다. 왜냐하면 우리가 모델을 고르는 궁극적인 목적은 unseen data, 즉 한번도 보지 못한 데이터에서 높은 성능을 보여야 하기 때문에 데이터를 나눠야한다. 그래서 데이터를 training set, validation set, test set으로 나눠야 한다.

  1. 가장 먼저 다양한 hyperparameter를 가지고 training set에서 학습을 시킨다.
  2. 그 다음 그렇게 나온 여러 모델을 validation set에서 검증을 한다. 그리고 validation set에서 가장 좋았던 hyperparameter를 선택한다.
  3. 그리고 최종적으로 개발/디버깅 등 모든 일을 마친 후에 validation set에서 가장 좋았던 모델을 가지고 test set에서는 오로지 한번만 수행한다. 여기서의 performance가 최종결과이고 이 값을 논문에 적는다.

실무에서는 사실 test set이 unseen data를 대표할 수 있는지도 장담할 수 없다. 왜냐하면 이러한 접근법은 모든 데이터가 동일한 분포를 따른다고 가정했기 때문이다. 물론 실제로 그렇지 않은 경우도 많다. Test set이 unseen data을 잘 표현하지 못하는 경우도 경험할 수 있다. 그치만 이 문제는 데이터를 수집할때, dataset creates나 dataset curators가 고려해야할 문제이다. 일반적으로는 데이터를 수집할 때 일관된 방법론을 갖고 대량의 데이터를 한번에 수집하는 전략을 쓴다면, 한번 다 모은 데이터 중에서 무작위로 test set을 정한다면, 위의 문제를 조금 완화할 수 있다.

cs231n-ch2_8

idea #3를 확장한 방법이 idea #4인 Cross-Validation이다. 이 방법은 작은 데이터 셋일 경우에 많이 사용하고 데이터 셋이 많은 Deep Learning에서는 많이 사용하지는 않는다. 왜냐하면 Deep Learning에서는 학습 자체의 계산량이 많기 때문이다.

Cross-Validation은 먼저 Test data는 미리 정해놓은뒤 따로 빼놓는다. 그 다음 Training set과 Validation set을 여러개의 fold로 섞어서 나눈다. 이때 Fold 숫자도 분석가가 정해주면 된다.

cs231n-ch2_9

위의 그림은 K-NN 알고리즘에 Cross Validation을 적용해본 결과이다. X축은 K이고, Y축은 분류 정확도이다. 여러 validation folds별 성능의 분산(variance)을 고려할 수도 있다. 분산을 같이 계산하면 어떤 hyperparameter가 가장 좋은지 뿐만 아니라, 그 성능의 분산도 알 수 있다.

요즘은 Image 문제에 있어서는 K-NN 알고리즘을 절대 사용하지 않는다.

  • Test time이 굉장히 느리다.
  • 이미지간의 거리를 측정하는 Distance metrics로 L1 distance나 L2 distance가 적절하지 않다.
  • Curse of dimensionality

지금까지 살펴본 K-NN 알고리즘 관련 내용을 요약하자면,

  • Image classification에서는 image와 label의 training set을 가지고 시작한 다음, test set에서의 label을 예측한다.
  • K-NN classifier는 가장 가까이 있는 training examples을 근거로 label을 예측한다.
  • 이때 Distance metric과 K값은 hyperparameters라고 한다.
  • Hyperparameters를 선택할 때난 validation set을 사용하고 test set은 가장 마지막에 한번만 돌린다.

Linear Classification

K-NN 알고리즘말고 이제 Linear Classification 알고리즘을 살펴보자. Linear Classification은 아주 간단한 알고리즘이지만 Neural Networks와 Convolutional Neural Networks(CNN)에 기반이 되는 중요한 알고리즘이다. 흔히 사람들은 Neural Networks(NN)를 레고블럭에 비유한다. 왜냐하면 NN구축할 때 components라는 레고를 쌓는다고 볼 수 있는데, 이때 이 component가 Linear Classifier이다. 다시 말해 NN은 Linear Classifier를 여러개 쌓아서 만든다.

앞서 살펴본 CIFAR-10를 다시 떠올리면, CIFAR-10에는 50,000개의 training images가 있고 하나의 이미지는 32x32x3(32x32pixel & 3 channel color RGB)이다. 그리고 10,000개의 test images가 있고 label은 10 종류 였다. (airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck)

cs231n-ch2_10

Linear Classifier는 parametric model의 가장 단순한 형태다. Parametric model에는 두 개의 component를 가진다. 하나는 input image이다. 위 그림에서 왼쪽 고양이 그림이 input에 해당하고 보통 $X$라고 표기한다. 다른 하나는 parameters(혹은 weights)이고 문헌에 따라 $W$나 $\theta$라고 표기한다. 그리고 input과 prameters라는 두 가지 component를 가지고 $f(X,W)$라는 함수를 만든다. 여기에 추가로 bias term으로 각 label에 독립적으로 $b$를 더하기도 한다.

K-NN와 달리 parametric approach에서는 train data의 정보를 요약하고 그 요약된 정보를 parameters에 모은다.

cs231n-ch2_11

가장 단순한 형태의 input image로써 2x2 image, 그리고 3가지 label이라고 해보자. 그러면 $W$는 input이 4차원이고 label이 3개이므로 3x4 matrix가 된다. 이때, cat score는 input image의 pixel값들(coloum vector)과 weight matrix의 cat label에 해당하는 vector(row of the matrix)를 inner product한 값이다.(bais term도 더했다.) $W$의 row는 각 이미지 label(class)에 대한 temple으로 볼 수 있다. inner product란 templete of class와 pixel of a image간의 유사도(similarity)를 측정하는 것이다. bias는 데이터와는 독립적으로 각 class에 scaling offsets을 더해주는 것이다.

Linear Classifier 해석 1

cs231n-ch2_12

Temple matching 관점에서 Linear Classification을 해석했을 때 weight matrix $W$의 각각의 row를 뽑아서 이를 이미지로 시각화시켜보면 해당 각row에 해당하는 class마다의 temple을 볼 수 있다. 예를 들어, plane의 templete을 살펴보면 전체적으로 파란색임을 알 수 있다. 이를 보고 학습된 classifier는 plane을 분류할 때 input image가 푸르스름한 거에 좀더 가중치를 부여함을 알 수 있다. 이러한 특징들이 이 classifier가 plane을 더 잘 찾도록 도와준다고 해석할 수 있다.

하지만, Linear classifier의 문제 중 하나는 각 class에 대해서 단 하나의 templete만 학습한다는 점이다. 한 class내에 다양한 특징들이 존재할 수 있지만 모든 것을 평균화 시키기 때문에 다양한 모습이 있더라도 각 class를 인식하기 위한 templete은 하나밖에 없다.

Linear Classifier 해석 2

cs231n-ch2_13

Linear Classifier를 해석하는 또 다른 관점으로는 이미지를 고차원 공간의 한 점으로 보는 관점이 있다. 각 이미지를 고차원 공간의 한 점이라고 보면, Linear Classifier는 하나의 class와 나머지 class의 Linear Decision Boundary를 그어주는 역할을 한다.(one vs. the other)

0059

이런 관점으로 해석하면, Linear Classification의 문제점이 드러난다. Linear Classifier가 풀 수 없는 3가지 case가 위의 그림에 나와 있다.

업데이트:

댓글남기기