[CS231n] 강의2. Image Classification 리뷰
본 글은 2021년 4월에 강의한 스탠포드 대학의 “Convolutional Neural Networks for Visual Recognition” 2021년 강의를 듣고 정리한 내용입니다.
개인 공부 목적으로 작성되었으며, 설명이 맞지 않거나 글 오타가 있으면 알려주시길 바랍니다.
원본 링크 : cs231n.stanford.edu
한글 번역 링크 : aikorea.org - cs231n
강의 링크 : youtube - 2017 Spring (English)
Image Classification
- 이미지 분류 문제 : 입력 이미지를 미리 정해진 카테고리 중 하나인 라벨로 분류하는 문제
- 이미지는 0~255 정수 범위의 값을 가지는 Width(너비) x Height(높이) x Channel(채널)의 크기의 3차원 배열이다.
-
3은 Red, Green, Blue로 구성된 3개의 채널을 의미
-
- 하지만, 이미지는 3차원 배열의 값으로 나타내기 때문에 몇 가지 해결해야 할 문제점들이 있다.
Challenges
- 시점 변화(Viewpoint variation)
- 고양이를 촬영하는 카메라를 조금만 옆으로 옮겨도 모든 픽셀값들은 달라진다.
- 배경 분규(Background Clutter)
- 고양이가 배경과 비슷할 때
- 조명 상태(Illumination)
- 어두울 때, 그림자가 있을 때
- 폐색(Occlusion)
- 고양이의 일부만 보여지거나 가려질 수 있다.
- 변형(Deformation)
- 고양이의 자세는 다양하게 바뀔 수 있다.
- 내부클래스의 다양성(Intraclass variation)
- 고양이에 따라 다양한 생김새, 크기, 색 등이 전부 다를 수 있다.
- 시도해볼 수 있는 방법으로,
- 그레이디언트(gradient)에 의한 특정 패턴을 정의하는 것이 있다.
- 이 시도는 변형(deformation) 부분에서 큰 이점을 가진다.
- 하지만, 위치(location)정보의 부족이 단점이다.
결론 : A good image classification model must be invariant to the cross product of all these variations, while simultaneously retaining sensitivity to the inter-class variations.
Data-Driven Approach
- 데이터 기반 방법론(Data-Driven Approach) : 컴퓨터에게 각 클래스에 대해 많은 예제를 주고 나서 이 예제들을 보고 시각적으로 학습할 수 있는 학습 알고리즘을 개발하는 과정
- 이미지와 라벨의 데이터셋을 수집한다.
- 분류기를 학습할 머신 러닝 알고리즘을 사용한다.
- 분류기를 새로운 이미지에 평가해본다.
Nearest Neighbor Classifier
- 첫번째 머신러닝 알고리즘으로 NN 분류기가 있다.
- 우리는 예측은 빨리하는 분류기를 원한다; 하지만 학습은 느려도 괜찮다.
- 최근접 이웃법(Nearest Neighbor; NN): 새로운 데이터를 입력 받았을 때 가장 가까이 있는 것이 무엇이냐를 중심으로 새로운 데이터의 종류를 정해주는 알고리즘 1
- 최근접 이웃 분류기는 테스트 이미지를 위해 모든 학습 이미지와 비교를 하고 라벨 값을 예상한다.
- 한 가지 방법으로 두 개의 이미지가 있고, 그것들을 $I_1, I_2$ 벡터로 나타냈을 때, 벡터 간의 L1 distance(Manhattan)를 계산하는 것이 있다.
- $d_1(I_1,I_2)=\sum_p\Vert I_1^p-I_2^p\Vert$
-
결과는 모든 픽셀값 차이의 합이다.
- 다음으로는 두 벡터 간의 L2 distance(Euclidean)를 고려할 수도 있다.
- $d_2(I_1,I_2)=\sqrt{\sum_p(I_1^p-I_2^p)^2}$
k - Nearest Neighbor (kNN)
- 색칠된 부분들은 L2 거리를 사용한 분류기를 통해 정해진 결정 경계(decision boundaries)이다.
- 여기서 하이퍼파라미터를 잘 조정해줘야 한다. (2가지 고려)
- 어떤 k개 값을 사용해야 좋을까?
- 어떤 distance를 사용하는 게 가장 좋을까?
하이퍼파라미터(hyperparameter) : 모델링할 때 사용자가 직접 세팅해주는 값
- 학습 데이터셋을 트레이닝 셋과 검증 셋으로 나누고, 검증 셋을 활용하여 모든 hyperparameter 들을 튜닝하라. 마지막으로 테스트 셋에 대해서는 딱 한 번 돌려보고, 성능을 리포트한다.
Cross-Validaion
- 학습 데이터셋의 크기가 작을(small) 경우, 교차 검증(cross-validation)이라는 하이퍼파라미터 튜닝 방법 사용
- 데이터를 폴드하여 분할.
- 각 폴드 부분을 검증하여 결과를 평균한다.
- 파라미터 k에 대한 5-fold 교차 검증 예시이다.
- 각 k마다 검증 셋으로 활용한 그룹들에서 5개의 정확도가 나온다.
- 각각의 점은 단일 결과를 나타낸다.
- 여기서 봤을 때 k가 7일 때 가장 좋은 것 같다.
Pros and Cons
-
NN 분류기의 장단점이 존재한다.
- Pros
- 구현하는 것이 매우 단순하고 쉽다.
- 분류기를 학습할 때 단순히 학습 데이터셋을 저장하고 기억만 해놓으면 되기 때문에 학습 시간이 전혀 소요되지 않는다.
- Cons
- 테스트할 때 모든 학습 데이터 예시들과 비교해야되기 때문에 계산량(Compute)이 매우 많아진다.
- 특이점(outlier)에 영향을 많이 받는다.
- 하지만, 픽셀 거리를 따질 때 kNN은 절대 사용하지 않는다.
- 픽셀의 distance metrics은 정보(information)를 제공하지 않는다.
-
테스트 시 학습이 매우 느리다.
-
차원의 저주(curse of dimensionality)도 있다.
-
kNN의 단점이 존재한다.
-
Cons
- 모든 학습 데이터를 기억해야 하고, 나중에 테스트 데이터와 비교하기 위해 저장해두어야 한다.
- 테스트 이미지를 분류할 때 모든 학습 이미지와 다 비교해야되기 때문에 계산량/시간이 많이 소요된다.
Linear Classifier
- 이미지의 픽셀 값들을 각 클래스에 대한 신뢰도 점수(confidence score)로 매핑시켜주는 스코어 함수를 정의한다.
- $x_i\in R^D$ : 학습 이미지 데이터셋
- $D$ : dimension
- $y_i$ : 각 해당 라벨
- $K$ : class
- $x_i\in R^D$ : 학습 이미지 데이터셋
- 이미지의 픽셀값들을 클래스 스코어로 매핑해주는 스코어 함수
- $f:R^D\to R^K$
- 선형 분류기(Linear Classifier)
- 이미지의 배열은 32x32x3이다. 이걸 평평하게 만든 값이 3072이고 따라서 x는 3072x1가 된다.
- W는 가중치이다. b는 편향(bias)이다.
- 따라서 계산은 Wx+b = (10x3072)x(3072x1)+(10x1) = 10x1+10x1 = 10x1로, 10개의 숫자가 출력값(=클래스 스코어)로 나오게 된다.
- 선형 분류기는 클래스 스코어를 이미지의 모든 픽셀 값들의 가중치 합으로 스코어를 계산한다.
- 또한 3개의 채널을 모두 고려하는 것도 잊지 말아야 한다.
- 위 그림을 보았을 때 입력값은 2x2이다. 이걸 평평하게 만든 것이 4x1이고 [56, 231, 24, 2] 배열이다.
- 위 그림은 단일 채널의 예시이다. 채널이 3개이니 위 과정을 3번 반복한 후 각 더해서 평균을 낸 값이 클래스 스코어값이다.
- 계산은 Wx+b = (3x4)x(4x1)+(3x1)이다.
Hard cases for a linear classifier
- 선형 분류기가 잘 작동하지 못하는 경우로 3가지가 있다.
- 사분면에서 반대 위치에 결정 경계(decision boundary)가 있는 경우
- 원형의 결정 경계가 있는 경우
- 3개 이상의 독립적인 결정 경계가 있는 경우
댓글남기기