CS231n | Lecture 2

yeonk·2021년 10월 10일
0

ai

목록 보기
6/9
post-thumbnail

20210922

Lecture 2 | Image Classification pipeline



1. Image Classification


이미지 분류는 컴퓨터 비전에서 매우 중요한 작업이다.

이미지를 입력하면 컴퓨터는 미리 설정해 놓은 카테고리 집합(예. 개, 고양이, 트럭 등) 과 매칭한다.

하지만 여기서 아래와 같은 의미론적 차이(Semantic Gap)가 발생한다.

  • 컴퓨터에게 이미지는 격자 모양의 숫자 집합으로 인식됨(픽셀)

  • 픽셀은 3개의 숫자로 표현: red, green, blue

  • 의미상의 레이블: "고양이", "강아지" 등






Challenges

  • Viewpoint variation: 이미지에 미묘한 변화가 생기더라도 픽셀 값은 크게 변화

  • Illumination: 조명, 방향에 따라서도 이미지의 픽셀 값은 영향

  • Deformation: 객체 변형

  • Occlusion: 가려짐

  • Background clutter: 배경과 객체가 비슷한 경우

  • Intraclass variation: 하나의 클래스 내 다양한 특징 (객체의 생김새, 색, 나이 등)






2. 데이터 중심 접근법(Data-Driven Approach)


원리

  • Collect a dataset of images and labels

    • 인터넷에 접속하여 많은 이미지 데이터 수집
    • Google Image Search와 같은 도구 활용
  • Use Machine Learning to train a classifier

    • 머신 러닝 분류 학습
  • Evaluate the classifier on new images

    • ML알고리즘은 어떤 방식으로든 데이터를 잘 요약해서 다양한 객체들을 인식할 수 있는 모델을 만들어냄






구성

입력 이미지 인식을 위해 함수가 2개 필요해짐 (ML Key insight)

  • Train 함수

    • 입력: 이미지, 레이블, 출력: 모델
  • Predict 함수

    • 입력: 모델, 출력: 이미지의 예측 값






3. Nearest Neighbor(NN) Classifier


Nearest Neighbor(NN)

  • Train Step
    • 모든 학습 데이터 기억(Memorize training data) → 거의 아무일도 하지 않음

  • Predict Step

    • 새로운 이미지가 들어오면 새로운 이미지와 기존의 학습 데이터를 비교해서 가장 유사한 이미지로 레이블링을 예측

    • Test 함수에서는 이미지를 입력으로 받고 L1 Distance로 비교


  • NumPy 에서 제공하는 Vectorized operations 이용

  • 공간을 나눠서 각 레이블로 분류

    • 가까운 이웃만 찾기 때문에 분류가 제대로 되지 않으면 좋지 않다.

  • 하이퍼 파라미터: K, 거리척도






k-NN

NN의 일반화된 버전 → 역시 별로 좋지 않음

Distance metric

  • 가까운 이웃을 k개 만큼 찾고 이웃끼리 투표

  • 많은 득표수를 획득한 레이블로 예측

  • 대부분 K는 1보다 큰 값으로 사용
    (k가 1보다 커야 결정 경계가 부드러워지고 더 좋은 결과를 보임)

  • 흰색영역은 임의로 정할 수 있다.

  • 거리 척도만 정해주면 다양한 데이터를 다룰 수 있다.

  • 새로운 문제를 접했을 때 간단하게 시도해보기 좋은 방법



K-nn을 이미지에 잘 사용하지 않는 이유

  • 느리다.

  • L1, L2가 이미지간의 거리를 측정하기에 적절하지 않음
    (지각적 유사성을 측정하는 척도로 부적합)

  • 차원의 저주

    • 공간을 조밀하게 덮어야하는데 그러려면 충분한 양의 학습 데이터가 필요하며, 그 양은 차원이 증가함에 따라 기하급수적으로 증가
      (고차원 이미지에서 현실적으로 불가능)






Distance

L1 Distance

Manhattan distance라고도 하며, 이미지를 Pixel-wise로 비교한다.

d1(I1,I2)=PI1PI2Pd_1(I_1,I_2) = \sum_{P} |I^P_1 - I^P_2|
  • 테스트 이미지, 트레이닝 이미지의 각 같은 자리의 픽셀을 서로 빼고 절댓값을 취한다.

  • 모든 픽셀 수행의 결과를 모두 합한다.

  • 어떤 좌표 시스템이냐에 따라 영향을 받는다(L2와 차이점)






L2 Distance

uclidean distance 라고도 한다.

d1(I1,I2)=P(I1PI2P)2d_1(I_1,I_2) = \sqrt{\sum_{P} (I^P_1 - I^P_2)^2}
  • 제곱 합의 제곱근을 거리로 이용하는 방법

  • 좌표계와 관련 없음






어떤 거리 척도를 사용해야할까?

  • 서로 다른 척도에서는 해당 공간의 근본적인 기하학적 구조 자체가 서로 다름

  • 만약 특징 벡터의 각각 요소들이 개별적인 의미를 가지고 있다면 L1이 더 적절할 수 있음

  • 특징벡터가 일반적인 벡터이고, 요소들 간의 실질적인 의미를 잘 모르는 경우라면 L2가 적절할 수 있음

  • k-NN에 다양한 거리 척도를 적용하면 k-nn으로 다양한 종류의 데이터를 다룰 수 있다.






Trainset의 이미지가 총 N개라면 train/Test 함수의 속도는 어떻게 될까?

  • Train time: 상수시간 O(1)
    (포인터만 잘 사용해서 복사하면 데이터 크기와 관계없이 상수시간으로 마무리 가능)
  • predict(test) time: N번 이미지 비교해야하기 때문에 느림

→ 단점: 뒤집어진 결과(Train < test time)






4. Hyperparameters


학습하는 것이 아니므로 학습 전에 반드시 선택해야한다.
문제 의존적이며, 여러가지 시도를 통해 결정하는 것이 좋다.



적절한 하이퍼파라미터를 선택하는 방법을 생각해보자.

방법1.

학습데이터의 정확도와 성능을 최대화하는 하이퍼파라미터 선택(ebs)

기계학습에서는 학습데이터를 얼마나 잘 맞추는지가 중요한 것이 아니기 때문에 좋지 않은 선택이다.
학습시킨 분류기가 새로운 데이터를 얼마나 잘 예측하느냐가 중요하다.



방법2.

전체 데이터셋 중 학습 데이터를 쪼개서 일부를 테스트 데이터셋으로 사용하는 방법

이 방법 역시 좋지 않은 선택이다.
테스트 셋으로는 새로운 데이터에서의 알고리즘 성능을 측정할 수 있어야 하기 때문이다.



방법3.

데이터를 train, validation, test 3개로 나누는 방법

  • 다양한 하이퍼 파라미터로 train셋 학습

  • 밸리데이션 셋에서 가장 좋았던 하이퍼파라미터(분류기)를 선택

  • 개발, 디버깅 등 모든 것을 마친 후에 밸리데이션에서 가장 좋았던 분류기를 가지고 테스트 셋에서 한번만 수행



방법 4.

크로스 밸리데이션(교차검증)

  • 딥러닝에서는 많이 사용하지 않음

  • 작은 데이터셋에 많이 사용

  • 테스트 데이터를 정해놓고 마지막에만 사용

  • 나머지 데이터는 트레이닝, 밸리데이션으로 나눠놓고 트레이닝 데이터를 보다 세분화 해서 나눔

  • 번갈아가면서 밸리데이션셋을 설정

  • 매번 다른 밸리데이션 셋을 사용하여 평가한 값의 평균값을 보는 것

  • 표준 방식이지만 딥러닝의 경우 학습 자체가 계산량이 많아 실제로 잘 쓰지 않음

  • 테스트셋이 알고리즘 성능 향상에 미치는 영향을 알아보기 위해 k fold 크로스 밸리데이션이 도움이 될 수 있다.

  • 여러 validation folder 별 성능의 분산을 고려해볼 수 있음
    → 어떤 하이퍼파라미터가 좋은지, 그리고 그 성능의 분산도 확인 가능






train set vs validation set

  • 트레이닝셋: 레이블을 기억하고 있는 이미지들. 이 단계에서는 가장 근접한 레이블을 찾는다

  • 밸리데이션셋: 분류가 얼만큼의 정확도가 나오는지 확인

  • 트레이닝셋의 레이블은 볼 수 있지만, 벨리데이션 셋의 레이블은 볼 수 없다.






test set이 한 번도 보지 못한 데이터를 대표할 수 있는가?

  • 문제가 될 수 있는 부분이다.

  • 기본적인 통계학적 가정: 데이터는 독립적이며, 유일한 하나의 분포에서 나온다(i.i.d assumption) = 모든 데이터는 동일한 분포를 따른다
    (실제로는 그렇지 않은 경우가 더 많음)

  • 데이터를 수집할 때 일관된 방법론을 가지고 대량의 데이터를 한번에 수집하는 전략을 사용하며, 무작위로 트레이닝 데이터와 테스트 데이터를 나눠줌(중요!!)

  • 먼저 수집한 데이터들을 트레이닝 데이터로 쓰고, 이후에 모은 데이터를 테스트 데이터로 사용하면 문제 발생 → 데이터를 지속적으로 모으는 경우 문제가 될 수 있음






5. Linear Classification


  • 간단하지만 NN, CNN의 기반 알고리즘으로 매우 중요하다.

  • 딥러닝 알고리즘들의 기본 블럭: linear classifier

  • Parametric model의 가장 단순한 형태

    • 입력이미지(X로 많이 표기)

    • 파라미터: 가중치. W 또는 세타(theta)라고 함

    • 파라미터가 training 데이터를 함축하여 나타내기 때문에 test time에서는 파라미터 w만 필요






Parametric approach

  • 예를 들면 함수를 작성하고, 함수는 data X와 parameter W를 가지고 10개의 숫자를 출력 (각 10개의 카테고리의 스코어)

  • 스코어가 높다는 것은 입력 X가 "고양이일 확률이 크다는 것을 의미

  • 작은 디바이스에 좋다.

  • 트레이닝 데이터의 정보가 파라미터인 행렬 w에 요약된다 (w가 학습되는 것)






Linear Classifier

f(x,W)=Wx+bf(x, W) = Wx + b



  • f(x, W) → 10 x1 (열 백터)→ 10클래스 스코어

  • Bias가 있으면 더해주면 된다 (bias term = 10 dim 열백터). 데이터와 무관하게 클래스에 우선권 부여

  • bias는 데이터 독립적으로 각 클래스에 scaling offsets을 더해주는 것

  • 템플릿매칭과 비슷

  • 가중치 행렬 w를 학습시키고 나면 새로운 학습 데이터에도 스코어를 매길 수 있음

  • 문제점: 각 객체에 다양한 모습들이 있더라도 각 카테고리를 인식하기 위한 템플릿은 단 하나밖에 없음
    → LC로 풀기 어려운 문제 : parity problem(홀짝 문제) , Multimodal problem

0개의 댓글