Bag of Visual Words (BoVW)
Bag of Visual Words는 딥러닝 이전 컴퓨터 비전 분야에서 흔히 활용되던, handcrafted feature 기반 방법론이다.
원래 NLP 분야에서 활용되던 Bag of Words(BoG) 기법에서 영감을 받은 방법인데, 이해가 쉬워서 먼저 NLP의 원조 BoG 방법을 간단히 소개해보겠다.
예를들어, 어떤 글이 어떤 주제의 이야기를 하고 있는지 알고 싶다고 하자. 글의 단어들(Words)이 등장하는 빈도를 세어보면, 대략 어떤 이야기를 하고 있는지 유추할 수 있다.
"메모리", "공간 복잡도", "컴퓨팅", "계산" 등의 단어가 높은 빈도로 등장한다면 어렵지 않게 글의 주제가 컴퓨터임을 알 수 있을 것이고, "캔버스", "유화", "구도", "추상화" 등의 단어가 자주 등장한다면 글의 주제는 예술사임을 알 수 있을 것이다.
BoG는 이렇게 글에서 자주 등장하는 몇 개의 단어 모음(Bag of Words)를 만들어, 글을 이 단어들의 등장 빈도 histogram으로 표현하는 방법이다.
Bag of Visual Words
BoVW는 단어들을 사용하는 NLP 방법 대신, 컴퓨터 비전에 적용하기 위해 어떤 시각적 특징들의 모음(Bag of Visual Words)을 만들어 이미지들을 이 특징들의 histogram으로 표현한다.
물론 이미지에는 완전히 똑같은 특징이 여러번 등장하는 일은 잘 없기 때문에, K-평균 군집화를 통해 대표적인 특징들을 모아 활용한다.
물론 이미지에는 완전히 똑같은 특징이 여러번 등장하는 일은 잘 없기 때문에, K-평균 군집화를 통해 대표적인 특징들을 모아 활용한다.
구체적으로 이미지 분류를 위한 BoVW가 어떻게 수행되는지, 하나하나 살펴보자.
Image classification using BoVW
- Feature Extraction: 이미지들로부터 feature들을 추출한다.
- Clustering: 추출된 feature들을 유사한 feature끼리 군집화한다.
- Codebook Generation: 2.에서 찾아낸 major feature들로 구성된 codebook을 만든다.
- Image histogram Generation: 각 이미지를 3.에서 만든 codebook에 속한 feature들의 histogram으로 나타낸다.
- Classfication: SVM 등의 분류기에 histogram을 투입하여 분류를 수행한다.
Feature Extraction
먼저 이미지에서 feature를 추출해야 한다.
이전 글들에서 소개한 SIFT과 같은 방법을 이용해 특징점들을 추출할 수 있다.
이때, 이미지에서 blob detection을 수행하여 특징적인 구간에서만 feature를 추출하는 SIFT보다 이미지 전체 영역에서 특징점을 추출하는 Dense SIFT가 더욱 효과적이다.
이는 Dense SIFT가 말 그대로 이미지 전체 영역에서 고정된 수의 특징을 추출하지만, SIFT는 이미지에 특징적인(구체적으로 blob 형태의) 구간이 많으면 특징을 많이 추출하고 아니라면 적게 추출하기 때문이다.
K-Means Clustering & Codebook Generation
K-means 군집화를 이용하여 유사한 특징점들을 군집화한다.
생성된 K개의 군집들을 대표하는 centroid 특징점들을 기준으로 Code book을 만든다.
Image Histogram Generation
각 이미지를 codebook에 있는 특징들의 등장 빈도, 즉 histogram으로 변환한다.
이미지는 codebook의 크기 $n$ 크기의 벡터가 된다!
Classification
SVM, Random Forest 등을 이용해 분류를 수행한다.
Spatial Pyramid Matching
BoVW 방법은 영상을 벡터화하는 유용한 방법이지만, 이 과정에서 각 feature들의 위치 정보가 소실되는 문제가 있다.
이를 극복하기 위해, Spatial Pyramid Matching 방법이 제안되었다.
이미지를 Histogram으로 변환하기 전에, 이미지를 $1\times 1, 2\times 2, 4\times 4$와 같이 여러가지 scale로 나눈다.
나누어진 격자별로 따로 histogram을 생성한 후, 이 histogram pyramid를 이용하여 분류를 수행하는 것이다.
이미지의 각 영역 별로 histogram을 비교하기 때문에, 더욱 상세한 비교가 가능하지만, 그만큼 연산량이 늘어난다.
References
'Deep Learning > 영상처리' 카테고리의 다른 글
Vector of Locally Aggregated Descriptors (VLAD) 소개 (0) | 2023.03.14 |
---|---|
이미지 변형 (Image Transformation) (1) | 2023.03.09 |
SIFT: Scale Invariant Feature Transform을 이용한 Feature Matching (0) | 2023.03.08 |
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection (0) | 2023.03.08 |
코너 검출 (Corner Detection) (0) | 2023.03.08 |
댓글
이 글 공유하기
다른 글
-
Vector of Locally Aggregated Descriptors (VLAD) 소개
Vector of Locally Aggregated Descriptors (VLAD) 소개
2023.03.14 -
이미지 변형 (Image Transformation)
이미지 변형 (Image Transformation)
2023.03.09 -
SIFT: Scale Invariant Feature Transform을 이용한 Feature Matching
SIFT: Scale Invariant Feature Transform을 이용한 Feature Matching
2023.03.08 -
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection
2023.03.08