Stanford University CS231n - Lecture 2 :: Image Classification

Uomnf97·2021년 10월 28일
0

Last Lecture : Talked about Computer Vision, History, outline of the class

Image Classification

Lecture Topic : Computer vision, Image Classification에 대한 다양한 알고리즘의 작동원리 중 첫 번째 알고리즘에 대해서 공부할 예정, 또한 Computer vision의 다양한 세부사항들 중 가장 큰 세부사항에 대해서 공부할 예정

*앞으로 다양한 알고리즘의 작동원리와 세부내용에 대해서 강의가 이뤄질 것임

강의 전반부에서는 강의를 득기위한 학생들을 위한 행정적인 절차를 알려주고 시작하였다.
*나와 관계 없는 내용piazza(Stanford University 강의 출결, 프로젝트, 시험 등 질문등에 관해서 이야기하는 곳, stanford.edu이메일 관련계정이 있어야 가입가능, Assignment1에 대해서 설명

*내가 활용할 수 있는 내용: standford대학에서 Python과 Numpy를 다루지 않은 학생들을 위한 Tutorial이 제안됨. Computation, Tensor연산 작업이 많지 않은 학생들은 관련된 자료를 통해서 연습할 수 있음. 또한 구글 클라우드에서 과제나 코딩을 할 수 있는 튜토리얼을 제공함
Numpy-Tutorial 링크 : http://cs231n.github.io/python-numpy-tutorial/
Google Cloud 링크 : http://cs231n.github.io/gce-tutorial/

How to do Image Classification :: Nearest Neighbor Classification

Image Classification Definition

  • Image Classification : Image Classification(이미지 분류는) 말 그대로 이미지를 특정 Label로 분류해주는 작업이다. Input으로 사진과 사진에 해당하는 label을 입력받는다. 예를 들면 특정한 사진이 들어가고, 그 사진이 고양이인지 강아지인지 label을 얻는다는 것이다. 그럼 이렇게 들어간 사진을 학습하게 되고, 후에 다른 사진이 입력이 됬을 때 이렇게 학습한 내용을 바탕으로 사진을 출력하게 된다.

Semantic Gap

  • Semantic Gap: 사람이 이렇게 고양이를 인식하는 것은 간단히 보이지만 기계에게는 이러한 것들이 매우 어려운일에 해당한다. 그 이유는 사진을 기계는 픽셀로 인식하게 되는데 아래와 같은 고양이 사진을 그리드 형태로 각 픽셀의 RGB채널 값인 800 X 600 X 3의 형태의 숫자 행렬 값으로 받게된다. 하지만 이 숫자 값들은 실제 '고양이'라는 실질적인 의미와 큰 차이를 갖고 있고 이것을 Semantic Gap이라고 부른다. 이 Gap은 이미지 분류에 큰 장애요소이다.

Challenge : view point, illumination, Deformation, Occlusion, Background clutter, intraclass variation

  • View point : 관점에 따라서 사물이 달라지면, Pixel값도 드라마틱하게 변하는데 알고리즘은 이런 View Point가 달라지더라도 같은 사물로 분류할 수 있어야함.
  • illumination : 조명에 따라 픽셀값이 달라지는데, 알고리즘은 이에 대해서 올바른 연산을 할 수 있어야함. 어두울 때, 밝을 때 모두 고양이로 인지 할 수 있어야함.
  • Deformation : 사물은 여러가지로 모습을 변화(Transform)할 때가 있음. 극적인 변화보다는 자세를 바꾸는 등(눕기, 걷기, 달리기) 어느 정도 변형이 일어나는데 알고리즘은 이에 대해 올바른 분류를 할 수 있어야함.
  • Occlusion : 사물은 다른 사물과 결합한 상태로 인지됨. 예를 들어 고양이의 얼굴만 나와있다거나 소파에 고양이가 가려져 꼬리만 나온다거나 하는 상태로 나옴. 따라서 다른 사물과 결합하여 보이는, 혹은 가려져있더라도 올바르게 분류할 수 있어야함.
  • Background Clutter : 배경과 비슷한 색이거나 비슷한 무늬처럼 되어 배경과 구분이 잘 안되는 경우가 있고, 알고리즘은 이에 대해 올바르게 분류할 수 있어야함
  • Interclass variation : 고양이와 같은 생물은 다양한 사이즈, 색, 그리고 개체의 변화과정, 종 들이 있는데 알고리즘은 이에 대해서 대비할 수 있어야함

Image Classification Algorithm

  • 앞서나간 Challeng를 분류해내는 알고리즘을 생각하는 것은 어려운 작업임. 과거에 모서리를 인식하고 테두리 코너를 인식하는 방식으로 코딩을 진행하였으나, 여러가지 객체에 확장성이 있이 적용하지 못하고 각 객체마다 Engineer가 작업을 해야했음. 예들 들면 강아지에 대한 분류하는 알고리즘을 만들었다면 강아지 대신 고양이, 소와 같은 것들을 적용할 수 없었고 , '강아지'만 분류할 수 있었음. 따라서 여러가지 고안방식을 고안해보았고 _Data -Driven Approach을 생각해냄.

Data Driven Approach

  • Data Driven Algorithm :
    1) image와 label 데이터 셋을 충분히 많은양을 준비함
    2) Machine learning Classifier에 input으로 image&label을 넣고 학습
    3) Ouput으로 얻은 학습모델에 새로운 이미지를 넣어서 모델 성능 평가
    Train - Predict 두가지 방법으로 바뀌게 됨. 10~20년간 최고의 방법

Nearest Neighbor

  • Nearest Neighbor : Nearest Neighbor는 학습단계에서 사실상 학습은 진행하지 않고, 모든 데이터와 라벨에 대한 데이터를 외움. 그리고 예측을 할 때에 가장 Training image와 비슷한 사진을 가지고 label을 예측함.
    *CIFAR10: 10개로 카테고리(label)과 라벨에 해당하는 50000가지의 이미지를 가진 데이터 셋과 각 label마다 천여개정도 테스트 해볼 수 있는 10000개의 테스트 이미지가 제공됨.

  • 훈련 결과를 보면 완벽하게 분류를 하고 있지않으나 꽤 훈련데이터와 비슷한 데이터를 제공하고 있는 것을 알 수 있음.

  • 가까운 것들을 분류 하는 방법 : L1이라는 맨해튼 거리식을 사용하였음. 픽셍의 각 원소의 차이값의 합을 구하는 방식으로 가까운 데이터를 분류해나감. 어리석을 방법이나 합리적인 결과를 도출하기도 함.
    *numpy, python이용했음(교재)

  • 빅오 시간 :
    • Train:O(1)
    • Test: O(n) - 느림
  • 이것은 트렌드를 역행하는데 보통 많은시간을 들여 학습을 해 성능을 높이고, 저전력 장치(핸드폰, 개인노트북)과 같은걸로 빠르게 테스트를 하기원하기 때문임.
  • 예시

K-Nearest Neighbor

  • Nearest Neighbor 방법을 쓰게 되면 Noise에 약하게 됨. 따라서 단순 거리의 합이 아닌, 가까운 것들에 대해 투표를 하게하여 과반 이상이 가까이 있는 클래스에 분류를함(가중치를 곱해주는 방식도 존재). 이런방식을 적용할 경우 관련된 분류에 대한 Noise를 줄여줄 수 있음.

  • 거리측정 방법 : 아래와 같은 거리 측정을 이용하면 꽤 빠르게 분류를 진행할 수 있고 데이터에 관해서도 알아 볼 수 있음. 거리를 이용하는 방식이므로 텍스트, 이미지 등 다양한 것에 쉽게 적용할 수 있다는 것이 특징이므로 활용이 쉽다는 장점이 있음

    • Manhattan distance : 특정한 좌표계에서 거리를 재는 방법으로 어떠한 좌표계인지 명확히 알고 잇다면 Manhattan distance 방법을 통해서 거리를 측정하면 좋음. 경계선이 좌표를 따라감
    • Euclidean distance : 여러가지 좌표계에서 변화값이 크지 않은 방식으로 좌표계에 대해서 잘 모르는 상황에서 사용하면 유용함. 경계선이 좌표를 따라가지 않음

Hyperparameter

  • Hyperparameter : 기계학습을 진행할때 hyperparameter KNN같은 경우 K와 같은 하이퍼 파라미터 지정이 중요한데, 이는 학습을 통해 알 수 있는 것이 아니며, 모든 케이스에 대해서 실행해보고 성능이 제일 좋은 것을 살펴보는 방식으로 진행해야된다.
  • Hyperparameter 찾기 Idea
    1) Train Dataset에 근거한 Parameter 찾기 : 절대로 권장되지 않음. 우리가 만들고 싶은 것은 새로운 Unseen 데이터에 대한 분류 성능이지 학습데이터를 얼마나 잘 학습했는지 알고 싶지 않음. 이렇게 되면 Noise에 대한 민감도가 높아져 좋은 성능 모델을 만들 수 없음
    2) Train, Test Dataset으로 나눠서 Parameter 찾기 : 이 또한 권장되지 않는 방식임. Test Dataset에 성능이 좋다는 것도 새로운 데이터 셋에 대해서 성능이 좋다는 것을 보장하지 않음 .
    3) Train, Test, Validation Dataset : 세가지로 데이터를 나누고 Train에서 학습, Validation과 Test Dataset으로 교차검증하여 좋은 성능의 데이터를 반환해야함.
  • Cross Dataset : Cross Valication방식은 각각의 데이터를 많은 fold로 나누고 훈련을 할 때 랜덤하게 fold를 지정해 validation으로 사용하고 남은 것들은 훈련데이터로 사용하는 방법이다.(물론 test 데이터는 다로 나누어져 있다.)이러한 방식으로 측정을 한다음에 결과를 평균을 매겨 데이터의 민감성 문제를 해결 시켜준다. 작은 데이터 셋에 적합하며, 많은 데이터 셋에는 적합하지 않다.*이렇게 검증을 하는 이유는 test, train데이터가 일반적인 데이터를 반영하지 않을 수 있기 때문이다. 따라서 우리는 이러한 문제를 해결해줄 때 각 데이터셋의 파티션을 랜덤하게 만드는 것이 중요하다.

K Nearest Neighbor 의 사용도

  • 이미지 분류에 전혀 사용되지 않는다.
  • 이유 :
    • Test에 너무 느리다는 단점을 갖고 있다.
    • 이미지를 분류하는 방식이 적합하지 않다.
      예로 아래의 사진은 여러가지 부분에서 다르게 변경을 했음에도 L1길이가 일치한다는 특징을 갖고 있다.
    • Curse of dimensionality : 차원이 높아질수록 정확한 데이터 학습을 위해 많은 데이터가 필요하며 밀도 또한 중요해져 학습의 정확도를 떨어뜨린다.

How to do Image Classification :: Linear Classification

Linear Classification은 분류 모델의 한 종류로 Deep Learning에 자주 사용된다. 마치 Neural Network는 레고와 같이 연결되어있는데, 하나의 블록 or 레고를 Linear Classifiers를 이용해 구성한다.
Ex) 사진과 label이 하나의 블록을 이뤄 각 인공지능 모델의 classifier에서 단계를 거쳐서 학습된다.

Linear Classifier 학습 방법 :

이미지에대한 픽셀값을 하나의 벡터 형태로 정리되어서 들어오고 이 벡터의 값을 X라고 할 때, 해당하는 길이의 가중치(W)가 구해지고 이를 10가지의 class로 분류하는 방식을통해서 Parameter을 구하게 됨.
아래 예시 )

Interperting a Linear Classifier :

Linear Classifier는 W의 값을 구하는 과정인데 이 W를 통해서 특정한 Parameter를 구하고 이를 통해서 다음과 같은 이미지를 구성해줄 수 있다. 이미지를 구성해 놓은 것들을 보면, 그 클래스와 비슷하게 복원한것을 볼수 있다. 특징으로는 비슷하게 구성해놓았으나, 말의 머리가 두개가 나타난다는지, 대부분의 그림체가 뭉뚝하게 구성되어있는 부분 등 아직 Template이 적어 정확하지는 않음. 이러한 문제는 Deep Learning의 Convolutional Neural Network모델로 해결 가능

*위와 같이 특정한 경계를 정하고 그 경계에 따른 그림을 분류한다고 보면 됨.

Linear Classification 단점

선형 모델을 제외하고 아래와 같이 띠 모양이거나, 선이 두개 이상 나누는 것이 필요하거나 부분과 전체로 나눠야 하는 경우 등 아래와 같은 경우에 한가지 선으로 구분이 불가능함.

  • 다음 강의 : 그럼 다음과 같이 나온 값들을 가지고 어떻게 분류할 것인지, Optimization, Loss function, ConvNets에 대해 배움

사진 및 강의 내용 출처:2017 Stanford University CS231n - Lecture 2 Image Classification

profile
사회적 가치를 실현하는 프로그래머

0개의 댓글