본문 바로가기
AI 공부하기/CS231n

CS231 2. Image Classification(score function)

by soeayun 2024. 1. 23.

Image Classification Problem:

입력 이미지(input image)를 미리 정해진 카테고리 중 하나인 라벨(label)로 분류하는 문제로써 Computer Vision에서 매우 핵심적인 문제로 알려져있다. 현재 이미지를 구별하는데 여러 현실적인 문제가 존재한다.
    - semantic gap: 우리 눈: 고양이가 한 눈에 들어온다! VS 컴퓨터: 매우 크고 다양한 숫자들로 이루어진 배열로 인식!
    - 컴퓨터가 이것이 무엇인지 정확히 이해하고 있는 것이 아니고 무엇을 뜻하는지 알아내는 것이 쉽지 않음
    - 조금만 카메라를 돌리면 사진을 이루는 픽셀의 숫자가 바로 바뀌게 됨 -> 다시 학습을 해야함
문제점
    1. Viewpoint variation(시점 변화)
    2. Scale variation(크기 변화)
    3. Deformation(변형): 대부분의 물체는 고정된 모습이 없음(변형되어 보일 수 있음)
    4. Occlusion(폐색): 물체의 일부분만 보임
    5. Illumination conditions(조명상태): 조명의 영향으로 픽셀값이 바뀌게됨
    6. Background clutter(배경 분류): 주변 환경에 섞여 알아보기 힘들게 됨
    7. Intra-class variation(내부클라스 다양성): 동물이라면 나이와 종에 따라 다른 것을 보고 하나의 동물이라는 것을 파악해야함

Data-driven approach: 데이터 기반 방법론

이미지를 각각의 카테고리로 인식하기 위한 방법 중 하나
즉, 모델을 train을 한 후 이 모델을 이용하여predict하여 효과를 검증하는 가장 중심적이고 일반적인 방법

  1. Input: Collect a dataset of images & labels(N개의 이미지를 K개의 class로 label= training set)
  2. Learning: Use ML to train a classifier: training set을 이용해 각각의 class를 train!
  3. Evaluation: Evaluate the classifier on new images
    • ground truth(실측자료): 많은 예상치들이 답, 즉 ground truth과 일치하기를 기대함

이제부터는 Image Classification을 위한 2가지 classifier(NN, K-NN)에 대해서 알아보고 어떻게 컴퓨터가 Classfication을 진행하는지 알아보게 될 것이다!

1. Nearest Neighbor Classifier

매우 직관적이고 단순한 분류기(최근접 이웃 분류기)이며 

  1. Memorize all data & label
  2. Predict the label of the most similar training image
    • 새로 들어온 image에 대해 training data에 있는 사진들 중 가장 비슷한 애를 가져오게 됨!
    • 정확히 같은 class에 있는 사진을 가져오는 성능이 낮은 편!
      [[CS231n 12. Visualizing and Understanding]] : 후에 나오는 12강에서 NN classifier이 다시 나오게 됨

그럼 이 classifier은 어떤 기준으로 비슷한 training set을 가져올까?

The choice of distance (거리 선택)

거리를 계산하는 방법은 많음

L1 distance: 두 개의 백터간의 차이를 계산!(즉, 모든 픽셀값 차이의 합을 이용!)


    - 특정 vector가 개별적인 의미를 가질 때(키, 몸무게) 주로 사용됨
    - 두 백터 값의 차가 커지는 것에 덜 민감한 것이 특징
    - 하나의 큰 차이든 여러개의 적당한 차이든 단순히 값의 차이로 결정
    - coordinate axis(좌표축)와 관련이 되어 있어 좌표계 회전시 거리가 달라짐
        - 이때 distance가 우리가 흔히 기하학적으로 생각하는 distance와 다름!(그렇기 때문에 좌표계 회전시 우리가 생각하는 거리가 달라짐)

            - 즉, distacne !=(우리가 흔히 생각하는) 거리
        - 각 좌표의 절대값을 사용하기 때문에 좌표의 순서나 회전에 따라 결과가 달라지게 됨
L2 distance: 기학적으로 두 백터간의 #euclidean_distance 를 계산하는 방법 (우리가 흔히 그래프에서 거리를 구하는 방법!= 제곱의 루트의 합!)
    - vector 요소의 의미를 모르거나 별로 없을 때
    - L1 distance에 비해서 두 백터값의 차가 커지는 것에 대해 훨씬 더 크게 반응함!(제곱)
     - 하나의 큰 차이가 있는 것보다 여러 개의 적당한 차이가 생기는 것을 선호
     - 좌표계 회전에 영향을 받지 않음
         - 회전을 하더라도 어차피 좌표간의 차이를 제곱하고 더한 후 제곱근을 취하기 때문에 영향을 받지 않음

         - L2 distance== (우리가 흔히 생각하는) 거리

2. K-Nearest Neighbor

training set에서 가장 비슷한 이미지를 찾는 것 대신 가장 비슷한 k개의 이미지를 찾아 test 이미지의 label에 투표를 하여 정해주는 방법이다! (1-Nearest Neighbor == Nearest Neighbor Classifier)
     - 새로운 데이터를 입력 받았을 때 가장 가까이 있는 K개가 무엇인지를 중심으로 새로운 데이터의 종류 정해주는 알고리즘
     - k의 값이 커질수록 classifier은 이상점(outlier)에 더 강인하고, 분류 경계가 부드러워지는 효과가 있음
더 나은 점!
  1. island 문제 해결(ambiguously classified)
예를 들어, 빨간색이 많은 지점에 초록색이 하나 끼어있는 경우, 이를 최소한 두개의 class로 묶어 애매한 지점임을 보여주고 조그만한 섬들이 생기지 않도록 부드럽게 연결!
  2. noisy에 강함
값 하나가 있다고해서 그 곳이 그 색깔 영역이 되지는 않음 (주변이 다른 영역으로 둘러쌓여있다면 값 하나에 의해 그 값이 맞다고 생각하는 것에 무리가 있음)
     => 더 나은 일반화(generalization) 성능을 보임
흰색 지점: 투표의 결과 적어도 2개의 class가 tie를 이룰 때! =ambiguously classified
색깔: 개, 고양이와 같은 사진의 종류, : 사진(image)를 의미

어떤 K를 골라야할까, 어떤 #metric 을 사용할지?= ( #hyperparameter )

Validation sets for Hyperparameter tuning(방법 3가지)

hyperparameter을 조정하기 위해 테스트 셋을 절대 사용하면 안됨
Test set은 매우 귀중한 자료이고 잘못된 경우 #overfitting 될 수 있다

  1. Split data into train & test
    • 새로운 데이터가 들어왔을때 알고리즘이 얼마나 효과적인지 모름
    • train data: unseen data(test data)에는 효과적이지 않을 수 있음
  2. Split data train, validation, test
    Training set을 다시 2개로 쪼개 validation set을 생성 -> 가짜 테스트 셋으로 활용
    • test data: iid(identical independence distribution)이기 때문에 확률적으로 기존 데이터와 비교해보았을 때 매우 무관할 가능성이 낮음 -> 무작위로 나누어도 상관없음
      • validation data: accuract를 확인하며 얼마나 모델이 정확하지 확인
      • 이후 그래프를 그려, 가장 잘 동작하는 k값을 정할 수 있음
  3. Cross-Validation [[14-1. Cross Validation]] 14강에서 다시 이 내용이 나옴
    • fold(small dataset)으로 데이터를 나누어 여러번 검사하는 방법
    • 딥러닝에는 사용하지 않음(시간이 너무 오래걸림)
      Cf) trainig data에 50~90%를 trainig용으로 나머지는 validation data로 활용(validation set의 크기는 여러 변수에 영향을 받음)
    • hyperparmeter의 개수가 매우 많으면 validation 크기를 늘리는 게 좋음
    • 수백개 정도로 적다면 cross-validaion 이용하는 것이 안전
    • 주로 3,5,10 fold로 사용됨

Pros and Cons of Nearest Neighbor classifier

장점:
1. 이해하고 실행하기 매우 간편함
2. train에 걸리는 시간이 적음
단점:

  1. test time이 매우 느림(=computational cost)
    • 컴퓨터나 스마트폰에 적용을 할 때 시간이 오래 걸림
    • 딥러닝에서는 완전히 반전되어 test time을 매우 길게 만듦!
  2. 픽셀의 distance(차이)가 정보적이지 않음
    만약 데이터가 low-dimension일때는 효과적일 수 있지만 image classification에는 효과적이지 않음
    • 이미지는 high dimensional object (차원이 높을수록 커버해야하는 범위가 지수의 속도로 증가!
      • 차원의 저주(curse of dimensionality) 에 빠지게 됨
      • 데이터가 고차원 공간으로 이동하면 데이터 간의 거리가 예상보다 빨리 증가
      • 고차원에 모든 방향으로 데이터가 흩어져 더 많은 neighbor를 찾아야 적잘하게 특정 지점을 표현 가능
      • 고차원일수록 거리가 증가함에 따라 성능 저하 및 계산 비용의 증가를 가져옴
    • 고차원에서의 distance에 대한 직관이 우리와 달라질 수 있음
      • 고차원 공간에 많은 변수와 차원에 의해 거리 개념이 일반적인 기하학적 해석과 달라지게 됨
      • 이럴 경우 distance를 이용한 NN classifier가 제대로 작동하지 않을 수 있음
    • training example을 커버하는 범위가 매우 커짐
    • pixel을 기반으로 한 L2 distance의 경우 우리가 인식하는 유사점과 거리가 있게 됨
    • 실제 물체의 특징과는 별개로 배경이 바뀌었단 이유로 가까이 있을 수 있음
      • 아래 사진모두 L2 distance가 같을 수가 있는데 이에 대한 정보는 매우 다르다는 것을 알 수 있음

'AI 공부하기 > CS231n' 카테고리의 다른 글

CS231n 4. Introduction to Neural Networks (요약,정리!)  (2) 2024.03.14