2021/07/27 추가

 detector(pretrained된 retinaface ) 이용해서 loose crop을 만들고 meta 데이터 만들고 하였으나
469375개의 이미지 중 detector에서 못잡는 이미지 533개, conviction score 0.9이하인 이미지가 16155로 잘 잡지못함.

심지어 메타데이터에서 바운딩박스 좌표로 도움을 주었는데도... 당연한 결과로 1:1 verification에서 TAR@FAR=10^-4이 92를 넘지 못하여 찾아보던 중 loose crop 이미지를 배포하는 링크가 한달전에 생김...

 

ijb-c를 사용하고싶으신분은 NIST에 Request form 작성한 후 아래사이트에서 다운받아 사용하면 될듯...
단점은 baidu link만 남아있어서 baidu 아이디가 필요

https://github.com/deepinsight/insightface/tree/master/recognition/_evaluation_/ijb

 

GitHub - deepinsight/insightface: State-of-the-art 2D and 3D Face Analysis Project

State-of-the-art 2D and 3D Face Analysis Project. Contribute to deepinsight/insightface development by creating an account on GitHub.

github.com

 

동기

얼굴인식 연구를 하면서 벤치마크를 구성하는데 생긴 ISSUE 사항들과, 고민하여 얻은 해결책을 공유하고자 적습니다.

보통 LFW 계열 벤치마크(CALFW, AgeDB, CFP 등)은 Train 코드상에 구현되어있어 따라하기 쉬운데 IJB-C는 코드상에서 meta data를 만들어서 사용하기도하고 데이터셋 자체가 template, media등 처음보는 용어들이 많아서 따라하기 어렵더라구요. 

 

ArcFace 논문 저자인 InsightFace의 github 페이지에도 저와 같은 문제로 고민하시는 분들이 많은것 같아 ISSUE 사항에 적긴 했는데  생각보다 공감도 많이 받는것 같아서(따봉5개를 받았...) 블로그 글에도 공유합니다.

 

이슈 링크 : 

https://github.com/deepinsight/insightface/issues/556

 

IJBC Evaluation metadata · Issue #556 · deepinsight/insightface

Hi, First of all you guys are doing excellent work. Many thanks for this great work. I was looking specifically for IJBC evaluation and that brought me to your repository. I see some information he...

github.com

 

사용법

1. NIST에게 데이터셋 요청을 한 후 권한을 받는다.

https://www.nist.gov/itl/iad/ig/ijb-c-dataset-request-form

 

IJB-C Dataset Request Form

[UPDATE]: The IJB-C protocols folder has been updated.  It includes updated protocol files in a structure that we hope provides b

www.nist.gov

위 사이트에 접속한후 회원가입 하고 리퀘스트를 보낸후 데이터셋과 메타데이터를 받는다.

참고로 IJB-A에 추가해서 업데이트 한게 IJB-B, 또 추가한게 IJB-C 이므로 IJB-C만 사용 하면 된다.

 

2. Dataset 내부에 있는 Meta데이터를 살펴본다.

Dataset 내부에 img, frame 말고도 많은 종류의 meta데이터가 있는데 확인해보면

사용하는 용어가 tid, mid, sid가 있다는것을 알 수있다.

template 이라는 용어가 헷갈릴 수 있는데 그냥 IJB는 template 기반 벤치마크로써 verification 하는 match를 tid로 나타내는 구나 라고 생각하면 된다. 각각의 의미는 다음과 같다.

 

- tid( template id) : match나 gallery, probe등 list를 구성하는데 쓰이는 id

              ex. A의 B에서 찍힌 사진과 C의 D에서 찍힌사진을 비교해라 라고 하지 않고  -> tid 3과 tid 5 를 비교해라로                    나타냄. tid3 과 tid5 가 무엇인지는 mapping하는 다른 meta데이터를 통해 접근 가능하다. 

- mid(media id) : 사진(img/frame)을 어떤 소스에서 얻었는지에 대한 정보. ->sighting id와 동의어 이다.

- sid(subject id) : identification에서 클래스에 해당. 신원(identity)라고 생각하면 된다. 

* 같은 sid에 여러 tid가 있을 수 있고 같은 tid에 여러 mid가 있을 수 있다.

 

용어정리는 이정도로 하고 다시 사용하는 meta데이터로 돌아오면, 

IJB-C 1:1 evaluation에 사용하는 파일은 다음과 같다.

- 'test1/enroll_templates.csv' =enroll file의 t

- 'test1/verif_templates.csv'

- 'test1/match.csv','ijbc_metadata_with_age.csv' 

또 IJB-C 1:N evaluation에 사용하는 파일은 다음과 같다.(정확한 파일명은 수정예정)

- /gallery  G1.csv

- /gallery  G2.csv

- /Probe_mixed.csv

 

3. IJB-C evaluation 에서 사용하는 Meta data + loose crop을 만들어 준다.

Insight Face에서 제공하는 IJB-C evaluation code는 크게 세가지 이다.

- evaluation/IJB/IJB_11 : match에 해당하는 모든 1:1 verification을 수행한 후 roc curve 그려주는 코드

- evaluation/IJB/IJB_1N : gallery와 probe feature 생성 후 top1, top n accurcy와 PAR@FAR을  생성해줌. 

- evaluation/IJB/IJB_evals : third party가 짠 코드로 11과 1N 을 할건지 옵션으로 선택 가능, verbose있어 진행과정 확인                                   하기 편리하고 본인피셜 속도가 빠르다 함. 

나는 IJB_evals이 과정상 11을 무조건 수행하기에 1N 부분을 수정해서 사용하였다.

 

이제 11을 예시로 들어,

코드를 보면 'tid_mid.txt', 'loose_crop', '5pts score.txt' 가 필요하다.

간단히 설명하면

- 'tid_mid.txt' 는 접근할 수 있도록 파일명과 tid, mid를 연결해주는 메타파일

-  'loose_crop'은 dataset의 subset으로 tid_mid의 파일명과 똑같이 구성해 주어야한다. 이름이 loose_crop인 이유는 사용자가 이미지에서 얼굴 부분을 loosely crop해서 구성해서 그렇다 한다. 실제로 model에 넣어주기 위한 전처리(align, crop)은 코드내에서 image를 가져올때 수행한다.

- '5pts score.txt'는 loose_crop 한 이미지에서 detection 알고리즘으로 랜드마크를 추출하여 그 좌표들과 그에따른 confidence score를 파일명과 함께 순서대로 적어놓은 메타데이터 파일이다.

 

여기서 insight face에서 사용하는 'tid_mid.txt'와'5pts score.txt'는 아래 사이트에서 받을 수 있다.

(https://github.com/deepinsight/insightface/tree/master/evaluation/IJB)

 

deepinsight/insightface

Face Analysis Project on MXNet and PyTorch. Contribute to deepinsight/insightface development by creating an account on GitHub.

github.com

하지만, 결국 loose crop이 없어 랜드마크 5pts가 이미지를 어떻게 구성하느냐에 좌표값이 달라지므로 본인이 detector를 사용하여 추출하여야 한다.

디텍터로 랜드마크 추출로 retina Face와 MTCNN을 보통 사용 하는데 아래 코드를 참고하면 편하다.

(https://github.com/urbaneman/Face_crop_align_mtcnn)

 

urbaneman/Face_crop_align_mtcnn

Crop and Align Face by MTCNN. Contribute to urbaneman/Face_crop_align_mtcnn development by creating an account on GitHub.

github.com

본인의 경우 MTCNN코드에서 모델을 RetinaFace로 바꾸어 추출하였다.

 

loose crop의 경우 어떻게 loose하게 할지는 본인의 맘이고 참고할 수 있는 얼굴 바운딩 박스는 레이블링 데이터 ('ijbc_metadata_with_age.csv')를 사용하면 된다. 결과적으로 IJB_11코드에서 align + crop해서 사용하므로  얼굴 Detection이 잘 되어 5landmarks가 잘 뽑힐 정도로 만 crop하면 같은 결과물이 나올것 이다.

 

4. IJB11, IJB1N, IJB_eval을 사용준비 끝!

 

이렇게 연구하고 코드를 만지는 것은 처음이라 저만 어렵게 느껴지는 것일지도 모르지만, 혹시나 저처럼 해매시는 다른 분이 이글을 읽고 도움이 되었으면 하여 올려봅니다. 

 

+If There is person who only uses English and want to know using IJB-C Data set, Plz leave a comment.

Then I will make English Translation version for you :)

E개요

IJB-C Identification code 를 돌려 결과를 확인하는 중 probe, gallery에 대한 개념과 성능 분석에 어려움이 있어 빨리 읽은 논문. 2017 CVPR Biometric 부분.

 

Gallery, Probe 요약사진(학습유무, Gallery포함 유무) : T(known, unknown Training ), S(known, known), K(known, unknown), U(unknown, unknown)

 

항목별 요약

알게된 점을 항목별로 요약하자면 다음과 같고, 용어나 개념에 대한 자세한 설명은 다음 꼭지에서 다룸.

 

(Gallery)

- Gallery는 training data중  인식하고자 하는 인물의 사진들(혹은 임베딩된 feature들)을 담은 집합이다.

- Enrollment는 Gallery를 설정하고 학습하는 과정

(위 사진에서 Training 중 초록색이 Gallery 부분)

 

(Probe)

- Probes는 Identification task를 수행하길 원하는 data

- querying은 probe로 identifcation 하는 과정.

 

(Open Set)

- IJB같은 경우 1:N Identifcation은 closed-set evaluation.

- Gallery에 없는 예외 데이터 처리를 위해선 Open set 에서 rejection/ignore 하는 방법이 필요함

- rejection 방법으로 본 논문에선 세가지 방법을 제시

    1. verification Threshold

    2. linear discriminant analysis(LDA)

    3. extreme value machine(EVM)probability

- 결과적으로, 1은 closed set은 좋지만 open set에선 안좋았다

- 2는K( known unknown)에선 좋지만 U(unknown unknown)에선 안좋았다.

- 3은 K,U 둘다 에서 좋았다. 

 

(성능 비교 포맷)

~보통 verification(선택지가 0/1)의 경우 roc curve를 그리는데 identifcation(선택지가 #class,N개)은 성능평가를 어떻게 해야하나 궁금. 본 논문에선 3가지 방법 활용.

    1. Cumulative match Characteristics(CMC)  curves

    2. Receiver Operating Charcateristics(ROC) curves

    3. Detection and Identification rate (DIR) curves 

            ----> 일반적으로 쓰는 curve는 아닌것같고 Face Recognition handbook에서 나왔다고함.

 

상세, 추가 조사

1. LDA

: 데이터 분포를 학습해 class내 분산은 작게 하면서 class간data들의 평균점을 멀게하는 결정경계(직선)을 찾는 모델

LDA는 데이터 분포에서 분산과 평균거리를 이용하여 결정경계(그림에서 점선)을 찾는 모델

-출처 :

https://velog.io/@guns/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8A%A4%ED%84%B0%EB%94%94-4%EC%9D%BC%EC%B0%A8-LDA-Linear-Discriminant-Analysis

 

[머신러닝 스터디] LDA (Linear Discriminant Analysis)

데이터 분포를 학습해 결정경계를 만들어 데이터를 분류하는 모델(어느 모델이 더 분류가 잘 되었다고 판단할 수 있을까?)두 범주의 중심(평균!)이 서로 멀수록 좋다!두 범주의 분산이 작을수록

velog.io

 

 

2. EVM

Extreme value theory를 이용하여  point별로 distribution추출 후 해당 클래스의 속하는지 확률 구함. 

-출처 : 

https://www.researchgate.net/publication/278969514_The_Extreme_Value_Machine

 

(PDF) The Extreme Value Machine

PDF | This paper provides a novel characterization of the max-margin distribution in input space. The use of the statistical Extreme Value Theory (EVT)... | Find, read and cite all the research you need on ResearchGate

www.researchgate.net

 

3. CMC curve

ROC CMC curve 예시 출처 : https://ieeexplore.ieee.org/document/1544394

CMC(Cumulative Match Characteristic) 곡선 시험이란,「Top N 순위 안에서 인식이 되는가?」를 판정하는 식별 시나리오에서 성능을 분석하는 가장 대표적인 시험방법이다. 이 CMC 곡선은 순위에 대한 함수로서, x축에 순위를 나타내고, y축에는 누적된 인식률을 나타내는 것에 의해, n번째 순위까지의 프로브에 대한 인식률을 확인할 수 있다. 

-출처 :

https://patents.google.com/patent/KR20060068796A/ko

 

KR20060068796A - 얼굴인식 시스템의 성능시험 방법 및 시스템 - Google Patents

얼굴인식 시스템에서 트레이닝 대상이 되고, 성능 시험에서 갤러리가 되는 영상들의 집합인 대상(Target) 집합과 성능 시험에서 프로브가 되는 영상들의 집합인 질의(Query) 집합으로 이루어진 xml

patents.google.com

 

4. ROC curve

정리가 아주 잘되어 있어 출처로 대신함.

x축 : False Positive Rate

y축 : True Positive Rate

-출처 : 

https://angeloyeo.github.io/2020/08/05/ROC.html

 

ROC curve - 공돌이의 수학정리노트

 

angeloyeo.github.io

 

5. DIR curve

Face Recognition 분야에서만 쓰이는 그래프로 보임.

이름에 Detection이 들어가 있지만 본 논문에서 detectionn은 된다고 가정하므로

y축: Identifcation rate

x축: False Alarm Rate(False Positive Rate)

즉  CMC의 x축을 rank가 아닌 FPR로 대체한 그래프 

 

출처

https://ieeexplore.ieee.org/document/6365193?source=post_page--------------------------- 

 

Toward Open Set Recognition

To date, almost all experimental evaluations of machine learning-based recognition algorithms in computer vision have taken the form of “closed set” recognition, whereby all testing classes are known at training time. A more realistic scenario for visi

ieeexplore.ieee.org

 

시작하기 앞서

본 게시물은 인물인식 최신 논문 정리 글로, 이전 논문들을 이해하지 않았다면 이해하기 힘들 수 있습니다.

처음 보신 분들은 Face Recognition/[Paper Review] 글들을 읽은 후에 볼것을 추천드립니다.

시간이 없으신 분들을 위해 아래 인물인식 알고리즘의 트렌드도 정리해 놓았으니 참고하시기 바랍니다. 

https://mic97.tistory.com/20

 

Face Recognition 트렌드 정리

Face Recognition 카테코리 이전 게시글들 에서 정리했듯이, 다음과 같은 트렌드를 보인다. 1. metric-learning problem 기존 classification 에 사용되는 soft max로는 학습한 이후에 새롭게 추가, 축소 되는 클..

mic97.tistory.com

 

 

개요

2019년 CVPR 논문. Face Recognition 성능향상 논문 트렌드중

Margin based Softmax 에 학습에 적절한 HyperParameter(m,s)를 학습과정내에 adaptive하게 설정.

논문 진행 순서로는 

먼저 Cross entropy와 Softmax에 대한 고찰 이후, cos(theta)로 발전(L-Softmax), truthclass에 대한 margin식으로 발전 시킨다음 식을 간추린 후 m과 s에 대해 plot 하여 확인한 경향성과 gradient 분석으로 convergence를 좋게 해줄 수 있도록 m과 s를 다른 파라미터의 식으로 나타낸다 . 이때 fixed와 adaptive parameter 각각 후보군을 정한 후 실험하여 결과를 확인 한다.

 

 

 Loss 고찰

(1). Cross Entropy loss with softmax

 

(2) Softmax식에 집중.  f=x*w

margin based softmax 한정으로 f를 아래 식과 같이 사용. Truth class 일경우에만 magin 적용.

(3) margin based softmax

 

(4) margin을 적용한 cross entropy loss. 정확히는 한 instance에 대한 loss이고 summation을 해야 학습할때 사용하는 loss가 된다.

 

 

Hyper parameter s에 대한 고찰(margin이 없는 식에서)

(5) theta에 따른 P의 범위.

(4)식에서 True class(분모에서 왼쪽항)는 완전히 다 맞추고(theta=0인 경우), Negative class(분모에서 오른쪽항)은 완전히 틀리다고 분리하는 경우(theta=pi/2)일때 lower boundary를 이루고 이와 반대상황 일때 upper bound를 얻는다. 참고로 C는 클래스의 총 갯수로, negative class는 총 C-1개이다. 

다시 loss 식에서 P를 보면, Negative class 부분을 B로 아래식처럼 치환 할 수 있는데,

Negative class를 B로 나타냄

 

학습 중 neagtive class의 mean을 plot해보면  pi/2 근처에 constant하게 분포한걸 확인할 수 있고, negative class 대부분은 정답인 클래스와 similarity가 거의 없다고 생각 할 수도 있다.  그러므로 B를 상수로 생각 할 수 있고 그 값은 아래와 같이 C-1이 된다.

(좌) C=2000일때 s값에 따른 P,(우) C=20000일때 s값에 따른 P

B=C-1로 바꾼 P 식을 C값 두경우와 s값에 따라 plot 하면 위와 같다. s가 작을경우 P를 0에서 1까지 전부 활용하지 못하고, 너무 클경우 각도가 커져도(잘못 추론해도) P=1로써 페널티를 주지 못한다.

 

 

Hyper parameter m에 대한 고찰(scale, s가 없는 식에서)

s에서 했던 고찰과 똑같이 P에서 B=C-1로 고려 후 c값 두경우와 m값에 따라 plot.

margin 추가
(좌) C=2000일때 m값에 따른 P,(우) C=20000일때 m값에 따른 P

m이 클수록 조금만 틀려도(theta가 조금만 높아도) 많은 페널티를 부과하고 feature와 해당하는 class의 weight사이의 각도를 매우 작게끔 학습한다. 이것이 margin based softmax를 사용하는 이유이며 따라서 m은 클수록 좋지만 일정수준 이상의 m은 수렴문제를 발생시킨다.  m이 지나치게 높을경우 theta 가 0과 매우 가까울때를 제외하고 모든 경우에서 loss를 부과하기 때문이다.

 

Hyper parameter m,s 고찰 정리

(1)scale parameter(s)와 margin(m)은 prediction probability(P)에 큰 영향을 미친다. 

작은 s는 P의 maximum value를 제한.

너무큰 s는 모든 P를  1로 만든다.

너무작은 m은 final angular margin을 regularize하는데 충분히 강하지 않음.

너무 큰 margin은 학습의 수렴문제를 일으킨다.

 

(2) m과 s는  cos(theta)에서 P로 매핑하는 함수에 인자로써 영향을 미친다.

구체적으로는, small s와 large m은 theta와 P 함수에서 supervision을 강하게 준다.

반대로, large s 와 small m은 supervision을 약하게 한다.

m과 s가 서로 반대경향으로 P에 비슷한 영향을 주기때문에 하나의 parameter만 조작하여 P를 조절하는것이 가능할것이고, 여기서는 s가 m이 하는 supervision의 역할 말고도 P의 범위도 결정짓기 때문에 m이 아닌 s를 중점으로 실험한다.

 

 

Cosine-based softmax loss with Adaptive scaling, AdaCos

 

Automatically choosing a Fixed scale parameter

m과 s는 같이 P의 영향을 주는데 그 중, m은 P 커브의 shit만 변화시키지만

s는 P의 boundary, P 커브의 curvature도 변화를 주기때문에 계산의 편의를 위해서 원본식에서 m을 제거하고 s만 automatically tune하는것을 목적으로 한다.

 

s의 적절한 값을 찾는 과정은 다음과 같다.

loss를 편미분하여 gradient가 원하는 theta값에따라 적절한값(0과 NAN이 아닌값)안에서 변화시켜주도록 분포를 만들어주면된다. 이때 cross entropy를 미분하게 되면 아래식과 같고 결국 P와 그 미분값에 따라 gradient가 결정된다.

 

앞선 과정에서 P에대한 분포를 알아 봤듯이, s값에 따라 P vs theta 커브의 curvature와 shift가 이동하게 되는데 이것을 조절하여 학습이 잘되도록 theta를 2/pi와 0의 중간지점인 pi/4에서 gradient 최대값을 가지도록 하는 s값을 찾는다.

본 논문에서는 P를 theta에 대하여 두번 미분하여 0이 되는지점을 찾아 P의 theta에 대한 gradient가 최대가 되는 지점에서의 s값을 찾는다.

absolute gradient value가 최대가 되는지점

 

그때의 s 값

theta=pi/4인 지점에서 최대 gradient 값을 갖기를 원하니 theta=pi/4를 대입하여 계산해보면 다음과 같다.(B=C-1로 근사)

Automatically-chosen fixed scale parameter

이 scale 값은 한번 정해지면 fix 되므로 fixed scale parameter라 명명한다.

 

Dynamically adaptive scale parameter

실제와의 차이점

fixed를 구할때 B=C-1 (negative class들의 weight과 feature사이의 theta를 pi/2로 근사)를 가정하였고, True class의 theta들도 학습에 따라 달라지는것을 신경쓰지 않았다.

하지만 실제 모델은 학습할 수록

1) True class의 wieght과 feature사이의 theta값은 작아지므로 점점 supervision이 약하게 되고,

2) negative class의 theta도 정확히 pi/2가아니므로  B의 값도 C-1이 아니게 된다.

-> batch 내에서의 avg값과 med값을 사용하자!

그때의 s 값

해결법

1) 위 식에서 theta0는 gradient가 최대가 되는 지점으로, 학습때마다 줄어드는 theta의 값에 맞춰서 계속 supervision을 주게 하기 위해, t번째 iteration일때,   true class theta의 batch 내 median 값을 사용.

2) B=c-1이 아닌 B의 t번째 iteration일때 배치내  average값을 사용하여 조금 더 이론에 맞게끔 근사. 이때 B(t)에도  s(t)가 들어가므로 s(t)대신 s(t-1) 사용.

위 사항을 고려한 새로운 dynamic scale parameter 값은 다음과 같다.

완성본

Dynamic scale parameter. t=t번째 iteration. avg,med은 모두 배치내 연산.

 

위 2)에서 말했듯이 B를 구하는데 s(t-1)이 사용되므로 initial s, s(0)의 값이 필요한데 이값으로 전 단락에서 구한 fixed scale parameter를 사용하고, 조금더 supvervision을 높이기 위해 theta(t)의 median값을 pi/4가 넘지 않도록 한다. 정리하면 다음식과 같다.

학습의 가능성을 보기 위해 미분을 보면 다음과 같고

기존에 fixed 하게 s가 곱해지는것이 dynamic 한 s(t)가 곱해지는것을 제외하고는 softmax와 동일하다.

 

실험

학습 데이터 : CASIA-WebFace, MS1M  (자체 clean)

검증 데이터 : LFW, MegaFace(배포중단), IJB-C

비교 margin : l2-softmax, CosFace, ArcFace

 

LFW 결과
Training 중 scale 변화
Training중 theta 변화

 

IJB-C 1:1 결과
IJB-C 1:1 결과

 

IJB-C결과에서 보이듯이 FAR이 낮을때 좋은 결과를 보여준다.

직관(insight)

1) loss식을 몇가지 가정으로 간단히 하여 s와 m을 plot한 후 경향성을 봄. 

 

 

2) 미분을 활용하여 학습이 잘되는 parameter를 찾음 

 

 

3) True class의 Theta가 학습중 0에 가까워진다는것을 활용한 adaptive scailing 

batch내 Theta 분포 확인함으로써 학습이 잘됐는지 비교 가능할듯 

출처

1) AdaCos 논문 원본 :

https://arxiv.org/abs/1905.00292

 

ArcFace및 이후의 논문들은 ArcFace 의 margin code를 사용하면서 다들 비슷한 형태를 취하고 있다.

 

 

다른 부분들은 논문에 작성되어 있어서 이해하기 어렵지 않으나, easy margin 부분은 헷갈린다.

InsightFace코드에서 항상easymargin= False로 놓고 사용하므로 False 식에 대해서만 설명하겠다. 식은 다음과 같다.

보면 1) cos(theta)>cos(pi-margin)일때 phi (phi는 naive하게 cos(theta+margin)한 식을 의미한다.),

      2) cos(theta)<=cos(pi-margin)일때 cos(theta)-margin * sin(pi-margin) 로 phi를 적용한다.

알아갈 것들

1. 우선 위처럼 복잡하게 적은 이유는 theta+margin이 (0,pi) 범위에 있지 않아 cos을 단조감소 함수로써 이용할 수 없게됨을 방지하기 위함이다.

 

2. 또다른 이유로는 theta자체를 이용한 식을 사용하지 못함에 있다.  논문 이론과 같이 arcsin, arccos를 사용하여 theta에대한 조건식을 사용하게되면 computation이 급격히 늘어나므로, 코드에서는 모든 조건들을cos, sin에 대한 식으로 나타낸다.

ex1) theta> m  -->  cos(theta)<cos(m)  when theta, m 이 (0,pi)에 있을때.

ex2) cos(theta+m)= cos(theta)*cos(m)-sin(theta)*sin(m)

 

3. cos(theta)>cos(pi-margin) 이라는 조건부터 살펴보면, theta , pi-margin 모두 (0,pi)사이의 값이므로 2번설명의 ex1과 같다.

 

4.self.mm의 의미 :

갑자기 생뚱맞게 mm=margin*sin(pi-margin)이 나와 당황 했는데, 이것도 theta+margin 이 pi범위를 넘어서는 문제를 해결하기 위해 나온식이다.

당신이 이 논문 저자라고 생각하고 만약 theta+margin이 pi를 넘는다면 이 값을 대체할 수 있는 방법이 세가지 있다.

첫째로, 'pi를 넘어서는 값들은 pi로 고정시킨다' 즉 theta+margin이 pi를 넘는값에 한해 cos(theta+margin)=-1로 고정시키는 방법이다.

다른 두개는 이 논문에서 사용한 방법으로 1st order Taylor Extension을 이용해서 cos(theta)에서 넘는 값을 선형으로 근사 시키는것이다. 즉 cos(theta+margin)=cos(theta)-sin(theta)*m >=cos(theta)-sin(pi-m)*m  으로 나타낼 수 있다.

여기서

cos(theta+margin)=cos(theta)-sin(theta)*m 는 두번째 방법

cos(theta+margin)>=cos(theta)-sin(pi-m)*m 를 세번째 방법이라 지칭 하겠다.

Taylor Extension, ArcFace는 1차까지 사용.

식은 복잡하지만 다음 그림을 보면 한번에 이해가 갈 것이다.

 

이중 ArcFace는 방법 3를 사용하고 있다. m=0.5의 값을 사용하므로 pi-m은 항상 (pi/2,pi)안에 있고 theta>pi-m이므로 방법3로 그리는게 방법2보다 항상 가파른 기울기로 근사하여 잘 못 맞추는 sample(theta ~=pi)에대해 loss를 더 크게 부여하게 된다.

 

출처 : github.com/ronghuaiyang/arcface-pytorch/issues/48

+ Recent posts