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에도 그대로 응용된 사례가 있다.
  • 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이니 뭐... 당연한듯)