-
[CS231n] 2강 Image ClassificationStudy/CS231n 2020. 10. 17. 13:12
Image Classification은 무엇이고 어떻게 하는것인가??
- 입력 이미지를 미리 정해진 categories 중 하나인 label로 분류하는 문제다. 문제 정의는 매우 간단하지만 다양한 활용 가능성이 있는 컴퓨터 비전 분야의 핵심적인 문제 중의 하나이다.
Image classification은 이미지가 주어졌을 때 그에 대한 label(각 label에 대한 신뢰도를 표시하는 분류)을 예측하는 일이다. 이미지는 0~255 정수 범위의 값을 가지는 Width * height * 3의 크기의 3차원 array이다. 3은 Red,Green,Blue로 구성된 3개의 채널을 의미한다.
컴퓨터에게 이미지는 그저 숫자의 집합일 뿐이다.
카메라를 조금만 움직여도 모든 픽셀 값이 달라진다. 그렇기에 이에 맞는 알고리즘을 구현하는것이 중요하다.
이미지를 보고 edges와 corners를 찾고 각 categories로 분류한다.-> 확장성이 없다. 새로운 물체를 인식하려면 다시 처음부터 진행해야되는 문제점이 존재한다.따라서 "Data-drvien approach ( 데이터 기반 방법론 ) 이 중요하다.
물체의 Feature를 규정하기 보다는 각각의 Image 그리고 Label이 달린 dataset을 수집한다.
4개의 카테고리에 대한 학습 dataset에 대한 예를 보여주는 사진이다.
CS231n 강의 에서는 이미지 분류 데이터셋의 예로 CIFAR-10 dataset을 사용한다.
이 데이터셋은 60,000개의 32*32 픽셀 크기의 이미지로 구성되어 있다. 각 이미지는 10개의 클래스 중 하나로 Labeling 되어 있다. 50,000개는 Traing data set, 10.000개는 Test data set으로 분류된다.
Nearest Neighbor Classifier(최근접 이웃 분류기)
이 분류기는 컨볼루션 신경망방법과는 아무 상관이 없고 실제 문제를 풀 때 자주 사용되지는 않지만 이미지 분류 문제에 대한 기본적인 접근 방법이다.
강의에서 보여주는 예시 코드 이다. Train Step 에서는 그저 학습 데이터를 기억하기만 한다.
Predict Step 에서 새로운 이미지가 들어오면 기존의 가장 유사한 이미지로 Labeling한다.
이미지가 있을때 비교는 어떻게 하는가??
L1 distance 는 이미지를 각각의 픽셀값으로 비교하고, 그 차이를 모두 더하는 것이다.
distance 선택 벡터간의 거리를 계산하는 방법은 L1거리 외에도 많다.
기하학적으로 두 벡터간의 유클리디안 거리를 계산하는 것으로 해석할 수 있는 L2 distance의 계산 방식이다.
k - Nearest Neighbor (kNN) 분류기
2차원 평면 내의 모든 좌표에서 각 좌표가 어떤 학습 데이터와 가장 가까운지를 계산한다. 하지만 그렇게 좋지 않다. 위 그림을 보면 초록색이 파랑색 영역 안에 있고, 파랑색이 초록색 영역 안에 있다. 이 점은 noise로 볼 수 있다.
k-NN의 아이디어는 간단하다. Traing data set에서 가장 가까운 하나의 Image만을 찾는 것이 아니라, 가장 가까운 K 개의 Image를 찾아서 Test Image Label에 대해 투표하도록 하는 것이다. 여기서 k=1 인 경우, NN 분류기가 된다. 직관적으로 k 값이 커질수록 분류기는 outlier(이상점)에 더 강인하고, 분류 경계가 부드러워지는 효과가 있다.
흰색부분은 임의로 처리하지만 여기서는 가장 가까운 이웃이 존재하지 않으면 단순하게 흰색으로 칠한 것이다.
이미지 픽셀들을 하나의 고차원 벡터로 생각하는 관점은 매우 중요하다.
k-NN을 사용할때 서로 다른 점들을 어떻게 비교 할 것인가??
Distance Metric을 정해야 한다.
L1(Manhattan) Dist / L2(Euclidean) Dist 기하학적인 구조가 다르다.
그림에서 알 수 있듯이 L1는 어떤 좌표 시스템이냐에 따라 많은 영향을 받는다. 좌표계를 움직이거나 돌릴경우 모양과 거리가 달라진다. 하지만 L2는 좌표계와는 아무 연관 없이 같은거리(반지름의 길이)를 가지고 있다.
->특징 벡터의 각각 요소들이 개별적이 의미를 가지고 있다면 ex) 키, 몸무게 : L1
->특징 벡터가 일반적인 벡터이며, 요소들간의 실질적인 의미를 잘 모르는 경우 : L2
이제 기하학적인 의미로 살펴보자
같은 K=1 이지만 Distance 방식이 다르다. 자세히 보면 L2가 조금 더 자연스러운 결정 경계를 만든다는 것을 볼 수 있다.
대부분 NN분류기보다 k-NN 분류기를 사용하고 싶을 것이다. 그러나 어떤 K 값을 골라야 할까?? 이 문제가 바로
Hyperparameter 값과 관련이 있다.
Hyperparameter 튜닝을 위한 검증 셋 (Validation set)
앞서 우리는 여러 가지 거리 함수(L1 norm, L2 norm, 여기서 고려하지 않은 다른 종류들 ex)내적 ) 에 대해서도 살펴보았다. 이러한 선택들을 hyperparameters라 부른다.
가장 좋은 hyperparameter를 정하는 것의 척도는 " 학습 데이터의 정확도와 성능"을 최대화 하는 파라미터를 선택하는 것이다.
hyperparameter 값을 조정하기 위헤 Test set을 사용하면 절대 안된다. 그렇게 하지 않는다면 우리 모델의 hypermarameter 들이 Test set에서는 잘 동작하도록 튜닝이 되어 있지만, 실전에서 모델을 사용(deploy)할 때 상당히 성능이 낮아지는 모습을 보일 것이다. 머신러닝에 이것을 Test set에 overfit 되었다고 말한다.
Evaluate on the test set only a single time, at the very end.
Split your training set into training set and a validation set. Use validation set to tune all hyperparameters. At the end run a single time on the test set and report performance.
또 다른 전략인 "Cross Validation(교차검증)" 이다.
데이터셋이 작을 경우 사용하고, 실제로는 계산량이 많아지기 때문에 하나의 validation set을 정해놓는 것을 선호한다.
Traing data로 여러개를 나누고 번갈아가면서 validation set을 지정해준다. 위 그림에서는 5-fold로 하고 있다.
처음 4개의 fold에서 학습시키고 남은 한 fold에서 알고리즘을 validation 하는 것이다. 어떤 그륩을 validation set 으로 사용할지에 따라 iteration을 돌고, 성능을 평가, 각 그룹에 대한 평가한 성능을 평균낸다.
하지만 k-NN은 너무 느리고 픽셀값을 기준으로 한 거리는 인지적,의미적으로 거의 연관이 없다고 생각 할 수 있다.
이미지는 매우 고차원 물체이므로 고차원 공간에서의 distance는 매우 직관적이지 않는 경우가 있다.
강의에서 제공하는 k-NN의 Summary다.
Linear Classification
Linear Classification 에 관한 아주 직관적인 그림이다. 다양한 종류의 딥러닝 알고리즘들의 가장 기본이 되는 블럭중 하나가 바로 Linear Classifier이다. 이는 전체 NN을 이루게 된다.
입력 Image는 고양이 Image 이다. 이를 보통 X로 표현한다. 가중치 파라미터를 W라고 한다. 여기서 10은 카테고리의 score이다. 고양이 score가 높다는 것은 입력 X가 고양이일 확률이 크다는 것을 의미한다.
test를 할때 Train set을 이용하지 않고 그 요약된 정보가 담긴 W가 중요하게 사용된다. 가장 쉬운 조합은 W,X를 곱하는 것이다. 이 방법이 Linear Classifier 이다.
bias는 편항이라고 부른다. bias를 통해 활성화 함수를 좌우로 움직일 수 있어, 더 좋은 학습을 시킬 수 있다.
이 Linear classifier는 2*2 Image를 입력으로 받고 이미지를 4-dim 열 벡터로 쭉 펼친다.
각각의 Score는 가중치 행렬과 입력 Image의 값들과 내적한 값에 bias term을 더한 것이다.
가중치 행렬 W의 각 행은 이미지에 대한 일종의 템플릿으로 볼 수 있고, 여기서 내적이란 클래스 간 템플릿의 유사도를 측정하는 것이다. bias는 각 클래스에 독립적으로 scailing offsets를 더해준다.
이미지를 고차원 공간의 한점으로 보자.
Linear classifier는 각 클래스를 구분 시켜주는 선형 결정 경계를 그어주는 역할이다. 하지만 Linear classifier로 분류하기 힘든 case가 많다. 데이터의 분포에 따라 선형으로 나타낼 수 없는 경우가 대부분이다.
홀/짝 문제, Tree modes 등 이러한 문제들은 Linear classifier로 풀 수 없다.
우리는 Linear classifier는 단순히 행렬과 벡터 곱의 형태이며, 각 각의 템플릿 매칭과 관련이 있고, 각 카테고리에 대해 하나의 템플릿을 학습한다. 그리고 가중치 행렬 W를 학습시키고 나면 새로운 학습 데이터에도 스코어를 매길 수 있다는 것을 배웠다.
다음 강의에서는 Loss function / optimization / ConvNets와 가중치 행렬인 W를 어떻게 하면 좋게 선택하는 것에 대해 배울 예정이다.
'Study > CS231n' 카테고리의 다른 글
[CS231n] 6강 Training Neural Networks I (0) 2020.11.14 [CS231n] 5강 Convolutional Neural Networks (0) 2020.11.14 [CS231n] 4강 Backpropagation and Neural Networks (0) 2020.10.31 [CS231n] 3강 Loss Functions and Optimization (0) 2020.10.24 [CS231n] 1강 Introduction to Convolutional Neural Networks for Visual Recognition (0) 2020.10.09