[Machine Learning] CS231N #2 Image Classification

2023. 10. 12. 22:11Run/Machine Learning

 

Stanford University CS231n, Spring 2017

CS231n: Convolutional Neural Networks for Visual Recognition Spring 2017 http://cs231n.stanford.edu/

www.youtube.com

이 CNN 강의만 세 번째 돌려보는 거라 최대한 간략하고 이해하기 쉽게 쓰려고 한다.

 

 

 

Image classification 이미지를 input으로 받고, 카테고리(라벨) 중 하나를 선택하기

위의 이미지는 800x600x3(RGB)개의 숫자들로 구성됨

컴퓨터는 이 숫자들을 보고 이미지 분류를 어떻게 수행하는가?

 

Data-Driven Approach

  1. Image와 label 데이터셋을 수집함
  2. Classifier을 학습시키기 위해 machine learning 사용
  3. 새로운 image를 사용하여 classifier를 평가

 

Train 단계에서는 machine learning을 통해 image, label을 사용하여 모델을 학습

Predict 단계에서는 model을 통해 test image의 label을 추측

 

 

CIFAR10

 

오른쪽은 test image와, 해당 이미지와 nearest neighbors 사이인 train image들임

Nearest neighbor라고 해서 무조건 같은 label인 것은 아님 (오류 존재)

 

 

 

이미지들은 어떻게 비교할까? (Nearest neighbors는 어떻게 구할까?)

L1 distance, L2 distance, ...

 

Nearest neighbor classifier에서 train 함수에서는 단순히 training data를 저장함 (시간복잡도 O(1))

predict 함수에서는 각 test image에 대해, train image 중 가장 가까운 이미지를 찾고 이를 바탕으로 label을 예측함 (시간복잡도 O(N))

여기까지는 모델을 학습하는 것이 딱히 없으며, predit에서 시간이 오래 걸리기 때문에 성능이 좋지 않음

Convolutional neural network 등에서는 이와 반대임 즉, train이 오래 걸리고 test이 빠름

 

 

 

K-Nearest Neighbors

가장 가까운 데이터만 참고하는 것이 아니라, K만큼의 데이터 중 과반수를 참고하는 것

K 값은 얼마로 하는 게 좋을까? Distance로는 어떤 걸 쓰는 게 좋을까?

Hyperparameter (사용자가 적절히 선택하는 값)

 

 

데이터셋을 나누는 방식들

 

모델이 단순히 train dataset에 대해서만 잘 작동하는 것은 좋지 않음

Train dataset에 없는 test data를 넣었을 때 성능이 좋게 나오는 것이 좋음

이에 dataset을 train(학습), validation(검증), test(테스트)로 나눔

Train 데이터로 학습시키고, validation 데이터로 검증을 하고 적합한 hyperparameter을 선택한 후 test를 수행함

 

 

 

이미지 분야에서 KNN classifier는 test가 오래 걸리고, distance를 구하는 게 적절치 않고, 많은 학습 데이터를 필요로 하기 때문에 사용하지 않음

 

 

Linear Classification

 

50,000개의 train image(32x32x3)와 10,000개의 test image를 사용한다고 하자

 

 

Score function f(x, W) = Wx + b

 

Input으로 이미지 x를 받고, weight Wbias b를 사용하여 각 label에 대한 score을 output으로 냄

KNN과 다른 점은 weight가 사용된다는 점인데, test에서 잘 설정된 weight를 사용하여 새 이미지에 대한 label을 추측하게 됨

 

 

 

위 예시에서 Dog의 score이 가장 높으므로, 해당 이미지를 Dog으로 예측하는 것임 (틀렸지만...)

 

 

 

Weight 값을 이미지화하면 위와 같음 (일종의 템플릿처럼 됨)

 

 

 

Linear classifier는 한 label에 대해 하나의 template만 학습하게 됨

따라서 예를 들어 car 이미지가 약간 변형되어 각도가 틀어져 있으면 car로 잘 분류하지 못함

 

다음 장에서는 좋은 weight를 선택하는 방법에 대해 알아볼 것임 (Loss function, Optimization, CNN)