이스트소프트 A.I. PLUS Lab은 과학기술정보통신부에서 주최하는 <2020 인공지능 온라인 경진대회>에 참가했습니다. 저희는 지난 블로그 글을 통해 소개했던 메트릭러닝 기술을 활용하여 얼굴 인식 분야의 두 문제에 도전하였고, 해당 트랙에서 1위를 했습니다. 이번 글에서는 대회 참가기를 소개하고자 합니다.
1. 인공지능 온라인 경진대회 소개
본 대회는 과학기술정보통신부 주최, 정보통신산업진흥원 주관으로, 지난 6월 17일부터 30일까지 총 2주간 개최되었습니다. 이번 대회는 AI 모델 개발 경진대회를 통해 우수한 인공지능 기술력을 보유한 기업을 발굴하고, 개발 능력이 증명된 기업들을 대상으로 사업화 지원 기회를 제공하기 위한 목적에서 진행되었습니다. 1인 이상 최대 5인 팀으로 참가하여 각 팀별로 총 20개 문제 중 자신 있는 문제에 자유롭게 참여하는 방식으로 진행되었으며, 참여한 문제 가운데 등수가 가장 높은 3개 문제의 점수를 합산하여 종합 점수를 산정하는 방식이었습니다.
2.참가 과정
(1) 도전 문제
이스트소프트 팀(팀명: est_ko)이 참여한 두 과제(과제 03, 과제 05)는 아래와 같습니다. 각 과제는 ‘얼굴 다각도 인식 및 조회 모델 개발’, ‘액세서리 착용자에 대한 인식 및 조회 모델 개발’로, 측면 얼굴, 액세서리 착용 환경 등 다소 어려운 조건에서 동일인 여부를 판단하는 얼굴 인식 문제였습니다.
[과제 03] 얼굴 다각도 인식 및 조회 모델 개발 1) 주제 - 얼굴 다각도 인식 및 조회 모델 개발 - 측면 얼굴 이미지로 정면 얼굴 동일인 조회 2) 배경 - 대부분의 얼굴인식 테스트는 얼굴이 잘 나온 데이터들을 대상으로 이뤄지기 때문에 인식률이 높게 나오지만 실제 케이스에서는 측면과 같은 방해 요소가 고려되어야 함 - 다각도에서의 얼굴 인식이 가능한 모델 개발의 필요성이 증대 3) 과제 설명 - 주어진 다각도의 (90도 -정면 및 측면) 얼굴 이미지를 학습하여, 임의의 측면얼굴 주어졌을 경우, 동일인의 정면 얼굴을 조회하는 모델을 개발하여 성능 비교 4) 데이터 구조 - Train : 66,150장 (front : 22,050장 / side : 44,100장) ※ Train data로는 정면과 측면 얼굴 이미지를 다양하게 제공 - Validate : 10,000쌍 (True : 5,000쌍 / False : 5,000쌍) - Test : 20,000쌍 (True :10,000쌍 / False : 10,000쌍) ※ Validate와 Test data는 정면과 측면 이미지 한 쌍을 Pair로 제공 5) 과제 평가 - 평가지표: F1
[과제 05] 액세서리 착용자에 대한 인식 및 조회 모델 개발
1) 주제
- 액세서리 착용자에 대한 인식 및 조회 모델 개발
- 액세서리 착용 (안경, 모자, 마스크 등) 얼굴에서 원래 얼굴 찾기
2) 배경
- 대부분의 얼굴인식 테스트는 얼굴이 잘 나온 데이터들을 대상으로 이뤄지기 때문에 인식률이 높게 나오지만 실제 케이스에서는 악세서리 착용 같은 방해 요소가 고려되어야 함
- 액세서리 착용한 얼굴 인식이 가능한 모델 개발의 필요성이 증대
3) 과제설명
- 액세서리를 착용(일반안경, 뿔테안경, 선글라스, 모자, 모자+뿔테 안경)한 사람과 안 한 사람의 이미지를 학습하여, 임의의 액세서리를 착용한 이미지와 착용하지 않은 이미지 쌍이 주어졌을 때 동일인인지 여부를 분류하는 모델을 개발하여 성능 비교
4) 데이터 구조
- Train : 132,300장 (none : 22,050장 / acc : 110,250장)
※ Train data로 액세서리를 착용하지 않은 이미지와 착용한 이미지를 다양하게 제공합니다.
- Validate : 10,000쌍 (True : 5,000쌍 / False : 5,000쌍)
- Test : 20,000쌍 (True :10,000쌍 / False : 10,000쌍)
※ Validate와 Test data는 액세서리를 착용하지 않은 이미지와 착용한 이미지 한 쌍을 Pair로 제공합니다.
5) 과제 평가
평가지표 설명: F1
(2)베이스라인 기법
우선 대회 주최 측에서 공개한 베이스라인 코드를 살펴보니, 이전에 메트릭러닝 기반 안경 검색 서비스 개발 당시 살펴보았던 Contrastive loss를 찾아볼 수 있었습니다. 해당 서비스에 적용된 메트릭러닝 기술은 Contrastive loss 보다 진보화된 최신 기술이었기 때문에 이 서비스 개발에 사용된 코드 대부분을 대회에 활용하기로 결정하였습니다.
참고로, Contrastive loss 등을 포함한 메트릭 러닝 발전 동향은 이전 ‘메트릭러닝 기반 안경 검색 서비스 개발기2’ 글에서 살펴볼 수 있습니다.
(3) 공략 기법
저희는 안경 검색 서비스 ‘Glass Finder’에서 사용한 코드를 거의 그대로 활용하였습니다. 안경 검색의 경우 다양한 성격의 데이터(안경 제품, 가상피팅 착용 모습, 실제 안경 착용 모습 등)를 활용해야 했기 때문에 메트릭 러닝 외에 멀티 태스킹 기법을 사용하였으나, 이번 대회에서는 제공받은 데이터만을 사용하여 학습시켜야 했고, 학습 데이터 또한 동일한 조건에서 촬영된 사람 얼굴 한 종류였기 때문에 멀티 태스킹 기법은 제외하였습니다.
여기서 활용한 기본적인 모델 구조는 그림2와 같습니다. 백본 네트워크로는 resnet50을 사용하였고, 피쳐 벡터 크기도 512로, 이전 서비스 개발 당시와 동일한 구조를 사용하였습니다.
또한, 각 테스크는 3개 모델을 앙상블하여 제출하였습니다. 사용된 최적화 알고리즘과 스케줄러는 다음과 같았고, 성적은 대부분 비슷했습니다. 주최 측이 제공한 학습 서버가 블로그를 쓰는 시점에 닫혀 버리는 바람에, 아쉽게 학습 과정에 대한 텐서보드 로그 스크린샷은 블로그에 실을 수 없었습니다.
- model1 : Adam + StepLR
- model2: Adam + CosineAnnealingLR
- model3: SGD + StepLR
학습과정을 지켜보니 오버피팅(Overfitting, 과적합, 과학습) 현상이 빠르게 일어났습니다. 이러한 문제 개선을 위해 아래와 같은 2가지 방법을 시도하였고, 성능을 향상시킬 수 있었습니다.
먼저, 훈련(train)을 좀 더 어렵게 하기 위해 model3의 경우, dropout 비율을 기본값 0.5에서 0.8로 높였습니다. 이어 얼굴인식 문제의 경우, 그림3과 같이 사진의 꽤 많은 영역을 가려도 일반 사람들은 흔히 동일인 여부를 판단할 수 있기 때문에 딥러닝 모델도 이를 구분할 수 있을 것이라는 기대를 가지고 RandomErasing 기법을 추가하였습니다. 이 외에는 pytorch tutorial에 나오는 정도의 기본적인 augmentation만 적용하였습니다. [2]
3. 참가결과
기존 목표로는 안경 검색 서비스의 코드를 옮겨오고 나서 보다 좋은 최적값을 찾아 성능을 높이기 위해 피처 벡터 크기나 백본 네트워크를 변경할 예정이었습니다. 하지만, scheduling 조정과 augmentation만으로 1위를 기록하고, 점수 또한 매우 높았기 때문에 추가적인 실험 없이 대회를 마무리 하였습니다.
4. 참가 소감 및 향후 계획
먼저 대회를 진행하며, 느꼈던 점에 대해 리스팅해 보겠습니다.
-
다른 대회와 달리 문제가 대회 시작 하루 전에 알려졌기 때문에 미리 대비할 수 없었지만, 덕분에 2주 동안 짧고 굵게 참여할 수 있었습니다.
이번 대회는 주최 측에서 제공한 플랫폼에서만 학습을 시켜야 했는데, 평소 사용하던 머신이 아닌 다른 개발환경에 적응하는데 시간을 많이 소비했습니다. 익숙하지 않은 다른 개발환경에서 작업하는 것은 캐글 코드 컴피티션 참여 경험이 많은 도움이 되었지만, 좀 더 능숙해져야 겠다는 생각을 했습니다. -
보통 얼굴 인식과 같이 메트릭 러닝을 적용하기 위해서는 피쳐가 잘 뽑히도록 하기 위해 객체 탐지와 정렬 과정이 들어갑니다. 하지만 이번 대회 데이터셋의 경우 얼굴 영역의 크기가 일정하고 위치도 중간쯤에 있어서 얼굴 탐지 및 정렬을 위한 추가적인 라이브러리가 필요하지 않았습니다. 얼굴 인식 문제에만 집중할 수 있는 문제 세팅이었습니다.
하지만, 이번 대회에서는 pre-trained 모델을 사용하지 못하는 제약이 있었습니다. 단순 학습용 모델이 아닌 서비스에 사용하는 일반적인 모델의 경우, 용량이 매우 크기 때문에 대규모 데이터로 학습된 모델을 가져와서 fine-tuning을 합니다. 이번 대회를 통해 resnet-50 이상의 모델들을 pre-train 없이 처음부터 학습시켰을 때, 얼굴 인식 문제에서 어느 정도 성능을 보이는지 알아볼 수 있는 좋은 기회였습니다. -
저희 팀이 참여한 3번, 5번 문제와 동일한 세팅으로 경량화 문제도 출제되었기 때문에 대회 초반에는 경량화 쪽도 공략할 예정이었습니다. 하지만, 대회 주최측에서 요청한 재현 가능한 코드 정리를 하다 보니 마감 날짜가 되어 버려 경량화 쪽은 신경쓰지 못해 아쉬웠습니다. 평소 능숙하게 익혀 놓지 않은 기술은 실전에서 활용하기 어렵다는 생각을 하게 되었습니다.
-
마지막으로, 다른 국내 대회와 달리 Q&A 게시판을 개설하고 참여자들의 질문에 새벽 시간에도 답변을 올려주는 대회 사무국의 모습이 매우 인상적이었습니다. 대회의 기조가 지켜지는 선에서 대회 운영에 있어 참여자의 의견을 적극 반영하는 모습 또한 좋은 모습이었습니다.
향후, 저희 이스트소프트 연구소는 이 기술을 자회사 딥아이에서 운영하는 AI 가상피팅 안경쇼핑몰 ‘라운즈(ROUNZ)’ 매장에 적용하여 지속적인 연구 성과를 창출할 예정입니다. 최근 코로나19 여파로, 판매자와 소비자가 대면접촉을 하지 않는 ‘언택트(비대면)’ 소비 트렌드가 확산되고 있는데요. 라운즈 오프라인 매장 또한, 이러한 트렌드에 발맞춰 매장을 방문하는 고객이 더 편리한 쇼핑을 할 수 있도록 AI 기술을 활용해 언택트 오프라인 쇼핑 환경을 구현할 예정입니다.
앞으로도 이스트소프트의 인공지능 연구와 라운즈 사업에 많은 관심 부탁드립니다. 감사합니다.
참고문헌
[1] http://www.aichallenge.or.kr/main/main.do
[2] https://pytorch.org/docs/stable/_modules/torchvision/transforms/transforms.html#RandomErasing