FaceNet
ph
FaceNet: A Unified Embedding for Face Recognition and Clustering
- CVPR2015
- 128 byte feature를 뽑아낸다. 이걸로 verification(같은 얼굴이냐)하거나 recognition(누구냐)하든 clustering(비슷한 얼굴끼리 묶음)하든 마음대로.
- 3개의 이미지를 입력으로 받음. 2개는 같은 얼굴, 하나는 다른 얼굴.
- 거리는 LMNN(large margin nearest neighbor, ref.2009 paper)로.
- Semidefinit programming이용한 거라는데 뭔가 디게 복잡해보인다. #TODO
- Mahalanobis distance matrix배우는 과정으로 대강 이해.
- Triplet Loss: \(f\)를 \(d\) dimension embedding이라고 할 때, triplet loss는 margin을 고려한 2-norm error의 차. $$ \large \Sigma[ ||f(a) -f(p)||^2 - ||f(a)-f(n)||^2 + \alpha ]_+$$ \(a,p,n\)은 triplet, \(\alpha\)는 margin. \(||f(x)||=1\)로 normalized.
- 질문/답변 참조. 같은 넷에 세번 통과 후 gradients의 평균(?). 세개(=세번)의 loss가 있기 때문에 triplet loss.(?)
- 이것을 줄이는 것이 learning의 목표
- 이 세개를 어떻게 선택할것인지도 중요하다— 쉽게 통과하는 세트는 별로 기여도가 없다.
- 이런 어려운 set은 mini-batch안에서 일일이 찾는다.(online) cf. offline: find triplets every n steps using the most recent network and computing argmin/argmax on a subset of the data
- Person re-identification에도 그대로 응용된 사례가 있다.
- 거리는 LMNN(large margin nearest neighbor, ref.2009 paper)로.
- anchor-positive distance
- anchor와 positive exemplar의 거리. 위 식에서 a가 anchor, p가 positive exemplar
- negative를 너무 어려운것을 선택하면 collapsed model(\(f(x)=0\))이 된다. = bad local minima
- 그래서 semi-hard를 선택함.( margin(\(\alpha\))을 없앤것) $$\large ||f(a) - f(p)||^2 < ||f(a)-f(n)||^2 $$
- batch size = 1800정도가 가장 괜찮았고, 각 class마다 40개 이상씩 포함되게 함
- CPU로 1000~2000시간정도. lr=0.05, α=0.2, training data 100~200M(8M identities, LFW & Youtube Faces)
- 두가지 모델로 실험해봄. 가벼운것 하나 무거운것 하나
- same and different
- 220x220에서 학습되었지만 120x120까지 거의 성능이 저하되지 않았고 80x80까지도 상당히 정확했다.
JPGE압축퀄리티 20까지도 괜찮았다.
- embedding을 256dim으로 바꾸어도 성능의 향상이 없었으며, 그 이상 늘리면 성능이 저하된다. (dim을 늘리려면) 더 많은 데이터가 필요할 것이다. 64로 줄여도 성능의 저하가 크지 않았다(87.9→86.8). Refer Table 5. Embedding Dimensionality
- Table 6. Training Data Size
2.6M | 76.3% |
26M | 85.1% |
52M | 85.1% |
260M | 86.2% |
- clustering도 상당히 잘 되는듯 했다. (euclidean이니 뭐... 당연한듯)