- 강의 영상
- Image Classfication
Image classfication은 Computer Vision 분야의 가장 기초적인 Core task 중 하나이다. 입력(input)으로 image가 주어지면, 위의 Slide6과 같이 카테고리 집합에서 하나의 값을 출력으로 출력한다. Image는 컴퓨터 입장에서 실제로 어떤 숫자 값들의 matrix로 표현이 되며, Slide7은 이를 잘 나타내고있다. 따라서 실제로 이미지를 분류하는 task는 이미지가 아닌 이러한 숫자 값들을 이용해서 classfication 문제를 해결해야 하므로, 매우 어려운 problem 이라고 할 수 있다. 위의 그림은 고양이라는 입력이미지에 대한 예시를 나타내고있다.
-Challenges
Image classfication이 매우 어려운 problem인 이유는 여러가지 Challenges 때문인데, 이러한 Challenges의 대표적인 6가지 사례를 소개한다.
첫번째, Viewpoint variation은 카메라의 각도, 위치 등 Camera moving으로 인해 똑같은 이미지 객체의 입력 데이터임에도 불구하고, 전체 픽셀 값이 변하는 어려움이 있다.
두번째로 Illumination은 조명에 대한 변형의 예시를 설명한다. 같은 Cat 카테고리를 갖는 객체라도 조명에 따라서 이미지들이 다르게 변형된다.
세번째 Deformation은 객체 자체에 대한 변형으로, 같은 객체라도 다향한 formation으로 생기는 변형이다.
네번째 Occlusion은 객체가 아닌 물체, 배경 등으로 인해 객체가 가려지는 문제이다. 맨 오른쪽의 경우는 극단적인 Occlusion이다.
다섯번째 Background Clutter Challenges는 객체가 배경과 비슷한 경우이다. 배경과 객체가 비슷하게 되면 객체를 classfication하는데 교란이 될 수 있는 어려움이 있다.
마지막으로 소개한 Challenge는 Intraclass variation으로 하나의 class 안에 다양성이 존재하는 예시를 들 수 있다. 위의 그림에서도 Cat 카테고리를 갖는 객체들이 다양한 모습으로 동시에 이미지에 표현되어있는 것을 알 수 있다.
-Image classifier
앞선 여러가지 Challenges issue들을 해결하기 위해서는 해당 객체를 올바르게 classfy 할 수 있도록 하는 알고리즘이 필요하다. 이러한 문제를 해결할 수 있는 알고리즘을 제시하기 위해서 여러가지 접근 방법을 강의에서는 제시한다.
image classfication을 하는 알고리즘은 image를 입력으로 받고 해당 객체에 대한 label을 출력하는 알고리즘을 생각할 수 있지만, 객체를 인식하는 알고리즘의 경우에는 명시적인 알고리즘이 존재하지 않는다고 한다. 그래서 해당 강의에서는 아주 단순한 idea부터 순차적으로 접근을 해본다.
-Data-Driven Approach
강의에서 소개된 다양한 객체에 대해 유연하게 적용할 수 있고, 확장성이 용이하도록 하는 접근방식 중 하나는 Data-Driven Approach(데이터 중심적 접근)이다. 순서는 위와 같이 image들과 해당 image에 해당하는 label들을 dataset에서 수집하고, 분류기 학습을 위하여 Machine Learning을 한다. 그리고나서 해당 분류기를 통해 새로운 이미지를 테스트 하는 순서를 제시하였다.
강의에서는 아주 단순한 Nearest Neighbor라는 classfier를 소개한다. 해당 알고리즘은 Train 단계에서는 모든 학습 데이터를 기억하고, Predict 단계에서는 새로운 입력된 이미지를 기존의 학습 데이터와 비교하여 가장 유사한 이미지의 레이블링을 예측하는 단순한 방식입니다. NN은 Data driven approach를 위해서 train과 predict라는 두개의 함수를 사용한것이 특징이다.
CIFAR10 데이터셋을 이용한 NN의 예제는 위와 같다. 10개의 class를 가진 50000개의 훈련 데이터를 해당 알고리즘을 통해 학습시키면, test 단계에 해당하는 오른쪽 그림의 결과가 나타나는 것을 알 수 있다. test단계에서 가장 왼쪽 열에 위치한 이미지들은 test 이미지이다. test 함수를 통해 훈련 집합에서 가장 가까운 샘플을 찾는 단계를 수행한다. 화살표 오른쪽에 위치한 이미지들은 학습 이미지이며, 왼쪽으로 갈수록 입력된 테스트 이미지와 가장 유사한 이미지를 나타낸다.
앞선 NN 예제에서 가장 유사한 이미지를 찾기위해서는 이미지를 비교하는 척도가 필요할 것이다. 강의에서 제시한 척도 중 하나는 L1 distance이다. L1 distance(Manhattan distance)는 test 이미지의 픽셀값들을 입력으로 받아 training 이미지의 픽셀 값들과 비교를 해서 가장 거리가 가까운 이미지를 선택한다. 계산 과정은 위와 같이 해당 위치의 픽셀값들의 차를 구하고 모든 픽셀을 더해주는 방법으로 계산한다.
- K-Nearest Neighbors
앞에서 언급한 Nearest Neighbor와 앞으로 살펴볼 K-Nearest Neighbor를 시각화한 decision region 그림을 아래와 같이 보여준다. 그림에서 각 점은 train data를 나타내고, 색깔은 label(카테고리)을 나타낸다.
K = 1 인 경우는 앞서 살펴봤던 NN과 동일하다. NN의 경우 그림에서 알 수 있듯이 경계면이 매끄럽지 않으며 class를 잘못 분류하는 경우가 생기는 것을 알 수 있다. 이는 데이터의 noise(잡음)와 spurious(가짜) 문제 때문에 발생을 하는데, NN알고리즘이 가장 '가장 가까운 이웃' 만을 보기 때문에 발생을 한다. 이러한 문제를 해결하기 위해서 NN을 좀 더 일반화시킨 K-NN 알고리즘을 사용한다.
K-NN은 앞에서 설명한 거리척도인 Distance metric을 이용해서 가장 가까운 이웃 점 K개를 찾고, K개의 점이 투표를 하여 다수결로 해당 영역의 label을 결정하는 방법이다. K가 커질수록 NN에서의 문제로 나타났던 noise와 spurious 문제가 완화 되는 것을 시각적으로 볼 수 있었다.
앞선 Nearest Neighbor에서 train과 test 이미지간의 거리를 척도로 L1 distance를 사용했었다. 여기서 추가로 L2(Euclidean) distance를 제시한다. L1, L2 distance를 L1, L2 Norm이라고도 하며 거리를 계산하는 방법은 위의 식을 따른다.
(p는 모든 dimension을 의미한다.)
두가지 척도는 해당 공간의 근본적인 기하학적 구조가 다르기 때문에, 두 척도의 차이는 좌표계의 영향의 유무에 차이를 가진다. 예를들어 특정 벡터의 element값이 의미를 가지고 있으면(e.g. 키, 몸무게) L1이 더 적합하고 아니면 L2가 더 적합할 수 있다. 이는 L1의 좌표계를 회전시키면 distance가 변하는 반면, L2는 좌표계와 관련이 없기 때문이다.
K-NN에서 이러한 다양한 거리 척도를 적용함에 따라서 다양한 종류의 데이터를 다룰 수 있다는 점이 중요하다.
- Hyperparameter
내가 해결하고자 하는 문제와 데이터에 맞는 모델을 찾는 것은 중요하다. 이러한 모델을 모델링 하는 과정에서 사용자가 직접 setting해주는 값을 하이퍼파라미터(Hyperparameter)라고 한다.
K-NN 알고리즘에서 어떤 K값을 선택할 것인지, 어떤 distance를 선택할 것인지 모두 하이퍼파라미터를 선택하는 예시이다. 사용자는 가장 성능이 좋은 하이퍼파라미터를 결정하여 설정한다.
여기서 하이퍼파라미터는 사용자가 직접 결정하는 값, 일반 파라미터는 모델 내부에서 데이터에 의해 결정되는 값으로 구분되어 진다.
강의에서는 가장 성능이 좋은 하이퍼 파라미터를 결정하기 위한 여러가지 방법들을 제시한다. Idea #1은 단순하게 학습데이터의 정확도와 성능을 최대로하는 하이퍼파라미터를 선택한다. 하지만 우리는 학습데이터가 아닌 새로운 데이터에 대한 성능을 최대로 하는것이 목적이다.
(K=1은 트레이닝셋과 테스트셋이 동일하여, 학습데이터에 대해 정확도가 가장 좋지만, 앞선 그림에서 알수 있듯이 더 높은 K 값이 새로운 데이터 값에 대하여 더 좋은 성능을 보인다.)
Idea #2는 전체 데이터셋 중 학습데이터의 일부를 쪼개서 테스트 데이터로 사용한다. 다양한 하이퍼파라미터로 트레이닝 데이터를 학습 시키고 테스트 데이터에 적용시켜본 다음, 하이퍼파라미터를 선택하는 방법이다. 이렇게 되면, 테스트 셋에서만 잘 동작하는 하이퍼파라미터를 선택할 수 있는 위험이 있다. (목표는 한번도 보지못한 데이터에 대한 성능을 높이는 것이다.)
Idea #3은 test data의 의존성이 생길수 있는 문제를 해결하기 위해서 데이터셋을 train, validation, test 셋으로 나누는 방법이다. 다양한 하이퍼파라미터로 트레이닝 셋을 학습시키고, validation set을 통해 검증한다. validation set에서 가장 성능이 좋았던 하이퍼파라미터를 선택하고, 최종적으로 validation set에서 가장 좋았던 분류기를 가지고 test set에서는 오직 한번만 수행을 진행한다. (이 마지막 값이 논문이나 보고서에 삽입된다.)
또다른 Idea는 Cross-Validation(교차 검증)이다. 교차 검증은 테스트 데이터를 미리 정하고, 나머지 데이터를 fold 단위로 나누어준다. 예를들어 위와같이 5개의 fold로 나누어졌다면, 1개는 검증 데이터셋, 나머지 4개는 트레이닝 데이터셋으로 설정을 한다.
이렇게 k개의 fold로 나누었다면 k개의 validation set을 통한 k개의 성능 결과가 나올것이다. 이 k개의 평균을 해당 학습 모델의 성능이라고 한다.
해당 방법은 data set이 매우 크면 training과 prediction이 오래 걸리기 때문에 비효율 적이다. 따라서 이러한 방식은 딥러닝 같은 큰 모델을 학습시킬 때는 학습 자체가 계산량이 많기 때문에 실제로는 잘 쓰지 않는다.
K-NN은 다음의 문제들 때문에 classification에 사용하지 않는다.
1. K-NN은 속도가 매우 느리다.
2. L1/L2 distance는 이미지들간의 유사도를 잘 포착하지 못한다.
3. 차원의 저주
필자는 강의에 나왔던 질문처럼 4개의 여자 사진이 같은 L2 distance를 가지면 좋은것이 아닌가 라고 생각을 했다. 하지만 해당 이미지는 임의의 조정을 통해서 distance가 제멋대로 변한다라는 내용이 핵심이라고 한다.
K-NN은 차원의 저주 문제로 classification에 사용하지 않는다. 데이터는 결정직선, 결정평면에 의해서 classify되는데, 이러한 결정직선, 평면의 정확도를 올리기 위해서는 충분한 데이터가 필요하다. 하지만 그림에서 보는것처럼 차원이 커질수록 필요한 데이터는 기하급수적으로 증가하게 된다. K-NN을 통해 이미지를 분류하기 위해서는 무수히 많은 데이터가 필요하기 때문에 현실적으로 불가능하다고할 수 있다.
-Linear classification
Linear classifier는 parametic 모델의 가장 단순한 형태이다. 해당 모델은 앞선 Nearest Neighbor처럼 test할 때 train set을 사용하지 않고, 요약된 정보는 W(weight)를 사용하여 test한다는 특징이 있다. 위의 식은 가장 단순한 예시로 W를 input 이미지 x와 곱하는 것인데 이를 Linear classification이라 한다.
해당 예시를 input이 4개 픽셀이고 3개의 class를 분류한다고 가정하고 살펴보자.
수식을 matrix로 표현하였다. W는 3x4, X는 4x1의 크기를 가진다. 이 때 W의 각 행은 각 카테고리별 이미지에 대한 템플릿을 의미한다. 이때 수식의 b에 해당하는 bias는 data와 독립적으로 각 카테고리에 연결되어 class에 우선권을 주는 역할을 한다. 이러한 bias는 overfiting을 방지하고 데이터의 특성에 의해서 결과 벡터 값이 치우치는 현상을 막는다.
W의 각 행을 이미지화 하면 아래와 같은 template 이미지들을 통해 모델에서 어떤 과정을 거치는지 확인할 수 있다. 하지만 하나의 class안에는 다양한 특징들이 있고, 이러한 특징들을 평균화하여 하나의 template로 해결을 해야되는데에는 한계가 존재한다.
이미지를 고차원의 한점으로 취급을 한다고 가정하면, 다음과 같이 decision line을 통해 이미지의 class를 분류할 수 있을 것이다. 해당 이미지는 32x32x3의 크기를 가지므로 3072차원의 한점으로 표현이 될것이다. 따라서 3071 차원의 hyperplane으로 classify를 할 수 있다. (복잡한 이미지를 판별하기 위해 선형식은 한계)
위에서 제시한 Linear classfier로 해결하지 못하는 문제들이 있다. 바로 위와 같은 case들인데, 가장 왼쪽은 0보다 큰 픽셀의 수가 홀짝수인 경우, 가운데는 L2 norm의 크기가 1 이상 2 이하인 경우, 가장 오른쪽은 multimodal problem의 경우이다. 따라서 linear classfication은 여러가지 case에 대해서 문제를 해결하는데 한계가 있다는 것을 보여준다.
출처 : Stanford University School of Engineering, http://cs231n.stanford.edu/
'AI > cs231n' 카테고리의 다른 글
[강의정리] Lecture 7: Training Neural Networks, Part 2 (0) | 2022.03.28 |
---|---|
[강의정리] Lecture 6: Training Neural Networks, Part 1 (0) | 2021.12.24 |
[강의정리] Lecture 5: Convolutional Neural Networks (0) | 2021.09.24 |
[강의정리] Lecture 3: Loss Functions and Optimization (0) | 2021.09.16 |
[강의정리] Lecture 4: Backpropagation and Neural Networks (2) | 2021.09.13 |