Search
Duplicate

시각적 이해를 위한 머신러닝/ First Approaches for Image Classification

이전에 들었던 유사한 부분이 많기 때문에 간략히 정리. 상세 내용은 아래 페이지 참조
이미지 분류 문제는 이렇게 정의할 수 있다.
정의된 Label 셋이 있고 사진을 보고 Label을 맞추는 것
이미지는 숫자로 되어 있음
이미지 인식에서 어려운 부분. 동일한 물체지만 아래와 같은 차이가 있을 수 있음
크기가 다르거나
각도가 다르거나
배경에 묻히거나
조명이 달라지거나
일부가 가려지거나
형태가 바뀌거나
동일한 분류 내에 또 다른 분류가 있음
이미지 분류는 위와 같이 접근할 수 있다. 이미지를 받아서 해당하는 라벨을 output으로 내보냄
이런 식의 접근으로는 대상을 분류하기가 어렵다.
머신러닝은 데이터 기반 접근 방법
학습 과정과 예측 과정을 분리
Nearest Neighbor Classifier는 데이터를 그냥 저장해 두고 있다가, 이미지가 입력 되면 저장된 데이터에서 가장 가까운 것을 찾는 것
입력 이미지와 가장 가까운 것을 어떻게 찾을까?
이런 식의 유사도 계산 함수가 필요할 것 같다. 그런데 이건 어떻게 할 수 있을까?
데이터가 픽셀 정보로 들어오므로 이미지 간의 픽셀 차이를 계산해 보자
L1 거리를 적용하면 위와 같다. 차이의 절대값의 합
L2 거리를 적용하면 위와 같다. 차이의 제곱의 합
코드를 짜보면 위와 같이 할 수 있다.
그런데 이렇게 짜면 예측 시간이 너무 오래 걸리기 때문에 좋지 않다.
Nearest Neighbor 의 결과 예시
K는 가장 가까운 것을 K개 이상을 사용한 결과 —일종의 투표 같은 셈
L1을 쓰나 L2를 쓰나 큰 차이는 없다.
K를 몇 개로 할 것이냐, 거리를 얼마로 할 것이냐를 정하는 것이 애매함
Nearest Neighbor로는 위와 같은 문제가 있음. 사람이 보기에는 같지만, 픽셀 정보면 조금 다르게 한 것을 구분하지 못 함
또한 차원의 저주 문제도 갖고 있음
차원이 늘어날 수록 필요로 하는 데이터의 숫자가 exponential 하게 커짐
위와 같은 이유로 Nearest Neighbor는 잘 안 쓰지만, 쓰게 된다면 위와 같은 방법을 적용해서 해볼 수 있다.
데이터 노말라이징
차원 리덕션
학습/검증 셋 분리
모든 점에 대해 검사하지 않고 적당하게 가까운 점들을 갖고 판단
이미지를 받으면 어떤 Label을 뱉어주는 어떤 함수를 생각해 볼 수 있다.
이미지에 어떤 parameter를 적용해서 label을 뽑아주는 것을 생각해 볼 수 있다.
input에 대해 학습된 Weight를 적용해 주면 어떤 label을 의미하는건지를 output으로 줌
함수는 input x와 학습된 Weight 를 선형으로 결합해서 Label을 출력해주는 모델을 생각할 수 있다.
위와 같은 예에서 이미지 x와 파라미터 W, 편향 b의 크기는 위와 같이 생각할 수 있다.
bias를 따로 더해주는 것은 번거로우므로 아예 input과 w의 행렬 안에 포함 시켜서 계산한다.
input에 1행, w에 1열을 추가해 줌
함수를 이렇게 정의하면 W만 저장해 두면 되기 때문에 공간이 절약되고, 계산 속도도 빠르다.
계산 예
위 함수를 시각해 보면 위와 같다. 각 선형으로 그어진 선 혹은 면을 기준으로 그 영역에 해당하는 label을 고르는 것
학습한 W를 다시 그려보면 아래와 같이 보인다.
차나 말은 실제로 차나 말처럼 보이고, 전혀 알아보기 어려운 것도 있다.