2019-04-17 15:43:20

Bag of Words (BoW)는 Bag of Visual Words와 Bag of Features로 불리기도 한다. 컴퓨터 비젼 분야에서 BoW는 이미지 분류(image classification) 과제에 주로 사용된다. 이미지 분류에 BoW가 어떻게 활용될 수 있는지에 중점을 두고 BoW에 대해서 함께 알아보자. 

 

문서 분류 과제에서 Bag of Words (BoW)

BoW는 맨 처음에 문서 분류 목적으로 사용되었기 때문에 Bag of Words라는 이름이 붙여졌다. BoW는 문서 내 어떤 단어들이 많이 존재하는지에 따라 문서의 주제를 분류해낸다. 예를 들어, 어떤 문서에서 '패스', '골', '선수' 등의 단어가 많이 출현했다면 그 문서는 스포츠에 관련된 문서로 분류하고, '노출', '피사체', '구도' 등의 단어가 많이 출현했다면 사진에 관련된 문서로 분류해내는 식이다. 이때 단어들의 순서는 전혀 고려하지 않는다. 어떤 단어가 먼저 나왔고, 어떤 단어가 나중에 나왔는가는 상관하지 않겠다는 것이다.

 

간단히 어떻게 작동하는지 살펴보자. 먼저 문서 내 존재하는 단어들로 단어장을 만든다. 그 다음에 각 단어마다 몇 번씩 출현했는지를 카운트해서 히스토그램을 만든다. 이 히스토그램이 각 문서의 속성에 대해서 묘사하고 있다고 말할 수 있다. 히스토그램을 보고 이 문서의 주제를 판단한다.  

 

이미지 분류 과제에서 BoW

그렇다면 이미지 분류 과제에서 BoW는 어떻게 작동하는 것일까? 이미지 분류 과제에서 단어(word)에 해당하는 것은 지역 이미지 특성들(local image features)이다. 그 특성들은 SIFT나 SURF와 같은 영상 특징점(keypoint) 추출 알고리즘에 의해 결정되기도 하고, 간단히 이미지 지역 패치로 결정되기도 한다. 암튼 여러 장의 이미지로부터 특성을 도출한 결과가 다음과 같다고 가정해보자. 

 

 

이렇게 도출된 특성들 중에는 상당히 유사한 것들이 존재할 것이다. 따라서 특성들 중에서 비슷한 것들을 하나로 모아주기 위해 k-means와 같은 군집(clustering) 방법을 사용한다. 군집의 센터점들에 코드워드(codeword)를 부여해주고, 코드워드들로 구성된 코드북(codebook)이 만들어진다. 코드북은 visual vocabulary로 불리기도 한다. 이 코드북이 몇 개의 코드워드로 구성될 지는 특성들을 몇 개의 클러스터로 군집시킬지에 따라 달라진다.  

 

 

이렇게 코드북이 완성되면 각 이미지를 코드북을 이용해서 표현할 수 있게 된다. 이미지에서 도출된 특성들과 코드북의 코드워드들 중에서 가장 비슷한 것을 찾아준다. 한 이미지 특성이 코드워드1과 가장 유사하면 코드워드1 빈(bin)을 하나 채워준다. 이런식으로 이미지 내의 특성들을 코드워드들과 매칭해주면 히스토그램이 만들어진다. 히스토그램을 보면 각 이미지마다 어떤 코드워드들이 많이 포함되어 있는지를 알 수 있다.

 

 

이 코드북을 이용해서 코드북을 만들 때 사용되지 않았던 이미지의 히스토그램도 구할 수 있다. 우선 새 이미지에서 특성을 도출한 다음에 마찬가지로 그 특성들과 가장 유사한 코드워드들을 찾아줘서 히스토그램을 만들어준다.

 

 

이 테스트 이미지의 히스토그램을 코드북을 생산할 때 사용한 훈련 이미지들의 히스토그램과 비교함으로 테스트 이미지가 어떤 클래스에 속하는지를 분류해낼 수 있다. 이 경우에는 자전거 이미지의 히스토그램과 가장 유사함으로 자전거 클래스에 속한다고 판단할 수 있다. 

 

 

<참고자료>

[1] https://darkpgmr.tistory.com/125, 다크프로그래머 "Back of Words 기법"

[2] https://en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision, 위키피디아 "Back-of-words model in computer vision"

[3] https://kr.mathworks.com/help/vision/ug/image-classification-with-bag-of-visual-words.html, Mathworks documentation "image classification with bag of visual words"