[Paper Review] Batch Feature Erasing for Person Re-identification and Beyond

Abstract

Person re-identification을 위해서 Batch Feature Erasing(BFE) Network를 제안한다. ResNet-50을 backbone으로 사용하면서, 2가지의 branch를 두는데 하나는 conventional global branch이며 다른 하나는 feature erasing branch이다. Feature erasing branch에서 BFE 를 쓰게되는데, 이는 하나의 배치에서 모든 feature map의 똑같은 영역을 랜덤하게 지우는 것이다.
Network는 두가지 branch에서 나온 features들을 concat하여 Person re-identification하게 된다.

Introduction

 대부분의 Person re-identification문제는 coarse partition이나 attention selection network를 이용하여 더 나은 feature vector 를 추출하는 method였다. 본 논문에서는 DropBlock(https://arxiv.org/abs/1810.12890)와 비슷한 processing 방식을 채택하는데, DropBlock의 경우 spatially 연관이 있는 features들을 버리는 반면, BFE는 batch 내의 모든 이미지의 동일한 부분이 crop된다. 직관적으로 생각해보면 머리와 다리, 가방과 같은 feature들이 지워진 상태에서 나머지 features에 대해 더 좋은 representational vector를 학습할 수 있게 될 것이다.

BFS는 triplet loss, batch hard triplet loss 등 여러 가지 loss function에 대해서 metric learning 할 수 있도록 하는 좋은 training strategy라고 소개하고 있다.

Problem Formulation

 Person re-identification 은 query에 대해서 가장 유사한 이미지를 찾는 image retrieval problem중의 하나이다. 이러한 retrieval 문제는 embedding을 output으로 내놓는 function f와 metric function D를 이용하여 풀 수 있다. 구체적으로, f는 input image x를 고차원의 feature vector f(x)로 mapping해주는 것이고 D는 두 embedding 사이의 유사도를 측정하는 metric함수이다.
 본 논문에서 D는 Euclidean distance를 사용하였고, f는 netural network를 통해 학습된다고 한다.
 Dataset의 경우 person re-ID dataset을 이용하는데 이 dataset을 X라고 하면 X 는 Xtrain, Xtest로 구성되어지고 Xtest는 또 다시 Xquery와 Xgallery로 나뉘어 진다. 이 때, Xtrain은 Ctrain개의 class를 가지고 있고, Xtest는 Ctest개의 클래스를 가지고 있다. Xtrain과 Xtest사이에 겹치는 클래스는 존재하지 않는다.
 Xquery의 경우 각 사람마다 challenging한 query image를 모은 test dataset이며 Ctest개의 클래스로 구성되어진다. Xgallery의 경우 Xquery를 제외한 나머지 Xtest dataset에 해당된다. 이 또한 Ctest개의 클래스로 구성되어진다.
 Xquery의 각 이미지 마다 embedding vector 를 neural network를 통해 계산을 하고 이를 KNN 알고리즘을 통해 query에 대한 결과를 내놓는다.
 보통은 KNN알고리즘을 써서 똑같은 사람에 해당하면 correct하다고 하지만 여기서는 똑같은 사람에 해당하고 camera ID가 달라야 correct하다고 정의하였다.


Batch Feature Erasing Network

 

다른 re-ID Network처럼 BackBone Network로 Resnet-50을 사용하였고 다른 점은 ResNet-50 stage 4(마지막 stage)의 시작단계에서 down-sampling을 하지 않았다는 점이다. 이로 인해, 2048 x 24 x 8의 feature를 얻는다.

본 논문에서 ResNet-50 Baseline을 Backbone Network + global branch 라고 칭한다. Global branch에서는, stage 4 이후에 global average pooling을 통해 2048 차원의 feature vector를 얻고 1 x 1 convolution을 통해 512 차원으로 줄인다음에 BN, RELU를 거쳐 triplet loss와 softmax loss를 계산하여 학습이 진행된다고 한다.

Batch Feature Erasing Layer의 경우 Backbone network에서 나온 feature tensor T를 random하게 배치내의 모든 이미지에 대해서 동일한 영역을 지워 T'를 만들어낸다. 구체적인 algorithm은 아래와 같다.


rh와 rw값은 semantic한 data를 충분히 cover할 수 있을만큼 커야한다고 한다.
이러한 과정을 거쳐서 만들어진 T'를 global max pooling 하여 2048 차원의 feature vector가 생성되고, 이를 1 x 1 convolution하여 1024차원으로 줄여서 triplet, softmax loss를 계산하였다고 한다. (Global average pooling을 사용하였더니 성능이 안좋아져서 global max pooling을 하였다고 한다)

최종적으로, 보행자 이미지(input image) 에 embedding vector는 global branch 와 feature erasing branch로 부터 나온 feature를 concat하여 얻을 수 있다고 한다.

* Global branch 는 다음과 같은 의의가 있다고 한다.
1. global feature representation을 제공한다.
2. Feature Erasing Branch 를 학습하는데 supervise한다.

* BFS layer는 다음과 같은 의의가 있다고 한다.
1. BFE layer는 parameter free 하며 network size를 증가시키지 않는다. -> 왜 그런지는 잘 모르겠다. 다른 Network 구조는 multi branch를 사용했는데 우리는 branch 를 2개밖에 안써서 상대적으로 parameter free하다는 건 지 헷갈림.
2. re-ID 말고도 다른 metric learning에도 사용할 수 있다.
3. BFE hyper parameter를 바꾸는 것은 network 구조를 바꾸지 않고도 할 수 있다.

* ResNet bottleneck block을 사용한 것은 network 수렴에 많은 도움을 주었다고 한다.

Loss Function

 loss 함수를 소개하기 앞서 background로...
- Batch hard triplet이란 무엇인가?

Re-identification해야하는 사람이 P명, 각 사람은 K개의 이미지를 가지고 있다고 가정해보자.
P명중에 한명을 고르고, K개중에 하나를 골라서 이를 Network의 input으로 넣어주면 embedding이 나오게 된다. 이 Embedding과 가장 distance가 큰 Positive와 가장 작은 Negative를 고르는 것이 batch hard triplet이다. 총 가능한 triplet의 개수는 PK개 이다.

출처 : https://omoindrot.github.io/triplet-loss

 자,  loss function은 2개의 브랜치에서 나온 soft margin batch-hard triplet loss와 softmax loss의 합으로 설정했다.

soft margin batch - hard triplet loss 는 아래와 같이 정의 된다.
 
Batch hard loss는 아래와 같이 정의된다.


여기서 P는 사람(class) 수 이고 K는 각 사람당 image 수이다. 따라서 하나의 배치 안에는 P X K개의 triplet이 가능하다. 하나의 anchor image에 대해서 같은 사람의 image중 euclidean distance가 가장 큰 것을 선택하고 anchor image와 다른 사람의 image중 euclidean distance가 가장 작은것을 선택하여 빼주는 것이 batch hard loss이다. 이렇게 해서 loss를 minimize하게 되면 anchor와 가장 거리가 먼 positive는 거리를 좁히려고 하고, anchor와 가장 거리가 가까운 negative는 거리를 늘리려고 하면서 학습이 진행될 것이다.
 이 과정을 batch 내의 모든 triplet에 대해서 적용하여 summation 해주면 lSBH가 된다.

질문: 그럼  global branch 에서 나온 loss + BFE 에서 나온 loss 해주면 최종 loss가 나와서 이를 minimize하여 end-to-end로 학습하는 것인지? 아니면 branch별로 학습을 해주어야 하는 것인지?





댓글

  1. https://medium.com/@fromtheast/implement-fit-generator-in-keras-61aa2786ce98
    Memory efficient 하게 학습하기
    : 전체 파일path list에 대해서 generator에서 batch별로 img 읽어서 처리하도록 함

    답글삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제

댓글 쓰기