CS231n Lec2 Image classification pipeline

willowkim8·2020년 12월 31일
4

CS231n

목록 보기
1/3
post-thumbnail
  • 이 수업을 들으먼 k-NN, softmax and 2-layer 구현할 수 있게 됩니다

  • Python and Numpy 사용

    Numpy는 무엇인가

    • C언어로 구현된 파이썬 라이브러리로써, 고성능의 수치계산을 위해 제작됨
    • Numerical Python의 줄임말이기도 한 Numpy는 벡터 및 행렬 연산에 있어서 매우 편리
    • vectorized 연산에 중요
    • 일단 요정도만
  • Matlab(MathWorks 사에서 개발한 수치 해석 및 프로그래밍 환경을 제공하는 공학용 소프트웨어) 그리고 Numpy 와 같이 vectorized tensor 계산이 익숙하지 않다면 연습하자

Image Classification

  • 똑똑한 포유류와 다르게 컴퓨터는 이미지가 800*600 의 격자 모양의 숫자 집합으로 보임

    그리고 각 픽셀은 RGB 3가지로 표현됨. 즉 800 600 3의 거대한 숫자 집합은 우리와 다르게 컴퓨터에게는 어렵지

  • 바라보는 방향, 조명, 고양이의 포즈, Occlusion, 배경과 비슷한 정도에 따라 픽셀의 값은 모조리 변하지만 인간은 여전히 고양이임을 알아보고 우리는 그만큼 강인한 알고리즘을 원하다.

  • Huble and Wiesel 덕분에 edges로 corner를 지정할 수 있지만 강인하지 못한걸?
    즉, 확장성이 없다는거지. 세상 모든 객체에게 유연하게 적용이 가능할 수 있는 강인한 알고리즘이 필요하다고

  • 이런 일을 가능하게 하는 Insight 는 Data-Driven Approach
    -앞으로 CIFAR-10 데이터셋을 다뤄야하는데 Cifar-10은 Machine Learning에서 자주 쓰는 training image 데이터셋입니다. class 가 10개라 -10입니다. 알아두시고.

  • 데이터 중심이기 때문에 예를 들면 구글 이미지 서치로 엄청 많은 이미지를 수집하는겨

  • 이 data set을 이용해서 Machine Learning Classifier 를 학습시키는거지

  • 이 ML 알고리즘이 데이터 요약을 잘해서 다양한 객체를 인식할 수 있는 모델을 만들어내는거야 기특한놈

  • 자 다른 API(Application Programming Interface)를 봐보자

  • Train fucntion : image&label → model

  • Predict fucntion : model → predict

  • Data-driven approach는 Deep Learning뿐만 아니라 아주 일반적인 개념이지만 더 간단한 classifier 하나 보고 가자잉

  • NN 이라는 건데 상당히 단순해. 단 한 줄의 코딩으로 distance를 측정하니까

  • 간단하게 이미지 차이를 L1 으로 측정하면 되는데, Test 시간이 엄청 오래걸려서 사실상 NN 을 쓰는데는 없다. "Train Time은 조금 느려도 되지만 Test Time에서는 빠르게 동작"하길 원합니다.

  • 그거보다 좀 유연한 방법이 K-NN 이다.

  • 여기 K가 1이면 NN과 동일한거고 K가 커질 수록 more smooth 해진다.

  • K값과 distance 측정 방법을 parameter라고 하고
    그에 따라 정확도가 달라지니까 요거를 잘 정해야 하는데
    1.dataset으로만 정할때가 K=1일 때라, 아까도 말했지만 NN은 bad
    2.data를 train 과 test 로 나눠서 진행한다면 새로운 데이터에 포용력을 알 수 없기 때문에 마찬가지로 bad
    3.train, validation 그리고 test로 나눠서 하면 training으로 셋팅된 hyperparameter를 validation data를 통해 tunning을 하고 test를 진행하기 때문에 better
    4.Cross-Validation이라고 data가 적을 때 쓰는 건데,

    5개 정도의 fold로 data를 나눠서에 1, 2, 3, 4로 training 하고 5번으로 validation 하고 다시 2, 3, 4, 5로 training 하고 1번으로 validation 하고,
    이런 식으로 5번 반복을 해서 hyperparameter를 설정할 수 있다.

  • 그런데 결국 K-NN도 현실에서는 쓸 수가 없다.
    왜냐하믄 테스트 타임도 너무 길고 distance로 이미지 차이를 잘 표현하지 못하기 때문이다.

  • 게다가 curse of dimensionality 때문이기도 한데,
    -요건 좀 더 내가 더 숙성하고 알려주께. 너무 많은 데이터가 필요해서 라고만 알고 있어봐

Linear Classification

  • 레고 같은 Linear Classification을 선형으로 다닥다닥 끼우면 고게 Neural Network(신경망)이라고 비유할 수가 있습니다.

  • data는 동일하게 CIFAR-10 이용할겁니다.

  • 전에 배운 NN들은 parameter가 없었는데 이건 있습니다.

-딩동댕동

  • 절대 필자가 피곤하거나 아직 공부를 덜 한게 아니고, 시간이 됐으니까.
    다음 시간에!

참고 자막

https://github.com/visionNoob/CS231N_17_KOR_SUB/blob/master/kor/Lecture 2 Image Classification.ko.srt

참고 블로그

https://leechamin.tistory.com/64
https://namrmino.tistory.com/entry/CS231n-Lecture-2-Image-Classification?category=919351
https://gjghks.tistory.com/70?category=887163

profile
망고농장주인

4개의 댓글

comment-user-thumbnail
2020년 12월 31일

오 어려운 내용인데 정리가 잘 되어있네요! 망고농장 또 올게요 ㅋㅋ

답글 달기
comment-user-thumbnail
2020년 12월 31일

오호! 넘파이가 C언어로 구현된 파이썬 라이브러리였군요! 덕분에 알아갑니다!

답글 달기
comment-user-thumbnail
2020년 12월 31일

말로 설명하듯이 글을 쓰셔서 이해가 잘 되네요. ㅎㅎㅎ 앞으로도 건필하세요. 화이팅!

답글 달기
comment-user-thumbnail
2021년 1월 2일

쉽게 설명을 잘해주셨네요 :) 도움받고갑니다. ^^*

답글 달기