image classification 문제 이해하기

1. model

 

input을 받아 output을 낸다

 

input은 이미지 뿐만 아니라 tabular(정형데이터), sound, text 등 다양함

 

어떤 input을 쓰고 어떤 output을 쓰고 어떤 model을 쓸지에 따라 task 이름이 결정

 

다양한 형태의 input을 잘 이해해야 model이 output을 어떻게 내는지 잘 이해할 수 있을 것

 

image classification task는? image를 input으로 넣어 model이 categorical class를 output으로 낸다

 

 

이미지나 영상을 입력하고 이미지나 영상의 카테고리를 출력으로 주는 것

 

입력으로 준 이미지나 영상의 카테고리를 분류하는 하나의 함수 mapping을 classifier라고 한다

 

 

 

그러나 output도 0~1사이의 class 확률로 만들고 싶을 수 있고 object가 어디있는지 감지하고 싶다면 object position을 output으로 낼 수 있다

 

image를 어떻게 효율적으로 input으로 넣을 수 있을까?

 

image가 int8로 되어 있어도 모델 안에 넣으면 float가 될 수 있고

 

image size도 다양하며 어떤 경우엔 밝게 찍히는 경우도 있고 어떤 경우엔 어둡거나 어떤 image는 반전되어 있을 수도

 

이런 부분을 고려한 input 이미지 데이터 전처리가 중요

 

2. 어떻게 만들 수 있을까?

 

가장 이상적인 상황으로 내가 이 세상의 모든 이미지 데이터를 가지고 있다고 생각해보자.

 

그러면 분류하고 싶은 이미지가 들어올 때 내가 가지고 있는 데이터 중

 

들어온 이미지와 가장 비슷한 이미지를 찾기만하면 끝이다

 

3. K-nearest neighbor?

 

어떤 데이터가 들어오면 그 데이터의 근방에서 가장 가까운 k개의 이웃 데이터를 찾는다

 

그 이웃 데이터들의 label을 보고 가장 많은 label에 들어온 데이터를 포함시키면 된다

 

-----------------------------------------------------------------------------------------------------------------------------

 

 

회색 데이터가 input으로 들어오면 근방에서 k개의 데이터를 잡아오고

 

그 중 빨간색 label이 많으면 회색 데이터를 빨간색 label로 분류하고

 

초록색 label이 많으면 초록색 label로 분류하자는 알고리즘

 

------------------------------------------------------------------------------------------------------------------------------

 

내가 모든 데이터를 가지고 있다면 image classification 문제는 이런 단순한 k-nearest neighbor search 문제로 바뀐다.

 

그러나 현실적으로는 불가능하다.

 

데이터 수가 증가할수록 알고리즘의 시간 복잡도는 증가하고 메모리 용량도 증가한다

 

아무리 컴퓨터가 좋아져도 세상의 모든 데이터를 담기에는 부족하다

 

사실 K-NN을 쓰기 위해서는 이미지간의 유사도를 정의해야한다.

 

이 유사도를 정의하는 것도 사실 쉬운 문제는 아니다.

 

TAGS.

Comments