본문 바로가기

Basic Learning/Computer Vision

Categorization I

 

* 이 포스트는 컴퓨터 비젼에 대한 개인 학습용으로 작성한 포스트입니다.

 

 

Indexing Local Features

앞서 포스팅 했던 SIFT 등을 이용하여 invariant한 feature를 추출할 수 있다. 각 feature를 128 dimension space에 둔 뒤, 그의 similiarity를 계산하여 feature를 matching할 수 있다. 백과사전에서 단어의 뜻을 찾듯이, feature를 'visual word'로 mapping하는 작업이 필요하다.

 

 

 

 

다양한 이미지에 대해서 추출한 feature를 descriptor space에 둔 뒤, quantize (clustering)할 수 있다. Clustering의 각 중심을 대표값으로 생각할 수 있으며, 이를 'visual word'라 할 수 있다.

 

 

 

 

 

위의 방법에는 여러가지 문제가 존재한다.

 

1. 어떻게 sampling을 할 것인지

2. 어떻게 clustering 할 것인지

3. unsupervised vs. supervised 방법

4. 어떤 feature들로 corpus를 구성할지

5. vocab size, clustering 개수 등을 몇개로 설정할지

 

 

 

Sampling strategies

SIFT처럼 interest point를 알고리즘을 통해 구하는 방법이 있다. 그리고 이러한 interest operator를 여러개 사용해서 invariant한 feature를 뽑아내는 방법이 있다. 오히려 이미지를 작은 격자로 나누어 sampling하는 방법이 있는데 단순한 obejct categorization의 경우 이 방법이 꽤 좋다.

 

 

Clustering / Quantization methods

대부분 K-means clustering 방법을 사용한다. K개의 cluster로 나누어주는 방법인데, 그냥 K개의 feature로 나누는 경우 각 feature가 독립적이라 가정하는 거이므로, 아래와 같이 tree 구조(hierarchical)로 vocab을 구성하는 것이 일반적으로 좋다.

 

 

 

 

아래와 같이 9개의 feature를 가지는 tree가 있다고 할 때, 4개의 image를 학습시키는 것은 각 node에 filling하는 것이다. 그리고 새로운 image가 들어왔을 때, 무슨 feature가 있는지 확인하고 각 feature에 대해 voting개념으로 recognition을 할 수 있다. 이때, 포스팅 했던 RANSAC등의 방법을 통해 신뢰성있는 결과를 얻을 수 있다.

 

 

 

 

 

 

Vocabulary size

vocab의 개수가 많을 수록 성능이 좋아지는데 어느순간부터 한계선이 존재함. Efficiency 등을 생각하여 적당한 vocab size를 선택하는 것이 좋음

 

 

tf-idf Weighting

Feature마다 동일한 가중치를 두는 것보다, 중요한 feature일수록 가중치를 주는것이 좋다. 그 가중치는 아래의 식으로 나타낸다.

 

 

앞의 term은 term frequency로, 한 image에서 그 feature가 얼마나 나오는지에 대한 term이다. 한 image에 feature가 반복하여 많이 나오면 중요한 feature로 생각한다. 뒤의 term은 inverse document frequency로, 전체 image들 중에서 그 feature가 얼마나 나오는지에 대한 term이다. 전체 document에서 feature가 많이 나온다면 희귀하지 않은 (흔한) feature이므로 중요도를 떨어뜨린다.

 

 

 

Object Categorization

다른 image에 같은 물체를 찾는 작업은 쉬운 일이나, 특정한 범주의 물체를 찾는 것은 어렵다. 예를 들어, 같은 형태의 차를 찾는 것은 쉬우나, 다양한 차를 찾는 것은 어렵다. 우선 Training set을 통해 classifier를 학습시킨다. 먼저 image에서 feature extract한 뒤, classifier를 통해 label를 분류한다.

 

 

 

 

Object categorization에 있어 다음과 같은 다양한 문제가 존재한다. 아래의 각 문제에 대해 robust하게 잘 작동해야한다. 특히, 사람과 비슷하게 주변 사물 정보 (context)를 활용하여 물체를 인식하는 것도 포함되어야 한다.

 

 

 

 

 

Bag-of-Words Representations

Bags of Visual Words

전체 image를 word occurrence에 대한 distribution으로 나타낸 것이다. 즉, 하나의 image는 word들의 histogram으로 나타낼 수 있다.

 

1. feature 추출

2. 'visual vocabulary'를 학습

3. quantize (clustering) feature

4. 'visual word'의 histogram으로 이미지를 representation

 

 

 

 

위 그림과 같이 두 개 히스토그램의 거리를 계산하여 simliarity을 구할 수 있다.

위의 과정 중에서 feature를 quantize, 즉, classify하는 것이 중요한 문제가 된다. 그 중, nearest neighbor, SVM, boosting, neural network 등의 여러가지 방법이 있다.

 

 

Nearest nieghbor classifier

공간 상에서 가장 가까운 sample point와 같은 label을 할당하는 방식이다. 이를 반복하면 거리가 먼 것은 다른 label로, 거리가 가까운 것은 같은 label로 assign된다. 이는 train이 필요하지 않으며, 꽤 잘 작동한다. 이를 발전시켜, 가까운 k개의 sample을 보고 어떤 label이 많은지에 대해 voting하는 개념인 K-Nearest neighbor classifier가 있다.

 

 

 

 

장점 : 구현하기 쉽고, decision boundary가 linear하지 않음, 학습 필요없음

단점 : 좋은 distance function을 설계해야함, test하는데 오래 걸림

 

 

Linear classifiers

다음 linear function을 통해 class를 분리하는 방법이다.

 

$f(x) = sgn (w \cdot x + b)$

 

 

장점 : 낮은 dim으로 학습이 가능함

단점 : linear function을 학습시키는 방법을 설계해야함, lienarly separable하지 않을 경우

 

 

 

'Basic Learning > Computer Vision' 카테고리의 다른 글

Categorization II  (0) 2020.11.23
MRF and MAP Inference  (0) 2020.11.18
Epipolar Geometry and Stereo  (0) 2020.11.13
Homography & Alignment  (0) 2020.10.27
Fitting  (0) 2020.10.25