[Segmentation as selective search for object recognition, 2011] 논문에서 등장한 방법론이다.
R-CNN, SPP-Net 등 초기 CV 모델들에 사용되었다.
Exhaustive Search에 “Segmentation”을 결합해 개선한 방법이다.
Algorithm
"Efficient Graph-Based Image Segmentation" (Felzenszwalb & Huttenlocher, 2004) 논문의 방법론에 따라 이미지에서 segment를 나눈다.
이미지의 각 pixel을 node로 간주, pixel 사이에 edge를 생성하여 그래프 구성
각 edge에는 연결된 pixel 간의 색상, 밝기 차이 등의 정보를 바탕으로 가중치 부여
이미지의 모든 edge 가중치를 오름차순으로 정렬
초기 segment 설정 : 초기엔 모든 pixel이 모두 서로 다른 segment (segment 집합을 C라 하자.)
정렬된 edge를 순차적으로 순환하며 아래 과정을 반복
if
(edge와 연결된 두 픽셀이 서로 다른 segment이고) AND
(edge의 가중치 < 두 segment의 내부 차이(internel difference) 중 최솟값) : 두 segment를 병합
else
: continue
최종적으로 크기(segment를 구성하는 node의 개수)가 일정 threshold 이하인 segment는 인접한 segment와 병합
Segments $R$ 집합에 대해 아래 알고리즘을 수행한다.
이웃하는 모든 두 segment 조합에 대해 similarity 를 연산한다. → $S$
while $S\neq \empty$
[Figure 2]
[Figure 2]
실제 구현에서는 $S\neq \empty$ 를 사용하지 않음. 적절한 수준에서 region proposal을 활용.
2번을 수행할 때마다 $r_t$ 들을
Faster R-CNN 논문에서 등장한다.
Anchor Box 개념을 도입해 multi-scale problem(물체가 다양한 크기를 갖는 문제)을 해결하려 한다.
미리 설정한 scale로 다양한 형태의 anchor box를 정의한다. → k
개의 anchor box 미리 정의
[kernel academy - CV Basic]
Algorithm
Feature Map을 입력으로 받는다.
Sliding window 방식으로 Feature Map을 순환하며 아래를 반복한다.
각 window에서 k개의 anchor boxes를 추출한다.
각각의 anchor box에 대해 shared FC-Layer (k개의 anchor box 추출 과정에서 FC-layer는 가중치를 공유한다)를 통해 물체가 있을 확률(yes/no : Objectness Score)과 물체의 RoI 위치(x1,x2,y1,y2 : Bbox Regression)를 출력한다.
→ 총 2k
개의 probabilities와 4k
개의 coordinates 출력
2번을 수행하면 수많은 RoI가 생성된다. 이를 아래의 과정을 통해 가장 확률이 높은 RoI만 최종 출력한다.
N
개의 RoI만 선택3번 결과의 RoI와 Gound Truth 비교를 통해 물체가 있을 확률에 대한 BCE-Loss 와 bbox regression loss를 계산해 RPN의 가중치를 업데이트한다.