2020 인공지능 온라인 경진대회 참가 후기

1위 등극, 메이아이의 얼굴 다각도 인식 및 조회 모델 개발기!

안녕하세요, 메이아이의 CPO 김찬규입니다.

메이아이 팀은 2020년 6월 과학기술정보통신부에서 주최한 '2020 인공지능 온라인 경진대회'에 참가하여 한 종목에서 1위, 두 종목에서 2위를 차지하며 종합 5위의 성적을 거두었습니다. 대회를 진행하면서 우여곡절이 참 많았는데요. 이번 글을 통해 메이아이가 1위를 차지한 종목인 얼굴 다각도 인식 및 조회 모델(경량화)의 개발 과정을 다루고자 합니다.


인공지능 온라인 경진대회란?

'2020 인공지능 온라인 경진대회'는 과학기술정보통신부에서 주최, 정보통신산업진흥원에서 주관하여 우수한 인공지능 기술력을 보유한 기업을 발굴하고 사업화 지원 기회를 제공하기 위한 대회입니다. 대회 기간은 2020년 6월 17일부터 시작하여 6월 30일까지 약 2주 동안 진행되었습니다.

대회 방식은 각 팀별로 총 20개의 문제 중 가장 자신 있는 문제에 자유롭게 참여하여 가장 등수가 높은 문제 3개의 점수를 합산하는 방향으로 진행되었습니다.


얼굴 다각도 인식 및 조회 모델(경량화) 문제는?

'얼굴 다각도 인식 및 조회 모델 (경량화)' 문제는 정면에서 측면까지의, 조도가 각기 다른 두 얼굴 이미지로부터 동일인 여부를 최대한 정확하게 예측하는 모델을 개발해 내는 문제입니다. 데이터셋은 정면 이미지부터 90도의 측면 이미지까지, 밝은 이미지부터 매우 어두운 이미지까지 다양한 이미지들이 주어졌습니다. 과제 평가 지표는 홈페이지에서 명시된 것과 달리 정확도(Accuracy)였습니다.

특히 경량화 문제이기 때문에, 모델의 파라미터 개수가 최대 5백만 개로 제한된 상태에서 가능한 한 정확한 모델을 개발해야 했습니다. 인공신경망 모델에 5백만 개의 파라미터는 그리 충분하지 않은 숫자입니다. 또한 대회 규정상 외부 데이터셋을 이용하거나 ImageNet 등의 외부 데이터셋으로 학습된 pre-trained weight을 불러오는 것이 금지되었습니다.


모델 개발 과정

이제 모델 개발 및 개선 과정에 대해 간략히 소개해 드리겠습니다. 현재는 작업을 진행하였던 컨테이너에 접속할 수 없는 관계로 정확한 수치나 그래프, 로그 등을 제공할 수 없는 점은 양해 부탁드립니다 :)

Baseline model

먼저 주최 측에서 제공한 baseline 코드에서는 Contrastive loss를 사용한 것을 발견할 수 있었습니다. 하지만 이보다 더 진보한 metric들이 더 많이 존재하기 때문에, 메이아이 팀에서는 baseline 코드를 활용하지 않고 새로운 모델을 처음부터 구현하는 방향으로 대회를 시작하였습니다.

결과적으로 Hard Triplet loss(Alexander et al.)와 Softmax loss를 통해 feature를 학습하는 baseline을 구현하였고, backbone network로는 적은 파라미터로도 뛰어난 성능을 보여주는 EfficientNet(Tan et al.)을 활용하였습니다. Optimizer는 기본적으로 Adam optimizer를 활용하였습니다.

이렇게 구현된 baseline은 test set에서 96.7%라는 정확도를 보여주었습니다. 이는 나쁘지 않은 성능이었지만, 아직은 다른 훌륭한 팀들이 저희 팀의 앞을 막아서고 있었습니다.

Pretext model

하지만 위의 baseline을 학습함에 있어, 학습할 때마다 그 성능이 크게 달라지는 등 학습이 상당히 불안정한 모습을 확인할 수 있었습니다. 저희는 인공신경망 모델을 학습할 때 보편적으로 활용하는 ImageNet pretrained weight을 사용하지 못한다는 사실이 어느 정도 이러한 현상에 기여하리라고 추측하였습니다.

처음에는 이러한 문제를 해결하기 위해 self-supervised learning 등의 기법을 활용하고자 탐색을 시작했습니다. 하지만 그러던 중 주최 측에서 제공한 데이터셋의 meta data에 얼굴 이미지에 대한 얼굴 각도, 표정 정보가 포함되어 있다는 것을 발견하고, 이를 적극적으로 활용하였습니다.

즉 먼저 모델이 이미지로부터 이러한 얼굴 각도, 표정을 잘 예측하도록 학습한 후, 이렇게 학습된 weight를 initialization으로 얼굴 인식 모델을 학습시켰습니다. 놀랍게도 이를 통해 학습의 안정성이 높아지고, 정확도 역시 97.9%로 높아진 것을 확인할 수 있었습니다.

Triarchy model

위와 같이 Pretext model을 활용함으로써 성능을 높일 수 있었고, 해당 문제에서 1위를 차지하였지만, 2위 팀과의 차이는 매우 근소했습니다. 저희 팀은 더 강력한 모델을 만들어야겠다고 생각했습니다. 이에 저희 팀은 모델이 더 섬세한 feature를 학습할 수 있도록, 다음과 같은 세 가지 메트릭을 통해 학습하는 모델을 고안하였습니다.

  1. Softmax loss : 각각의 인물에 대해 discriminative한 feature를 학습
  2. Hard Triplet loss : Negative pair의 distance가 positive pair에 대해 상대적으로 멀어지도록 feature를 학습
  3. Center loss : 동일한 인물끼리는 최대한 비슷한 형태의 feature를 학습

또한 여타 논문들을 참조하여, 보다 효율적인 얼굴 인식 모델 학습을 가능하게 하는 여러 가지 기법들을 실험해 보았습니다. 도식화한 모델 구조는 다음과 같습니다.

Model architecture

이렇게 학습된 모델은 test set에서 98.7%의 정확도를 보여 주었고, 2위 팀의 모델과 1% 이상의 margin으로 대회를 종료할 수 있었습니다.

Leader board

위 모델들은 PyTorch로 구현되었고, 소스 코드는 아래 링크에 업로드되어 있습니다.

GitHub - jessekim-ck/2020-ai-challenge-04: 1st ranked light-weight face verification model for AI Challenge 2020, hosted by MSIT Korea.
1st ranked light-weight face verification model for AI Challenge 2020, hosted by MSIT Korea. - GitHub - jessekim-ck/2020-ai-challenge-04: 1st ranked light-weight face verification model for AI Chal…

대회 참가 후기

대회를 진행하면서 참 우여곡절이 많았다는 생각이 듭니다. 우선 5개의 과제를 수행할 수 있지만, GPU는 팀당 단 한 개만 제공되었기 때문에 리소스의 분배 차원에서 많은 시행착오를 겪었습니다. 이로 인해 동일한 태스크이지만 파라미터 제한이 없는 모델을 개발하는 3번 문제에 대해서 모델 앙상블 등의 기법을 적용해 볼 기회가 많이 주어지지 않아 약간의 아쉬움이 남습니다. 또한 2주의 대회 기간은 사실 그렇게 긴 시간이 아니었기에, 보다 창의적인 시도들을 해보지 못한 것에 대해서도 아쉬움을 느낍니다.

그럼에도 불구하고 이번 경진대회는 메이아이 팀에게 값진 경험이 되었습니다. 무엇보다도 2주간 치열하게 경쟁하며 정말 재미있었고, 스스로의 역량에 대해 많이 돌아보게 되는 시간이었습니다. 또한 인물 인식과 관련된 프로젝트는 이번 경진대회에서 처음 접하게 되었는데, 이는 추후 메이아이 팀 내부의 프로젝트를 진행하는 데 큰 도움을 주었습니다.

현재 메이아이 lab 팀은 메이아이가 제공하는 오프라인 매장 분석 솔루션에 person re-identification 기술을 활용한 기능을 제공하기 위한 연구 및 개발을 진행하고 있습니다. 이 밖에도 메이아이는 '오프라인 마케팅의 디지털화'라는 비전을 구현해 내기 위해 다양한 연구를 진행하고 있습니다.


You've successfully subscribed to Digitalize offline space with AI
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.