이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

Vector of Locally Aggregated Descriptors (VLAD) 소개

  • 2023.03.14 15:33
  • Deep Learning/영상처리
반응형

VLAD는 BOF 기반(BoVW) 방법론들을 개선하여 더 적은 연산과 메모리 사용량으로 높은 성능을 낼 수 있는 handcrafted feature descriptor 생성 방법으로, Aggregating local descriptors into a compact image representation라는 논문에서 소개되었다.

이전 BOF 기반 방법과 유사하면서도, Histogram을 이용하지 않고 SIFT 등으로 뽑아낸 descriptor vector를 누적하는 방법을 사용하여 성능이 향상되었다.

VLAD를 소개한 논문에서는 이외에도 quantization 등의 방법을 통해 연산량과 메모리 사용량까지 줄였는데, 이번 글에서는 VLAD를 통한 이미지의 표현 방법에 집중해보겠다.

Extracting Local Descriptions

VLAD의 실행 과정은 전체적으로 BOF와 비슷하니, 필자의 이전 글을 참고하여도 좋다.
그래도 한번 다시 소개를 해보자면, 먼저 이미지에서 특징점들을 추출해준다.

Dense SIFT와 같은 방법을 이용하여, 이미지에서 Local Descriptor라고 하는 특징점들을 추출한다.

이미지의 각 영역은 $D$ 사이즈의 벡터로 표현되어 한 개의 이미지는 $(m, D)$ 형태의 행렬로 변환된다.
($m$은 이미지에서 추출한 descriptor의 갯수이다.)

 Codebook Generation

전체 이미지 $n$개에서 local descriptor들을 추출하여 $(n, m, D)$의 데이터를 얻었다.
이제 뽑아낸 특징들을 가장 잘 대표하는 $k$개의 군집들을 K-means 군집화를 통해 생성한다.

이렇게 $(k, D)$ 크기의 codebook을 얻었다.

Description - Codebook Accumulation

이제 한 이미지를 VLAD Description으로 변환할 차례이다.
우리는 한 이미지에서 추출한 $(m, D)$ 형태의  local description들과, $(k, D)$ 형태의 codebook을 가지고 있다.

먼저, 이미지에서 추출한 $m$개의 descriptor들을 가장 유사한 codebook 속 centroid와 매칭한다.
(그 다음 매칭들의 갯수를 세어 histogram을 만들면 BoVW 방법이다.)

그 다음, 매칭된 descriptor들과 codebook 사이의 차이(잔차)를 구한다.

이 잔차들을 모두 더하여 $(k, D)$ 형태로 만든다.
예를들어, 어떤 descriptor $(d_1 = [1, -4], d_4 = [2, 1])$들이 codebook 속 centroid $c_{19} = [1, 1]$와 매칭되었다면, 최종 image descriptor의 $19$번째 값은 $v_{19} = [1-1+1-2, 1+4 + 1-1] = [-1, 5]$이 된다.

이렇게 생성된 $(k, D)$ 형태의 행렬을 flatten하여 $k\times D$ 크기의 벡터를 만든다.

L2 Normalization

마지막으로 벡터를 L2 정규화하여 scale을 조정해준다.

VLAD Descriptor로 이미지를 표현하는데 성공하였다!

파이썬 코드

def VLAD(descriptor, codebook):
    """
    :param descriptor: 이미지 한 장에서 추출한 (m, D) 크기의 local descriptors
    :param codebook: 학습 데이터로 생성한 (k, D) 크기의 codebook
    :return desc: 생성된 (k, D) 크기의 VLAD description
    """
    desc = np.zeros([codebook.shape[0], descriptor.shape[1]])  # (k, D) -> (200, 1024)  # [k, D] 사이즈의 tensor 생성
    index = vq.vq(descriptor, codebook)[0]  # 각 local descriptor와 유사한 visual word 매칭 (vq 라이브러리 사용)

    for i, d in enumerate(descriptor):
        desc[index[i]] += codebook[index[i]] - d  # 각 visual word에 매칭된 local description들의 잔차를 누적
    
    return desc / np.linalg.norm(desc, 2)
반응형

'Deep Learning > 영상처리' 카테고리의 다른 글

Bag of Visual Words (BoVW)  (2) 2023.03.10
이미지 변형 (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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Bag of Visual Words (BoVW)

    Bag of Visual Words (BoVW)

    2023.03.10
  • 이미지 변형 (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
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바