[CV]CS231n Lecture 2: Image Classification pipeline(1)

2024. 7. 1. 13:07·AI & ML/컴퓨터 비전
목차
  1. Image Classification이란?
  2. Data-Driven Approach(데이터 중심 접근방법)
  3. First classifier: Nearest Neighbor
  4. NN의 decision regions
  5. K-Nearest Neighbors: Distance Metric

Image Classification이란?


input image를 보고 미리 정해놓은 카테고리 중 무엇인지 알아내는 것이다.

인간에게는 너무나도 쉬운 과정이지만..

 

컴퓨터가 이미지를 보는 법

컴퓨터에게 이미지란 기껏해야 '숫자들의 집합'일 뿐이다. 

각 픽셀들은 3개의 숫자 (red, green, blue)로 표현된다.

 

조명의 영향, 객체의 자세(위치), 가려짐 정도, 배경과 비슷한 정도, 하나의 클래스 내의 다양성...등등

단순히 픽셀들의 숫자값으로 image classification을 수행하기에는 어려움이 많다.

 

그래도 하나 해보자면..

우리는 Hubel과 Wiesel의 연구에서 edges의 중요성을 알아냈다.

  1. 이미지에서 edges를 계산한다.
  2. 다양한 corners와 edges를 각 카테고리로 분류한다.
  3. 객체(고양이) 인식을 위한 명시적인 규칙 집합을 써내려 간다.
    예를 들어, 세 개의 선이 만나는 지점을 corner라고 했을 때 
    여기에 corner하나, 저기에도 corner 하나.. 

하지만 이런식으로 고양이를 인식한다면 우리는 강아지를, 트럭을, 사람을 인식할 때마다 새로운 규칙들을 써내려가야 할 것이다. 

즉, 이 알고리즘에는 확장성이 전혀 없다.

 

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


이 세상에 존재하는 다양한 객체들에게 유연하게 적용 가능한 확장성 있는 알고리즘을 만들어야 한다. 

  1. 인터넷에 떠돌아 다니는 방대한 양의 image / label 의 데이터셋을 모은다.
    상당히 많은 시간과 노력이 필요하지만, 다행이도 이미 고퀄의 데이터셋이 존재한다. 
  2. 이 데이터셋을 이용해서 Machine Learning Classifier를 학습시킨다. 
  3. 만들어진 학습 모델로 새로운 이미지를 테스트 한다. 

이제 우리의 API가 조금 변경되었다.

입력 이미지를 고양이로 인식하려면 함수 하나가 아니라 2개가 필요하다. 

def train(images, labels):
#Machine learning!
return model
def predict(model, test_images):
#Use model to predict labels
return test_labels

 

이 2개의 함수가 ML의 ket insight 이다. 

 

data-driven approach는 Deep Learning뿐만 아니라 아주 일반적인 개념이다. 

더 복잡한 알고리즘을 배우기 전에, 심플한 Classifier을 한 번 살펴보겠다.

 

First classifier: Nearest Neighbor


NN 알고리즘은 상당히 단순하다.

  • train step
    단순히 모든 학습 데이터를 기억하기만 한다.
  • predict step
    새로운 이미지가 들어오면, 해당 이미지와 기존의 학습 데이터를 비교해서 가장 유사한 이미지로 레이블링을 예측한다. 

오른쪽 칸의 맨 왼쪽 열은 CIFAR-10 테스트 이미지이고, 오른쪽 방향으로는 학습 이미지 중 테스트 이미지와 유사한 순으로 정렬한 것이다.

여기에서 중요한 점은 어떻게 비교를 할 것인가?가 될 것이다. 

 

Distance Metric to compare images 

 

L1 dist는 아주 간단한 방법이다. 

위 예제에서 두 이미지는 456만큼의 차이가 난다고 말할 수 있다. 

 

Q) trainset의 이미지가 총 N개라면 train / test 함수의 속도는 어떻게 될까?

A) Train O(1) : 데이터를 기억만 하면 된다.

     predict O(N) : N개의 학습 데이터 전부를 테스트 이미지와 비교 

 

실제 우리는 train time(학습 시간)은 길어도 되지만 predict time(test time)은 빨라지길 원한다.

CNN과 같은 parametic model들은 NN과 정 반대이다.

Train time은 엄청 오래 걸릴지 모르나, Test time은 엄청 빠르다.

 

NN의 decision regions


k값에 따른 변화

 

각 점은 학습 데이터이고, 색은 클래스 레이블(카테고리)이다. 

2차원 평면 내의 모든 좌표에서 각 좌표가 어떤 학습 데이터와 가장 가까운지를 계산하는 건데, k=1을 보면 이 분류기가 그닥 좋지 못하다는 걸 알 수 있다. 초록색 중간에 노랑이 껴 있다든지.. 

 

따라서 NN의 조금 더 일반화된 버전인 k-NN 알고리즘이 탄생했다. 

Distance metric을 이용해서 가까운 이웃을 K개 만큼 찾고, 이웃끼리 투표를 하는 방식이다. 다수결의 원칙!

 

초록이 성공, 빨강이 실패

뭐, 이것도 그닥 성능이 좋다고는 말 못하겠다. 

 

성능을 높이기 위해 2가지 정도를 생각해볼 수 있다.

  • 이웃 늘리기
    k=3, 5.. 혹은 모든 행(row)를 사용한다면?
    더 많은 이웃들이 투표에 참여하면서 각종 잡음들에 조금 더 강인해질 것이다.
  • 서로 다른 점들의 비교 방법
    지금까지는 L1 Distance를 활용했는데.. 이 방법을 바꾼다면? 

 

K-Nearest Neighbors: Distance Metric


L1의 관점에서는 왼쪽의 사각형 위의 점들이 모두 원점으로부터 동일한 거리만큼 떨어져 있다. (두 좌표의 합이 같으면 같은 거리이다.) 

하지만 L2 관점에서는 그 점들의 집합이 원이된다.  

 

L1은 어떤 좌표 시스템이냐에 따라 많은 영향을 받는다.

예를 들어, 기존의 좌표계를 회전시키면 L1 distance가 바뀌게 된다.

L2는 좌표계와 아무 연관이 없다.

 

특징 벡터의 각각 요소들이 개별적인 의미를 가지고 있다면 (키, 몸무게 등) L1이 더 잘 어울릴 수도 있다.

하지만 특징 벡터가 일반적인 벡터이고, 요소들간의 실직적인 의미를 잘 모르는 경우라면 L2가 더 잘 어울릴 것이다. 

 

거리 척도에 따른 변화

 

왼쪽의 L1은 좌표축에 영향을 받아 경계가 형성된 것을 볼 수 있고,

오른쪽의 L2는 좌표축에 영향을 받지 않기 때문에 조금 더 자연스럽게 형성된다. 

http://vision.stanford.edu/teaching/cs231n-demos/knn/

k-nn 분류기 웹 데모이다. 

L1, L2에 따른 변화는 확실하게 보이는데 k값에 따른 성능차는 분류기 모습으로만 봐서는 판단하기 힘들다. 

 

어떻게 하면 "내 문제"와 "데이터"에 꼭 맞는 모델을 찾을 수 있을까?

k와 거리척도를 "hyperparameters"라고 한다.

이러한 하이퍼 파라미터를 정하는 일은 problem-dependetnr(문제의존적)이므로 학습 전 사전에 선택해야만 한다. 

 

Setting Hyperparameters


기계학습의 궁극적인 목표는 학습 데이터를 얼마나 잘 맞추느냐가 아닌, 

한 번도 보지 못 한 데이터를 얼마나 잘 예측하느냐 이다.

 

그러므로 hyperparameter을 고를 때 학습데이터만을 가지고 선택하는 일은 없어야한다. 

 

일반적인 방법은 데이터를 3개로 나누는 것이다.

대부분은 training set, 일부는 validation set, 나머지는 test set으로 나눈다. 

 

다양한 하이퍼파라미터로 training set을 학습

> validation set으로 검증 후 가장 좋았던 하이퍼파라미터 선택

> 개발/디버깅 등 모든 일들을 마친 후 가장 좋았던 분류기를 가지고 test set에서 "오직 한 번만" 수행 

 

coss-validation은 작은 데이터셋일 경우 많이 사용하고 딥러닝에서는 많이 사용하지 않는다.

  • 트레이닝 데이터를 여러 부분으로 나눈다.
  • (이 예제에서는) 처음 4개의 fold에서 하이퍼 파라미터를 학습시키고 남은 한 fold에서 알고리즘 평가
  • 1,2,3,5 fold에서 다시 학습시키고 fold4로 평가

이런식으로 계속 진행해 최적의 하이퍼파라미터를 찾는 방법이다. 

더보기

Training Set vs Validation Set vs Test Set

 

"모델을 학습하는데에는 오직 Train dataset만 이용한다"

validation set은 학습이 이미 완료된 모델을 검증하기위한 dataset이다.
test set은 학습과 검증이 완료된 모델의 성능을 평가하기위한 dataset이다.

둘의 공통점은 이 데이터를 통해 모델을 학습 시키지 않았다는 것이다.

 

하지만 validation set은 학습에 '관여' 한다. 

training set의 레이블은 볼 수 있지만, validation set의 레이블은 볼 수 없다.

 

training set으로 학습하며 validation set으로 성능을 측정할 기회를 미리 주고 마지막에 test set으로 실제 성능을 측정한다.

validation set은 나머지 두 데이터셋의 괴리감을 줄이기 위함으로도 볼 수 있다. 

cross-validation을 수행하고 나면 위와 같은 그래프를 얻을 수 있다.

예제에선 k=7일 때 성능이 가장 좋아보인다. 

 

k-Nearest Neighbor의 문제점

Distance metrics on pixels are not informative

 

오른쪽 3개 사진의 L2 distance가 모두 동일하다 ,,

>> L2 distance가 이미지들 간의 "지각적 유사도"를 측정하기에는 적합하지 않다. 

 

Curse of dimensionality

 

차원의 저주

K-NN이 하는 일은 트레이닝 데이터를 이용해서 공간을 분할하는 일이다.

>> 이는 K-NN이 잘 동작하려면 전체 공간을 조밀하게 커버할 만큼의 충분한 트레이닝 샘플이 필요하다는 것을 의미한다. 

     (if not, 이웃이 사실은 엄청 멀 수도 있고 그렇게 되면 테스트 이미지를 제대로 분류할 수 없을 것이다.) 

>> 차원이 증가함에 따라 필요한 학습 데이터의 양이 기하급수적으로 증가한다. 

'AI & ML > 컴퓨터 비전' 카테고리의 다른 글

[디지털 영상 처리] Contrast Stretching  (0) 2024.03.28
[디지털 영상 처리] Point Processing 개요  (1) 2024.03.26
[디지털 영상 처리] Image Load 실습  (1) 2024.03.26
[디지털 영상 처리] Image Load 실습환경 구축  (2) 2024.03.26
[디지털 영상 처리] Histogram  (0) 2024.03.19
  1. Image Classification이란?
  2. Data-Driven Approach(데이터 중심 접근방법)
  3. First classifier: Nearest Neighbor
  4. NN의 decision regions
  5. K-Nearest Neighbors: Distance Metric
'AI & ML/컴퓨터 비전' 카테고리의 다른 글
  • [디지털 영상 처리] Contrast Stretching
  • [디지털 영상 처리] Point Processing 개요
  • [디지털 영상 처리] Image Load 실습
  • [디지털 영상 처리] Image Load 실습환경 구축
JYUN_
JYUN_
예비 개발자 성장기록
  • JYUN_
    데브 스토리
    JYUN_
  • 전체
    오늘
    어제
    • 분류 전체보기 (87)
      • AWS & 클라우드 컴퓨팅 (2)
        • AWS (2)
      • AI & ML (17)
        • 딥러닝 (3)
        • 인공지능 기초 (2)
        • 자연어 처리 (3)
        • 컴퓨터 비전 (8)
      • CS 지식 (9)
        • 알고리즘 (1)
        • 자료구조 (4)
        • 지식확장 (1)
        • 컴퓨터 네트워크 (3)
      • 백엔드 (22)
        • Node.js (12)
        • Spring (9)
      • 웹 프론트엔드 (21)
        • HTML (3)
        • React (7)
        • 바닐라 JavaSctipt (11)
      • 코딩 테스트 & 문제 해결 (10)
        • 코딩 테스트 연습 (9)
        • 실전 문제 풀이 (1)
      • 트러블 슈팅 (1)
      • 기타 (4)
        • 개인 지식 관리 (1)
        • 외부 활동 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
JYUN_
[CV]CS231n Lecture 2: Image Classification pipeline(1)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.