입력 이미지를 받음 → 시스템에는 우리가 미리 정해 놓은 카테고리 집합이 존재 → 입력 이미지가 어떤 카테고리에 속할지 고르는 과정
컴퓨터에게 이미지는 아주 큰 격자 모양의 숫자 집합으로 인식 (Semantic Gap, 인간과 컴퓨터의 이미지 인식 체계의 차)
이미지에 아주 미묘한 변화가 존재 → 픽셀 값의 변화가 큼 → 우리가 만든 알고리즘은 이런 것에 robust 해야함
Challenges : View point(바라보는 방향), lllumination(조명), Deformation(객체 자체의 변형), Occlusion(가려짐), Background Clutter(배경과 유사한 객체), Intraclass variation(하나의 클래스 내의 다양성)
Image Classifier
동물을 인식하기 위해 고급 coded rules를 만들고자 하는 시도를 해옴 → 이미지에서 edge와 corner를 계산 → 명시적인 규칙 집합을 만들어 냄 ⇒ robust X, 또 다른 객체를 인식해야 한다면 처음부터 다시 만들어야 함(확장성 X)
데이터 중심 접근 방법 (Data-Driven Approach) :
인터넷에서 많은 데이터를 수집 → 데이터셋을 이용해서 Machine learning classifier를 학습 → 다양한 객체들을 인식할 수 있는 모델 만들어냄
입력 이미지 인식을 위해 두 개의 함수가 필요 ⇒ Train 함수 (입력은 이미지와 레이블, 출력은 모델), Predict 함수 (입력 모델, 출력은 이미지의 예측값)
Nearest Neighbor
Train step 에서는 아무 일도 하지 않고, 모든 학습 데이터를 기억
Predict step 에서는 새로운 이미지가 들어오면 새로운 이미지와 기존의 학습 데이터를 비교해서 가장 유사한 이미지로 레이블링을 예측
어떻게 비교를 할 것인가? (어떤 비교 함수를 사용할지)
Trainset의 이미지가 총 N개 라면 Train/Test 함수의 속도는?
Train time은 O(1) (상수 시간, 데이터를 기억만 하면 되기에), Test time은 O(N) (N개의 학습 데이터 전부를 테스트 이미지와 비교)
Train time < Test time ⇒ 우리가 원하는 것의 반대
좋은 분류기는 아님 ⇒ noise나 가짜 (spurious) 때문에 다른 영역에 끼어드는 문제 → k- NN의 등장