CS231n

Lec 2 : Image Classification

HyunJung_Jo 2021. 1. 4. 16:50

수업내용 on Youtube

Slide

이미지 분류?

  • 이미지 분류 : 이미지의 라벨(이름)을 예측하기
  • 이미지는 가로세로3(RGB, 범위는 0~255)의 3차원 배열
  • 이미지 분류의 문제
    • 다양성 : [ 시점 변화/크기변화/변형/폐색/조명 상태/배경 분규/ 내부클래스의 다양성 ] 으로 인하여 이미지 분류가 쉽지 않음
  • 어디에 써먹느냐? - 의료 이미지, 우주 영상, 고래 인식, 객체 탐지(박스로 묶어서 인식), 이미지 설명, 바둑
  • 데이터 기반 방법론 - [데이터 & 라벨] 예제 학습 데이터 세트를 주고 =>  훈련(train)시킴 => 새로운 이미지를 얼마나 잘 분류하나 측정
  • 이미지 분류 파이프라인 (입력 - 학습 - 평가)
  • 이미지 데이터셋 예시 : MNIST(손글씨), CIFAR 10, CIFAR 100, ImageNet, MIT Places, Omniglot ; 각각 클래스 갯수,학습/검증/테스트 셋 갯수가 상이함

1st : Nearest Neighbor Classifier

  • Distance Metric : L1 & L2
    • L1 distance
      • 맨하탄 거리
      •  이미지간의 픽셀값 차이의 절대값을 계산하여 전부 더함
    • L2 distance
      • 유클리디안 거리. 픽셀값 차이를 제곱, 전부 더한 것을 제곱근으로 변환. (표준편차 구하는 것과 비슷)
      • 그래프로 그리면 동그라미로 나옴 ⇒ 경계선이 더 부드럽게 나옴
    • 이미지들의 픽셀간의 차이값으로 가까운 사이인 지 아닌 지 판별한다.
    • L2는 L1보다 두 벡터간 차가 커지는 것에 더 크게 반응 = 하나의 큰 차이보단 여러개의 적당한 차이가 생기는 것을 선호
    • 학습할 때 그냥 기억하기만 해서 빠르나, 테스트할 때 일일이 대조해야하여 너무 느림
  • Decision Boundary
    • 두 분류 지역간의 경계선 (땅따먹기 선)
    • 각 샘플 별로 비슷한 클래스끼리 모이다보면 자기네들끼리 모여서 땅을 차지한다!
    • 근데 외따로 지내는 것도 생기는데 (outlier) 이웃이 적다보면 자기 혼자 섬을 만들어버린다.
    • 이웃이 적으면 또 경계선도 울퉁불퉁하다 
    • 일일이 라벨링해주는 대신 이웃을 늘려주어 outlier가 섬 만드는 것도 줄이고 알아서 경계선이 부드럽게 만들어주자! 

2nd : KNN = K-Nearet Neighbor Classifier

  • K란?
    • 학습 데이터셋에서 가장 가까운 K개의  이웃 이미지를 찾아 테스트 이미지의 라벨에 대해 예측하도록 하는 것
    • k = 1, 원래의 NN
    • K값이 커지면, 이상점에 더 강인하고 분류 경계가 부드러워짐
    • 그치만 K값만 크다고 다일까?
  • Universal Approximation
    • 학습셋이 커질 수록 NN은 어떠한 기능이든 간에 대표할 수 있음
  • Curse of Dimensionality
    • 학습을 위해 차원이 증가하면서 학습 데이터 수가 차원의 수보다 적어져 성능이 저하되는 현상.
    • 관측치 수보다 변수의 수가 많아지면 발생
    • 차원을 줄여야 해결됨.  참고
  • 미가공 픽셀에는 잘 안쓰임
    • 테스트하는 데에 너무 오래 걸리고 (일일이 색깔값을 대조해야하니까)
    • 픽셀간 거리값 (Distance Metric on pixels)이 사실상 의미가 없음
    •  ex )  위치가 조금 바뀐 이미지 (shifted), 색이 약간 푸르게된 이미지 (tinted), 중간에 네모처리가 된 이미지 (boxed)를 놓고 비교해 봤었을 때, 우리 눈엔 shifted가 더 비슷한 이미지로 보이지만 L1,L2 거리상으로는 더 멀게 측정됨. 

Hyperparameter Tuning위한 Validation set

가장 좋은 K값은?

L1 vs L2 ?

train data : test data 비율?

- 이게 Hyperparameter Tuning

그냥 그때 그때 달라서 매번 학습하면서 조정하는 수 밖에 없다.

validation set

  • Hyperparameter 조정을 위해서 있음.
  • 테스트셋으로 검증하면 그것으로 학습을 한 상태(오염)로 되기 때문에 차후 예측에 대한 신뢰성이 떨어짐.모의고사(검증셋)을 여러번 보아 수능(테스트셋)을 잘 봐야지 미리 수능 시험지 유출하여 답지를 알고가면(overfit, 과적합) 안되는 것과 같은 것임.
  • Training set을 둘로 나눠 하나는 validation set(모의고사)로 가져가는 것도 한 방법임
  • Cross-Validation - training set크기가 작은 경우 씀. training set을 여러개로 쪼개서 한번 학습할 때 한 세트씩 돌아가며 validation set으로 쓰는 형식.

NN분류기의 장단점

장점

  • 이해 / 구현하기 쉽다
  • 학습 시간이 소요되지 않는다 - 단순 학습 데이터셋을 저장, 기억만하면 되기 때문에
  • 데이터 차원이 낮을 때 좋음

단점

  • 계산량이 많아짐 -테스트시 모든 학습 데이터 예시들과 비교하여야 함 ⇒ Neural Network는 반대로 학습량이 많고 테스트 계산량은 적음
  • 고차원 물체 분류시 거리가 분류하는 데에 효과적이지 않음.
  • 이미지 분류시, 색의 분포와 배경의 종류에 영향을 많이 받아 실제 의미가 담긴 클래스에 큰 영향을 못 받을 수도 있음

이미지 분류에 대해서 안배웠던 거에 대해 이해하려니까 좀 어려웠지만 그래도 대강 몇번 훑어보니 좀 이해가는 것 같다... 근데 별로 다루지 않은 내용이라 실질적으로 배우는 의미가 있나 싶기도 하고, 아주 기초적인 내용이라 한번쯤 보고 지나가는 것도 나쁘지 않을 것 같다. 내가 좀 궁금했었던 L1, L2의 의미와 차이에 대해 알 수 있어서 좋았다. 대충 쓰윽 알고 지나갔던 걸 제대로 짚는 느낌이라 꽤나 가려운 부분을 긁어주는 느낌이다. 지금 블로그에 정리하는 것도 시간이 오래걸려서 다른 내용을 공부할 수가 없는데, 나중에 시간 나면 관련 부분을 더 공부하는 식으로 해봐야겠다.