본문 바로가기
컴퓨터/Computer Vision

[Vision] CS231n 2-3 Linear classification, Score function, template matching ..

by IT황구 2021. 1. 18.
728x90
반응형

(체감상)한국어 10문장 == 영어 1문장 이라서 강의를 듣고 강의 노트까지 다 해석하고 이해하면

너무너무너무 피로하다.. 내용도 아예 처음보는거라서 생소하고.. 하지만 불가능한걸 하는것도 아니고.. 하면 다 할 수 있다!!!

Linear classification(선형 분류)

template matching방법, 고->저차원으로 변경 후 score표시 선으로 표시하는 방법

왜 선형 분류일까.. 가장 직관적 느낌으로는 선형 == 1차라서 추후에 보면 알겠지만 그래서 선형인가? 라는 느낌을 받았다.

일단 지난번에 봤던 kNN classifier의 단점을 생각해보자

1. training data를 배열같은데에 저장하는데 공간 효율성이 너무 떨어진다. (기가바이트 단위를 저장해야함)

2. 모든 training data와 비교를 하기때문에 연산량이 너무 많다.

이번에 배운 Linear classification은 나중에 NN(Neural network)나 CNN으로 확장할 수 있는 더 강력한 이미지 분류 접근법이다.

이 접근법에는 2개의 주요 요소들이 있다.

score함수, loss 함수 이다.

나중에 배우겠지만

score함수는 내가 classify한 것의 점수를 나타내는것이다. 점수가 높을수록 좀 더 옳게 분류한것이다.

loss함수는 옳게 분류했으면 0 그렇지 않으면 점점 점수가 커지는.. ground truth와 predicted img 의 차이를 정량화 해주는 함수 라고 생각하면 된다.

이건 parametric approach라고 하는데 파라미터를 기반 분류를 하기 때문이다.

엄청 길고 자세한 내용들을 짧게 요약하자면..

f(x,b) = Wx + b 라는 함수처럼 표현을해서 y값을 score로 나타내는 것이다.

이때 적절한 y값을 도출할 수 있는 w와 b 를 찾는것이 나중에 목표가 될 것이다.

===== W와 b x에 대한 설명 =====

x는 실제 img를 픽셀값으로 나타낸 column vector를 의미한다. (4개의 픽셀을 쭉 stretch해서 column vector로 바꾼다)

b는 bias로 실제 img인 x와는 상호 관게가 없으면서, score값(결과) 에는 영향을 주는 것을 말한다.

W는 가중치인데 Matrix로 표현된다. 이 가중치를 정하는것은 나중에 우리가 할 일인데..

일단 size를 정하는 방법을 보자 .

이게 무슨 뜻인가 하면..

CIFAR-10 을 기준으로 class가 10개가 있으므로 결과는 10개가 나오게 된다.

ex)

1. 개 사진을 input으로 넣는다 .

2. 각 클래스별 score 함수가 나온다. (가장 높은 점수를 가진 클래스가 컴퓨터 생각엔 이게 가장 input과 비슷하다고 느낀 것이다)

따라서 f(x,W) 의 값이 [10 x 1] 을 가진 행렬로 나와야 한다는 것이다.

그럼 내가 알고있는것은 x이다. 또한 b는 행렬의 덧셈을 위해서는 row,col이 같아야 하기 때문에 결과 값과 같은 [10 x 1]이 된다.

W는 우리가 결과에 맞춰주는것이다.

[ r x c ] dot [3072 x 1 ] = [10 x 1] 이 나오려면 r은 10 , c는 3072가 되는것이다. 이런식으로 맞춰주게 된다.

이렇게 결과가 3*1 이면 그걸 맞춰주기 위해서 W도 조정을 하는것이다.

선형분류에서 왜 W랑 b가 필요한지??

아니 그러면 f(w,x ) = Wx + b 의 기하학적 의미는 뭘까..

W는 그냥 기울기이다. 우리가 가중치를 바꾸게 되면 직선의 방향이 rotate된다. 기울기가 바뀌니까 당연히 직선의 direction이 바뀌는것이다.

b는 평행이동이다. y절편의 값을 옮기기 때문에 score도 옮겨지게 되는것이다.

이건 아래에서 말할 내용이지만, 예를들어 내가 ship 을 분류한다고 해보자. Ship은 어디에 있겠는가? 바다에 있다.

바다는 무슨색인가? -> Blue다. 여기서 weight는 나중에 픽셀화된 img와 내적을 할 때에 blue라는 색에 점수를 더 줘서

score를 높게나오게 만들 수 있다. (그렇다면 파란색을 가진것은 ship으로 분류될 확률이 조금 더 높게 되는 것이다.)

이런식으로 W를 조절할 수 있다.

그럼 B(bias)는 왜 필요한가 ?

만약 pixel이 모두 0이라고 해보자. 그렇다면 b가 없을경우 Wx 를 하면 값이 0이 나온다.

즉 직선이 반드시 원점을 지나게 되어야 한다.

(쓰다가 생각해보니.. 원점을 왜 지나면 안되는거지? 분류가 힘들어져서 그런것 같기도 하다. 아래 함수를 보면 이해된다.)

이런것을 막아주기 위해서 b를 이용해 평행이동을 시키는 것이다.

선형분류의 장점

1. test time이 굉장히 줄어든다.

training data를 W와 b를 설정하는데 학습할 자료로 사용한다.

그다음 W와 b가 설정되면 training set을 다 버리고 세팅된 w와 b를 이용한 score function에다가 input img의 pixel값을 넣음으로써 계산을 한다. 이렇게 되면 kNN처럼 모든 training set과 비교하는 불필요한 연산이 사라지게 된다.

또한 이미지 분류가 간단한 행렬의 곱과 합으로만 이루어지기 때문에 전체를 비교하는 kNN과 비교해서 굉장히 빠르다.

나중에 배울 CNN도 선형분류처럼 픽셀값을 score로 mapping한다고 한다.

하지만 매핑함수가 좀 더 복잡하고, 더 많은 parameter를 갖게 된다고 한다.

선형분류 해석해보기

선형분류기는 클래스의 점수를 계산한다.

모든 3개의 컬러채널을 아우르는 픽셀값들의 가중치가 곱해진 합으로써 나타낸다.

이 W들에 어떤 값(음수 or 양수) 를 설정하느냐에 따라서 함수는 이미지의 특정 위치에서의 특정 color를 like or dislike 할 능력이 생긴다.

위에서 예시를 들었지만

ship class를 예시로 들면 img 주변에 blue가 많으므로 W에 양수가중치를 주고 나머지 red,green에는 음의 가중치를 줌으로써 score를 낮춘다.

이 image를 class score로 매핑한 예시를 보자.

시각화를 위해서 4개의 pixel과 단일 color를 가졌다고 가정한 것이다.

red는 cat, green은 dog, blue는 ship이라고 가정하자.

참고로 row에 있는 컬러는 rgb color와는 상관이 없는것이다. 그냥 구분용이다.

W에서의 각 row는 각 class의 classifier를 나타낸다.

W의 첫번째 row는 cat의 classifier 인 것이다.

이제 계산을 해보면 W의 assign은 좋지 않은것을 알 수 있다. 왜냐하면 cat score가 굉장히 낮게 나오고 오히려

저 사진을 dog로 인식해버린다. 이건 잘못된 W이다.

이미지(고차원 점으로써)의 비유

아까 봤다시피 32 x 32 x 3 = 3072를 3072 x 1 행렬로 쭉 stretch 했기 때문에

우리는 각 이미지를 3072차원 공간에서의 한 점으로 해석할 수 있다.

마찬가지로 전체 dataset은 라벨링된 점들의 집합으로 볼 수 있다.

모든 클래스의 점수를 img의 픽셀에 가중치를 곱한 합으로 정의했기 때문에

각각의 class score는 공간상에서 선형합수이다. (일차결합꼴..)

3072차원을 시각화하는건 불가능하기 때문에 2차원으로 축소한다고 가정하면

분류기가 어떻게 작동하는지 시각화 할 수 있다.

여기서 각각의 img는 한 점을 나타낸다. 여기에는 3개의 분류기가 나와있다. (비행기, 차, 사슴)

자동차 분류기를 예시로 들면 red line은 car class의 score가 0점인 점들의 집합이다.

red arrow는 증가 방향을 나타낸다. 이게 무슨말인가? 하면

빨간선보다 위쪽에 있는 img들은 positive score를 갖게 되고, left 방향의 img들은 negative score를 갖게 된다는 말이다.

deer 를 보면 아래쪽은 positive라 진짜 사슴같긴 하다. 하지만 그 위는 negative라 닭이 있다.

위에서 봤듯이 모든 W의 row는 모든 클래스에 하나씩 대응하는 classifier이다.

W를 수정하면 기울기가 바뀌기 때문에 정말 조심히 다뤄야한다. car을 보면 W가 음수인데, 이걸 +로 바꿨다고 하면 분류가 완전 이상하게 된다.

template matching 으로써의 Linear Classifier 해석

가중치 w에 대한 다른 해석으로는 w의 각 row가 각 class의 template에 해당한다고 볼 수 있다.

각 클래스별로 input image에 대한 점수는 inner product를 통해서 얻어진다.

이 내적은 img와 template을 하는것이다. (제일 잘 맞는 class를 찾기 위해서)

이걸 용어로 말하면 linear classifier가 template matching을 한다고 표현한다. template은 학습에 의해서 배워진다.

반드시 템플릿은 training set중에 하나가 될 필요는 없다.

거리함수로는 L1,L2 distance 대신에 내적한 후 -를 붙여서 사용한다.

위의 template이 예시이다.

보면 ship은 확실히 blue pixel이 많다.

따라서 이 템플릿은 바다위에 떠있는 배 이미지와 내적을 할때 높은 score를 얻을것이다.

게다가 말은 머리가 2개다.. dataset에서 왼쪽, 오른쪽 방향을 가리키는 말들이 있었던 것이다.

linear classifier은 이 사진들을 merge해서 하나의 template으로 만든다.

비슷하게 자동차 또한 여러 사진들이 하나의 template으로 합쳐진 것이다.

특히 car은 빨강으로 끝나는데 이건 dataset에 red car들이 다른 색들의 차량보다 더 많았다는걸 의미한다.

지금 봤듯이 linear classificaton은 여러가지 색들의 차를 구분하기에는 어려움이 있다.(too weak)

하지만 나중에 NN(신경망)을 통해서 이것을 할 수 있을 것이다.

연산을 좀 더 줄여주는 trick

Bias trick ( 1과 내적하면 자기 자신인걸 이용함)

원래는 Wx + b를 해야했는데 이걸 첨가행렬처럼 한칸 더 옆으로 늘려서 연산하는 방법이 있다.

이렇게 하면 뭐가 좋은가 ?

1. 곱 + 합의 단계를 거치는것을 곱 단계에서 마칠 수 있다.

2. 또한 계속 W와 b를 들고다녀야 하는것에서 벗어 날 수 있다.

W안에 b를 넣어버려서 W만 가지고 다녀도 된다.

이걸 간소화 해보자.

이런식으로 하면 따로 b를 들고다닐 필요가 없게 되는 것이다.

각 row의 맨 끝에다가 b를 붙이고 img 함수에는 맨 마지막에 상수 '1' 을 추가하는 방법이다.

----------------------------------------------------

image data 처리에 대한 내용이 있는데 무슨말인지 잘 이해가 안갑니다.

나중에 이해가 가면 정리를 위해 기록만 해놓습니다.

image data 처리.

위에서는 이미지의 픽셀을 [0,255]로 나타냈다..

ML에서는 input 특징들을 일반화를 하는것은 매우 흔한일이다.(이미지의 각 픽셀은 각각의 특징으로 생각된다)

특히 모든 특징에서 평균을 빼서 데이터의 중심을 맞추는게 굉장히 중요합니다. (뭔말인지 잘 이해 안감)

image의 경우 training image의 평균을 계산하고, 그 평균을 모든 image에서 빼는것 을 말한다..(픽셀의 범위를[-127,127]로 얻기위해)

더 일반적인 전처리는 input feautre를 [-1,1]로 두는것이다

여기서 0은 중간에 온걸 의미하고 좀 더 중요하다. 하지만 이것을 정당화 하기 위해서는 좀 더 기다려야한다.

경사하강의 dynamics를 이해하기 전까지는...

=====================2강 끝 ===

감사합니다

728x90
반응형