히비스서커스의 블로그

[CS231n 2] Image Classification 본문

Theory/Computer Vision

[CS231n 2] Image Classification

HibisCircus 2020. 12. 30. 22:42
728x90

  내용들은 전적으로 스탠포드 대학의 CS231 강의 내용을 기반으로 작성하였음을 먼저 밝힙니다. 

 

 

 

2. Image Classification

 

이미지 분석의 문제

- 입력 이미지가 주어졌을 때 여러 가지 카테고리 중 어디로 분류할 것인가?

- 컴퓨터는 이미지를 숫자들의 집합(행렬)로 인식하기 때문

 

* Segmatic Gap

- 사람의 인식과 컴퓨터의 인식에서 발생하는 차이

- 여러 이미지가 동일한 대상을 나타내고 있어도 픽셀값이 다 다르기 때문에 인식하는 것은 매우 어려움

 

 

 

2-1. 첫번째 고전적 방식 - edge와 corner를 이용

 

* edge와 corner의 간략한 의미

- edge: 가장자리

- corner: 패인 부분

 

문제점

 - 한 개체에 대해 여러 개(조명, 방향, 자세, 가려짐 등에 의해 달라지므로)를 만들어야 하고

- 모든 객체에 대해서 만들어야 하므로 확장성이 없다.

 

고안해낸 방향

=> 데이터 중심 접근 방법 (많은 양의 데이터를 인터넷에서 얻을 수 있음)

 - Train 함수: 입력은 이미지와 레이블, 출력은 분류하는 모델

- Predict 함수: 입력은 모델, 출력은 이미지의 예측값

 

좋은 예측을 하려면 Train의 시간이 매우 오래걸리더라도 Predict의 시간이 적게 걸리게 만들어야 함!!

=> 시간: Train > Predict이면 좋은 예측기임

 

 

2-2. 두번째 방식 - Nearest Neigbor Algorithm

 

NN에서의

 - Train 함수: Training data를 기억하는 함수 (변수에 이미지를 대입하는 것)

- Predict 함수: Training data를 Test data와 비교하여 각 픽셀 값의 차이(거리)를 구하고 더한 값을 반환하는 함수

 

여기서, Train 함수의 빅오는 O(1)이고, Predict 함수의 빅오는 O(N)이므로 NN은 좋은 예측기가 아님

 

 유사정도의 측정방법

- 아이디어: 두 이미지의 픽셀(행렬)의 숫자의 차이를 절대값을 구하여 더한 후 작으면 유사한 것으로 간주

 

 

거리측정방법

- L1 distance: Manhattan distance => 좌표 축에 의존적 (0점에서 목표지점까지 X축이동→, Y축이동↑을 더한 값이 일정)

- L2 distance: Euclidean distance => 좌표에 의존적이지 않음(0점에서 떨어진 거리↗가 항상 일정)

 

* 거리측도에 관련하여

Mangattan distance와 Euclidean distance 모두 Minkowski Distance의 특별한 경우이다. (r=1, r=2 인 경우)

 

Minkowski Distance, 출처 : (http://rfriend.tistory.com)

 

발전 : k-nn Algorithm

- 방법: Distance metric을 이용해서 가까운 이웃을 k개 만큼을 찾고, 이웃끼리 투표하는 방법

- 하이퍼 파라미터: k값과 거리척도

 

*** 하이퍼파라미터 (hyperparameter)

: (다른 parameter들은 training으로부터 값이 도출되는 반면)

이들의 값이 learning process에서 조절하는데 사용되는 parameter

 

하이퍼파라미터는 무조건 작다고 크다고 좋은 것이 아님

=> 즉, 하이퍼 파라미터는 직접 구해보기 전까지 최적의 값을 모름

 

 

※ 그렇다면 최적의 파라미터를 찾는 방법?

- 데이터를 분류하는 정확도가 가장 높게 하는 최적의 파라미터를 찾아야 함

 

- 이때, Training data로 모델을 만든 후 Training data에 대해서 정확도를 구하면 당연히 100%가 나오게 됨

- 따라서, 데이터를 Training data, Validation data, Test data로 나누어

Training data를 통해 모델을 만들고 (하이퍼파리미터를 제외한 나머지 변수들의 최적의 조건을 찾음)

Validation data를 통해 최적의 하이퍼파라미터를 찾고 (하이퍼파라미터 변화에 따른 정확도의 차이를 비교하여 높은 것 선정)

Test data는 위에서 만든 최적의 모델과 최적의 하이퍼 파라미터 하에 데이터가 분류됨!!

 

 

 

K-fold cross validation  (편의상 여기서는 K=5로)

training set: 학습을 위해 사용되는 데이터 (이것만 학습에 사용되는 것임, 이때 하이퍼 파리미터는 임의의 값을 넣음)

validation set: 튜닝을 하기 위함 (training set을 통해 만든 모델을 이 데이터를 통해 정확도를 메겨보고 다시 하이퍼파라미터설정)

test set: 가장 마지막에 최종적으로 모델을 평가할 때 사용되는 데이터

 

 

1) 받자마자 Data를 랜덤으로 섞은 후 test 데이터를 떼어냄 (데이터를 보지 않은 채로 해야함)

이유: i.i.d(indepedent identically distribution)의 조건을 맞추어주기 위함 

 

2) 남은 데이터를 5개로 나누어 주고 돌아가면서 하나를 Validation data로 사용하고 나머지를 Training data로 사용하여 모델 훈련

 

3) k = 1~100 (여기서 k는 K-cross validation의 K가 아니라 k-nn algorithm의 k로 하이퍼파라미터임)의 경우를 모두

학습시킴 (5X100 = 500번을 학습)

 

4) Cross-Validation Accuracy가 높은 것과 분산(작아야 좋은 것)을 고려하여 적합한 k를 선택!

 

5) 모델에 최적의 하이퍼파리미터를 대입하여 Test data를 분류!

 

 

*** curse of dimensionality (차원의 저주)

- 차원이 증가할수록 개별 차원 내 학습할 데이터 수가 적어지는 현상

- 즉, 차원(변수)이 하나 증가할 때 이에 상응하는 데이터의 수(관측치 수)는 훨씬 더 많아져야 한다!!

 

curse of dimensionality, 출처 : (https://www.researchgate.net/figure/The-curse-of-dimensionality-a-11-objects-in-one-unit-bin-b-6-objects-in-one-unit-bin_fig1_264823819)

 

2-3. Linear Classifier 파라미터적 접근

 

f(x, W) = Wx + b 

x: data (여기서는 이미지)

W: function (여기서는 파라미터)

b: bias (편향으로 데이터의 편중과 같은 문제를 보정해주는 등 모델의 성능을 높이기 위해 쓰임)

 

여기에서는 이해를 쉽기위해 고양이 사진을 2X2이미지로 간주하였다.

 

이를 4X1 벡터(x)로 하여

3X4 함수(W)를 곱하고 (여기에는 각 행에 각각 고양이, 개, 배를 선정하기 위한 값들의 배열)

3X1 편향 (b)를 더해줌

 

최종적으로 각 행의 score 중 가장 큰 것의 행이 의미하는 대상으로 분류!

 

 

 

Linear Classification

 

 

- 왜 중요한가? 

 

딥러닝 모델 구축하는 것에 가장 기본이 되는 (하나의 레고 블럭이 되는) 것이 Linear classifiers이기 때문에 어떻게 동작하는 지를 정확하게 이해하는 것이 매우 중요하다!! NN을 이룰 것이기 때문에

=> Linear Classification: NN을 이루는 블럭

 

 

- parametric model (가장 단순한 형태)

 

Linear classifier의 parametric model에는 2개의 요소가 있음

첫째, image: data X로 들어가는 것

둘째, 가중치: paramete W로

이로 이한 결과물운 n개의 숫자를 출력하는데 n개의 카테고리의 스코어를 의미함 (스코어가 큰 것으로 분류할 가능성이 큼)

 

 

***** 매우 중요한 부분 ***** (nn과 linear classification의 학습 방법 차이)

nn 같은경우 파라미터가 없었다!! input함수에 데이터만 입력하는 과정이 있었다.

Linear Classification은 파라미터가 존재한다.데이터와 파라미터를 조합하는 가장 간단한 방법인 곱셈 즉 행렬을 취함!!

 

 

- 모델의 구성

 

W(가중치) : 클래스 수 * image가 포함하고 있는 숫자의 총량(총 픽셀 수) 

x(데이터) : image가 포함하고 있는 숫자의 총량(총 픽셀 수)  * 1

b(바이어스) : 데이터와 무관하게 (가중치는 데이터의 값에 곱하기 때문에 데이터가 크면 크게 부여함 - 데어터 의존적) 더해줌 (임의의값)

 

 

- 표현

 

각 클래스를 나타내는 스코어(고양이 스코어)=  입력이미지의 픽셀 값들과 가중치 행력을 내적한 값 +  bias term

 

 

- 한계

 

한 클래스 내에 다양한 특징들이 존재할 수 있지만, 모든 것들을 평균화 시키기 때문에 다양한 모습들이 있더라도 각 카테고리를 인식하기 위한 템플릿은 단 하나밖에 없다.

=> 클래스 당 하나의 템플릿만 학습할 수 있다

 

 

- 적용하기 힘든 예

1) 반전성 문제: 홀수와 짝수를 분류하는 것과 같은 문제

2) multimodal data: 한 클래스가 다양한 공간에 분포할 경우 

 

 

 

2020.12.30

(복습 후 최종 수정: 2021.01.11.월)

 

 

히비스서커스

 

728x90

'Theory > Computer Vision' 카테고리의 다른 글

[CS231n 6] Training Neural Networks 1  (0) 2021.02.07
[CS231n 5] Convolutional Neural Networks  (0) 2021.02.01
[CS231n 4] Introduction to Neural Networks  (0) 2021.01.25
[CS231n 3] Optimization  (0) 2021.01.18
[CS231n 3] Loss Functions  (0) 2021.01.13