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 :)

+ Recent posts