👯

Re-ranking Person Re-identification with k-reciprocal Encoding

Tags
Re-identification
Created
2021/01/29 06:46
Publication
CVPR'17
Rate
3.5
Source
https://arxiv.org/abs/1701.08398
Summary
Person re-identification 태스크를 위한 image retrieval의 성능을 높이기 위해 context를 고려하여 feature distance를 업데이트하는 방법을 제안하는 페이퍼이다. 이 context로 reciprocal neighborhood를 제안하는데, 서로가 서로에게 가장 가까운 이웃일수록 같은 identity일 가능성이 높다는 가정 하에 이 정보를 반영하여 image retrieval 수행하고자 한다. (상세 페이지 참고)
Person re-identification 태스크를 수행할 때, 일반적으로 같은 identity의 feature distance가 그렇지 않은 identity의 feature distance보다 상대적으로 가깝기를 기대한다. 이와 관련하여 위와 같은 조건을 최대한 잘 반영하는 feature extractor를 학습하는 metric learning 방법이 주된 연구 방향이 되고는 하지만, 또 하나의 주요한 연구 방향은 바로 추출된 feature embedding으로부터 가장 적절한 distance를 뽑아내는 방법이다.
보통은 이런 distance로 그냥 간단하게 Euclidean distance나 cosine distance를 사용할 수 있다. 하지만 feature extractor가 완벽하지 않은 이상 이러한 distance를 통한 retrieval은 노이즈를 포함하기 마련인데, 이러한 노이즈를 feature embedding의 context를 이용하여 최소화하고자 하는 것이다. 논문에서는 이러한 context를 반영하는 방법으로 k-reciprocal neighbor를 활용한다.
k-reciprocal neighbor이라 함은, 간단히 말해 서로를 top-k list 안에 포함하는 이미지들의 집합이라고 볼 수 있겠다. 즉 직관적으로 서로가 서로의 k-nearest neighbor(i.e. top-k list)에 포함되어야 진짜 true match라고 가정한 것이다. (다시 말해 한 쪽만 포함된다면 hard negative pair라고 볼 수도 있겠다.) 논문에서는 이러한 k-reciprocal neighbor를 벡터로 encoding한 후, 이러한 encoding의 Jaccard distance를 구하고, 이러한 Jaccard distance와 원래 distance의 weighted average를 최종 distance로 사용한다.
먼저 image pp에 대한 k-nearest neighbor를 N(p,k)N(p, k)라고 정의하자. 그러면 k-reciprocal neighbor는 다음과 같이 정의할 수 있다.
R(p,k)={gi(giN(p,k))(pN(gi,k))}R(p, k) = \{ g_i | (g_i \in N(p, k)) \wedge (p \in N(g_i, k)) \}
위에서 간단히 설명한 대로, pp의 k-nearest neighbor 중에서 pp를 k-nearest neighbor로 포함하는 이미지 gig_i들의 집합이다. \wedge는 짐작컨대 그냥 and 기호이다. 하지만 조도나 화질, 각도 등의 camera variation으로 인해 여전히 이러한 k-reciprocal neighbor이 positive image를 잡아내지 못할 수 있다. 이러한 문제를 해결하기 위해 다음과 같이 qR(p,k)q \in R(p, k)의 k/2-reciprocal neighbor를 보다 robust한 집합 R(p,k)R^*(p, k) 에 추가한다.
R(p,k)R(p,k)R(q,k/2)s.t. R(p,k)R(q,k/2)23R(q,k/2)qR(p,k)R^*(p, k) \leftarrow R(p, k) \cup R(q, k/2) \\{}\\ \text{s.t. } |R(p, k) \cap R(q, k/2)| \geq \frac{2}{3} |R(q, k/2)| \\{}\\ q \in R(p, k)
pp의 k-reciprocal neighbor R(p,k)R(p, k)에 속한 이미지 qq의 k/2-reciprocal neighbor R(q,k/2)R(q, k/2)R(p,k)R(p, k)와 상당히 비슷하다면(겹친다면), 이러한 set R(q,k/2)R(q, k/2)를 positive sample로 간주하는 것이다.
이제 위에서 구한 k-reciprocal neighbor R(p,k)R^*(p, k)의 Jaccard distance를 구해보자. 먼저 가장 기본적인 형태의 Jaccard distance는 다음과 같이 구한다.
dJ(p,gi)=1R(p,k)R(gi,k)R(p,k)R(gi,k)d_J(p, g_i) = 1 - \frac{|R^*(p, k) \cap R^*(g_i, k)|}{|R^*(p, k) \cup R^*(g_i, k)|}
하지만 이러한 형태의 Jaccard distance는 1) 매번 union set과 intersection set을 구해야 하기에 computationally intensive하고, 2) feature distance와 무관하게 모든 sample을 동일하게 취급하기 때문에 정보의 손실이 발생하고, 3) 단순히 contextual information만 고려하는 것이 아무래도 문제가 있을 수 있다. 따라서 이를 해결할 수 있는 다른 효율적인 방법을 찾아보자.
먼저 첫 번째 문제를 해결하기 위해 k-reciprocal neighbor를 다음과 같은 encoding을 수행한다.
Vp,gi={1if giR(p,k)0otherwise V_{p, g_i} = \begin{cases} 1 & \text{if } g_i \in R^*(p, k) \\ 0 & \text{otherwise} \end{cases} 
이런 식으로 R(p,k)R^*(p, k) VpV_p 와 같이 encoding할 수 있다. 이제 두 번째 문제를 해결하기 위해 다음과 같이 Gaussian kernel을 이용하여 encoding을 변형한다. (dd 는 그냥 두 feature 사이의 거리이다.)
Vp,gi={exp{d(p,gi)}if giR(p,k)0otherwiseV_{p, g_i} = \begin{cases} \exp{\{-d(p, g_i)\}} & \text{if } g_i \in R^*(p, k) \\ 0 & \text{otherwise} \end{cases}
이제 이를 이용하여 Jaccard distance를 다음과 같이 더 효율적으로 구할 수 있게 된다. 잘 생각해보면 동일한 연산인 것을 알 수 있다.
dJ(p,gi)=1jmin(Vp,gj,Vgi,gj)jmax(Vp,gj,Vgi,gj) d_J(p, g_i) = 1 - \frac{ \sum_j{\min{(V_{p, g_j}, V_{g_i, g_j})}} }{ \sum_j{\max{(V_{p, g_j}, V_{g_i, g_j})}} } 
또한 robustness를 위해 다음과 같은 local query expansion을 수행한다. 쓰여 있는 바로는 query와 gallery 모두에 이러한 expansion을 하는 것 같다. k-nearest neighbor가 same identity라고 가정하고 이러한 neighbor의 feature들을 aggregation한 것을 query feature로 사용하는 것이다. (근데 nearest neighbor이면 자기 자신은 포함되지 않은 set일 텐데 이는 그러면 사용하지 않게 되는 걸까? 코드를 봐야 할 것 같다.)
Vp=1N(p,k)giN(p,k)VgiV_p = \frac{1}{|N(p, k)|} \sum_{g_i \in N(p, k)}{V_{g_i}}
이제 마지막으로 세 번째 문제를 해결하기 위해 다음과 같이 weight parameter $\lambda$를 이용하여 최종적인 distance를 구한다.
d(p,gi)=(1λ)dJ(p,gi)+λd(p,gi)d^*(p, g_i) = (1 - \lambda) d_J(p, g_i) + \lambda d(p, g_i)
당연히 λ=0\lambda = 0일 경우 contextual distance만 고려하게 되고, lambda=1lambda = 1일 경우 original distance만 고려하게 된다.
다양한 데이터셋에 대한 실험 결과를 보았을 때, gallery set에 positive image가 한 개밖에 없는 경우를 빼고는 모두 유의미한 정확도의 향상을 보여주었다. 실제로 회사에서 사용하는 모델에 적용해보았을 때도 개선된 모습을 보여주었다. 다만 계산 복잡도가 증가하는 것을 어쩔 수 없을 것 같다.
E.O.D.