Image Classification

·2023년 12월 25일

딥러닝 기초 이론

목록 보기
2/14

Image Classification

  • 컴퓨터 비전의 주요 작업 중 하나로, 입력된 이미지가 어떤 범주에 속하는지를 판단하는 작업이다
  • 입력 이미지를 수신하고 시스템은 미리 정의된 카테고리 또는 레이블 세트로 분류한다
  • 컴퓨터에서 이미지는 아주 큰 격자 모양의 숫자집합이다. 각 픽셀은 세 개의 숫자로 표시되어 해당 픽셀에 대한 빨간색, 녹생, 파란색 값을 제공한다. 이런 다양한 숫자에서 고양이같은 클래스로 분류하는 것은 매우 어렵다

의미론적 격차(semantic gap)

  • 이미지 픽셀 값과 그 데이터가 표현하려는 의미 사이의 차이를 말한다
  • 즉, 기계가 인식하는 데이터의 숫자적 표현과 사람이 인식하는 의미 사이의 간극을 의미한다
  • 이미지를 기계가 이해하게 만드는 것은 쉽지 않다. 이미지는 수백, 수천, 수백만 개의 픽셀로 이루어져 있다. 그러나 이러한 픽셀 값들 만으로는 이미지가 전달하려는 '의미'를 바로 이해하기 어렵다. 예를 들어, 사람이 보기에는 '고양이'가 명확하게 표현된 이미지라 할지라도, 기계에게는 그저 수많은 픽셀의 집합일 뿐이다
  • 이미지의 픽셀값에 변화(조명, 카메라 위치, 고양이 자세 등)를 주면 픽셀의 값은 모조리 달라지지만 이미지가 고양이를 나타낸다는 사실은 변하지 않는다
  • 고양이의 다양성도 문제가 된다. 고양이에 따라 생김새, 크기, 색, 나이가 각양각색이다
  • 이런 semantic gap을 줄이기 위해서는 알고리즘이 강력해야 한다

Hubel과 Wiisel의 방식으로 고양이 분류

  • edge가 시각적 인식에 있어서 매우 중요하므로 이미지의 edge를 계산한 다음 모든 다른 corner와 edge를 분류한다
    • 세 개의 선이 만나는 지점이 corner이다
  • 그 후 고양이를 인식하기 위한 명시적인 규칙 세트를 정한다
  • 하지만 이것은 잘 작동하지 않는다
    • 이 알고리즘은 강인하지 못해 부서지기 쉽다
    • 다른 객체에서 활용하려면 처음부터 다시 설계해야 된다는 단점이 있다

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

  • 모델이 학습하는 데 사용되는 데이터에 중점을 두는 접근법이다
  • 이는 알고리즘이 데이터에서 직접 패턴을 학습하고, 이를 바탕으로 예측이나 결정을 내리는 방식이다
  • Google Image Search와 같은 도구를 이용하여 엄청난 데이터를 수집한다. 수집한 데이터로 Machine Learning Clssifier를 학습시킨다
  • ML 알고리즘은 어떤 식으로든 데이터를 잘 요약해서 다양한 객체들을 인식할 수 있는 모델을 만들어 낸다
  • 학습된 모델에 입력 이미지를 주게 되면 모델은 객체를 잘 인식하게 된다

Nearest Neighbor

  • 분류 문제를 해결하기 위한 간단하면서도 강력한 기법 중 하나이다
  • 이 방법은 훈련 데이터셋에서 가장 가까운 데이터 포인트(즉, '최근접 이웃')를 찾아 분류를 수행한다
  • 작동 방식
    • Train Step에서는 아무 일도 하지 않고, 모든 학습 데이터를 기억한다.
    • Pridict Step에서는 새로운 데이터 포인트가 주어지면, 분류기는 이 데이터 포인트와 가장 가까운 훈련 데이터 포인트를 찾는다
      • '가까운' 것은 일반적으로 유클리디안 거리(Euclidean distance) 또는 다른 유사도 메트릭을 사용하여 측정한다
    • 분류기는 이 가장 가까운 훈련 데이터 포인트의 레이블을 새로운 데이터 포인트의 레이블로 지정한다
  • 구조
    • train() : 입력은 이미지와 레이블, 출력은 모델이다
    • predict() : 입력이 모델이고, 출력은 이미지의 예측값이다
      -> train()과 predict()는 잘 작동하기 위한 핵심이다
  • 단점
    • 훈련 데이터셋이 매우 크거나 고차원의 특징을 가지고 있는 경우, 가장 가까운 이웃을 찾는 것은 계산적으로 매우 복잡해질 수 있다
    • 훈련 데이터의 노이즈에 매우 민감하며, 이상치(outlier)에 의해 결과가 크게 영향 받을 수 있다

trainset의 이미지가 총 N 개라면 Train/Test 함수의 속도

  • Train O(1), predict O(N)이 된다
  • 원하는 사양과는 반대
  • Train Time이 느려도 되지만 Test Time에서 빠르게 동작해야 한다

Cifar-10

  • 머신러닝에서 자주 쓰는 연습용 데이터 셋
  • 10 가지의 클래스와 50,000 여개의 학습용 이미지가 있다
  • 알고리즘 테스트용 10,000 여개의 테스트 이미지가 있다
  • 각 이미지는 32x32 픽셀을 가진 3채널 컬러 이미지(32x32x3)

테스트 이미지와 학습 이미지의 비교 방법

  • L1 Distance(Manhattan distance) : 픽셀 간 차이 절대값의 합
    • 이미지를 Pixel-wise로 비교
    • 테스트/트레이닝 이미지의 같은 자리의 픽셀 값을 서로 빼고 절댓값을 취한다
    • 모든 픽셀 차이 값을 더한다

  • L2 Distance(Euclidean Distance) - 제곱 합의 제곱근
    • 보통 고차원 공간에서의 거리를 측정하는 데 사용
    • 딥러닝에서는 L2 distance를 손실 함수(loss function)로 사용하기도 한다

L1와 L2의 차이

  • L1은 어떤 좌표 시스템이냐에 따라 많은 영향을 받는다
    • 기존의 좌표계를 회전시키면 L1 distance는 변한다
    • 좌표계에 의존적이므로 데이터가 좌표계에 의존적인지 판단할 수 있는 기준이 될 수 있다
  • L2는 좌표계와 아무 연관이 없다
  • 만약 특징 벡터의 각각 요소들이 개별적인 의미를 가지고 있다면
    (ex 키, 몸무게) L1 distance가 더 잘 어울릴 수 있다
  • 하지만 특징 벡터가 일반적인 벡터이고, 요소들간의 실질적인 의미를 잘 모르는 경우라면, 아마도 L2 Distance가 조금은 더 잘 어울릴 수 있다

K-Neareset Neighbors(K-NN 알고리즘)

  • 데이터 포인트를 분류할 때, 훈련 데이터셋 내에서 그 데이터 포인트와 가장 가까운 'K'개의 이웃 데이터 포인트를 찾는다
  • 그런 다음 이 이웃들의 레이블을 기반으로 새로운 데이터 포인트의 레이블을 결정한다
  • 분류 문제에서 K-NN 알고리즘은 이웃들의 레이블 중 가장 흔한 레이블을 새로운 데이터 포인트의 레이블로 선택한다. 즉, 다수결 원칙을 따른다
  • K가 1보다 커야 결정 경계가 더 부드러워지고 더 좋은 결과를 보이기 때문에 대부분 1보다 크게 설정한다
  • 거리 척도만 정해주면 어떤 종류의 데이터도 다룰 수 있다
    • 벡터나 이미지가 아닌 문장도 가능
  • K-NN은 파라미터가 없기에 parametric model가 아니다. 그저 전체 트레이닝 셋을 가지고 있었고 모든 트레이닝 셋을 Test time에 사용했다.
  • 단점
    • 너무 느림
    • L1/L2 Distance가 이미지간의 거리를 측정하기에 적절하지 않다
    • "차원의 저주"

차원의 저주

  • K-NN이 하는 일은 training 데이터를 이용해서 공간을 분할하는 일이다
  • 이는 K-NN이 잘 동작하려면 전체 공간을 조밀하게 커버할 만큼의 충분한 트레이닝 샘플이 필요하다는 것을 의미한다
  • 공간을 조밀하게 덮으려면 충분한 양의 학습 데이터가 필요하고 그 양은 차원이 증가함에 따라 기하급수 적으로 증가한다

K-NN의 하이퍼 파라미터

  • K와 거리척도는 하이퍼 파라미터이다
  • Train time에 학습하는 것이 아니므로 학습 전 사전에 반드시 선택해야 한다
  • 하이퍼 파라미터를 정하는 일은 문제의존적(problem-dependent)이다
    • 가장 간단한 방법은 데이터에 맞게 다양한 하이퍼 파라미터 값을 시도해 보고 가장 좋은 값을 찾는 것이다

좋은 하이퍼 파라미터 정하는 아이디어

  • 학습 데이터의 정확도와 성능을 최대화하는 하이퍼 파라미터를 선택하는 방법
    -> 절대 이렇게하면 안 됨
    • 학습 데이터를 얼마나 잘 맞추는지는 중요하지 않다
    • 한 번도 보지 못한 데이터를 얼마나 잘 예측하는 지가 중요하다
  • 전체 데이터셋 중 학습 데이터를 쪼개서 일부를 테스트 데이터로 사용하는 방법
    • 학습 데이터로 다양한 하이퍼파라미터 값들을 학습을 시키고 테스트 데이터에 적용시켜본 다음, 하이퍼파라미터를 선택하는 방법이다
      -> 역시 위와 같은 이유로 절대로 하면 안 됨
  • 데이터를 세 개로 나누는 방법
    • 데이터의 대부분은 training set으로 나누고, 일부는 validation set(검증 셋), 그리고 나머지는 test set으로 나눈다
    • 다양한 하이퍼 파라미터로 "training set" 을 학습시킨다
    • 그 후 "validation set" 으로 검증을 한다. 그리고 validation set에서 가장 좋았던 하이퍼파라미터를 선택한다
    • validation set에서 가장 좋았던 분류기를 가지고 test set에서는 "오로지 한번만" 수행한다
  • Cross-Validation(교차 검증)
    • 작은 데이터 셋일 경우 많이 사용, 딥러닝에서는 많이 사용하진 않는다
    • 이 방법은, 우선 테스트 데이터를 정해놓는다. 테스트 데이터는 아주 마지막에만 사용한다
    • 그리고 나머지 데이터는 training 데이터를 여러 부분으로 나눠준다
    • 이런 식으로 번갈아가면서 validation set을 지정해 준다
    • 이런 방식은 거의 표준이긴 하지만 실제로는 딥러닝같은 큰 모델을 학습시킬 때는 학습 자체가 계산량이 많기 때문에 실제로는 잘 쓰지 않는다

Training Set과 Validation Set의 차이

Training Set은 우리가 레이블을 기억하고 있는 이미지들이다. 어떤 이미지를 분류하려면 트레이닝 데이터의 모든 이미지들과 비교하게 된다. 그리고 가장 근접한 레이블을 선택한다. 알고리즘은 training 자체를 기억한다. 이제는 validation set을 가져와서 training set과 비교한다.그리고 이를 통해서 validation set에서는 분류기가 얼마만큼의 정확도가 나오는지 확인한다. validation set의 레이블은 알고리즘이 얼마나 잘 동작하는지를 확인할 때만 사용한다.

Test Set이 알고리즘 성능 향상에 미치는 영향

test set이 알고리즘 성능 향상에 미치는 영향을 알아보려면 K fold cross-validation이 도움을 줄 수 있다. 여러 validation folds 별 성능의 분산(variance)을 고려해 볼 수 있다. 분산을 같이 계산하게 되면, 어떤 하이퍼파라미터가 가장 좋은지 뿐만 아니라, 그 성능의 분산도 알 수 있다.

Linear Classification

  • NN과 CNN의 기반 알고리즘
  • 이미지를 인식하기 위해서 CNN을 사용한다. 그리고 언어를 인식하기 위해서 RNN을 사용한다.
  • NN이 레고블럭과 같다면 Linear Cloassification는 기본 블럭과 같다
  • "parametric model"의 가장 단순한 형태이다
  • parametric model에는 두 개의 요소가 있다
    • 입력 이미지. 보통 "X"로 쓴다
    • 파라미터, 즉 가중치는 문헌에 따라 다르지만 "W"라고도 하고 세타(theta)라고도 한다.
  • 함수는 data X와 parameter W를 가지고 10개의 숫자를 출력한다. 이 숫자는 CIFAR-10의 각 10개의 카테고리의 스코어이다.
  • parametric approach 에서는 트레이닝 데이터의 정보를 요약한다. 그리고 그 요약된 정보를 파라미터 W에 모아준다. 이런 방식을 사용하면 Test time에서 더이상 트레이닝 데이터가 필요하지 않다. Test time에서는 파라미터 W만 있으면 그만이다. 이 방법은 핸드폰과 같은 작은 디바이스에서 모델을 동작시켜야 할 때 아주 효율적이다.
  • 가중치 W와 데이터 X를 조합하는 가장 쉬운 방법
    • 이 둘(W, x)을 곱하는 것
  • 단점
    • 각 클래스에 대해서 단 하나의 템플릿만을 학습하다는 것
    • 홀/짝수를 분류하는 것과 같은 반전성 문제(parity problem)는 일반적으로 Linear classification으로 풀기 힘들다
    • Linear classifier로는 Multimodal problem을 풀기 힘들다
      • Multimodal data라면 한 클레스가 다양한 공간에 분포할 수 있으며 이 문제는 Linear classifier로는 풀 수 없다.
  • 각 이미지을 고차원 공간의 한 점이라고 생각해 볼 때 Linear classifier는 각 클래스를 구분시켜 주는 선형 결정 경계를 그어주는 역할을 한다.

동작 설명

입력 이미지가 32 x 32 x 3이라고 할 때 이 값을 길게 펴서 열 벡터로 만들면 3,072-dim 벡터가 된다. 3072-dim열 벡터가 10-classes 스코어가 되어야 한다. 이는 10개 카테고리에 해당하는 각 스코어를 의미하는 10개의 숫자를 얻고 싶은 것이다.
따라서 행렬 W는 10 x 3072가 되어야 한다. 이 둘을 곱하면 10-classes 스코어를 의미하는 10 x 1 짜리 하나의 열 벡터를 얻게 된다.
그리고 가끔은 "Bias" 을 보게 될텐데 가끔 Bias term도 같이 더해주기도 한다. Bias term은 10-dim 열 벡터이다. Bias term은 입력과 직접 연결되지 않는다. 대신에 "데이터와 무관하게" 특정 클래스에 "우선권"을 부여한다.

가중치 행렬 W의 각 행은 각 이미지에 대한 템플릿으로 볼 수 있고 그 행 벡터와 이미지의 열벡터 간의 내적을 계산하는데, 여기에서 내적이란 결국 클래스 간 탬플릿의 유사도를 측정하는 것과 유사함을 알 수 있다.
bias는 데이터 독립적으로 각 클래스에 scailing offsets을 더해주는 것이다

출처 및 참조

https://youtu.be/OoUX-nOEjG0?si=duCBSZCqIJuhCk4h

profile
공부 기록

0개의 댓글