2021 인공지능 온라인 경진대회 이미지 분야 1위의 비결은?

안녕하세요! 메이아이는 2021년 6월에 치뤄진 <2021 인공지능 온라인 경진대회> “운전 사고 예방을 위한 운전자 부주의 행동 검출 모델” 분야에 참가하여 종합 1등이라는 우수한 성적을 거두었습니다!
(2020년에도 우수한 성적을 거둔 바 있습니다 ─ 보러가기)

이번 글에서는  저희가 “운전 사고 예방을 위한 운전자 부주의 행동 검출 모델” 을 어떻게 풀었는지 그 속을 낱낱이 파헤쳐 보도록 하겠습니다.

목차는 아래와 같습니다.

01. 문제가 뭔데?
02. EDA : 답은 여기에!
03. Data Preprocessing
04. Model, Train Strategy
05. Inference
06. 후기

이 글이 Object Detection 을 수행하시는 모든 분들께 도움이 되었으면 좋겠습니다 :)

GitHub - PJunhyuk/2021AICompetition-03: 1st ranked ‘driver careless behavior detection’ for AI Online Competition 2021, hosted by MSIT Korea.
1st ranked &#39;driver careless behavior detection&#39; for AI Online Competition 2021, hosted by MSIT Korea. - GitHub - PJunhyuk/2021AICompetition-03: 1st ranked &#39;driver careless behavior dete…


01. 문제가 뭔데?

저희 메이아이가 도전한 "운전 사고 예방을 위한 운전자 부주의 행동 검출 모델" 분야는 이미지 속에 있는 얼굴, 눈, 입, 담배, 휴대폰 등을 탐지하는 object detection 문제입니다.

object detection이라는 키워드를 보자마자 바로 이 문제를 선택했어요. 이미 오프라인 공간 분석 서비스인 mAsh(매쉬)를 개발하면서 비슷한 종류의 문제를 많이 풀어왔기 때문입니다.


02. EDA : 답은 여기에!

먼저 저희는 데이터 셋이 어떻게 구성되어 있는지 살펴봤습니다. 데이터 셋을 구성하는 대부분의 이미지에서는 운전자가 1명 등장하였고, 각 물체끼리의 occlusion 은 거의 없었습니다. 이러한 운전자 이미지가 흑백 형태로 약 27만 장 정도 주어졌고, 각 class 간의 비율은 아래 차트와 같았습니다.

다들 이미 눈치채셨겠지만 data imbalance 문제가 심각한 것을 알 수 있습니다. 대회 초기에는 여러가지로 모델 구조를 바꿔보는 등의 실험을 진행하기도 했지만, EDA 진행 후에는 이 imbalance한 데이터를 균형 있게 학습할 수 있는 방법들을 취하도록 전략을 바꾸었습니다.


03. Data Preprocessing

앞서 EDA 를 통해 data imbalance 문제가 심각하다는 것을 알 수 있었습니다. 그렇다면 이제는 이걸 어떻게 해결할지 생각해봐야겠죠. 저희는 크게 두 가지 아이디어로 접근했습니다.

1. 상대적으로 부족한 class 데이터를 더 많이 만들자.
2.상대적으로 많은 class 데이터를 줄이자.

먼저 1번 아이디어를 적용하기 위해 선택한 방법은 object cut-mix 였습니다. 위의 차트를 살펴보시면 phone과 cigar class가 상대적으로 부족한 것을 보실 수 있는데, 저희는 이 object들을 잘라서 적절하게 augmentation 을 한 뒤 학습할 이미지 빈 공간에 붙여주었습니다.

2번 아이디어는 아주 효과적이었는데요! 아래와 같은 기준으로 데이터 셋을 보기 좋게 '다이어트' 했습니다.

  • cigar 가 있거나 phone 이 있으면 데이터 셋에 포함!
  • eye_closed 와 mouth_closed 가 동시에 있으면 데이터 셋에 포함!
  • eye_closed 와 mouth_opened 가 동시에 있으면 데이터 셋에 포함!
  • mouth_opened 가 있는 이미지 중 1/3 을 데이터 셋에 포함!

그 결과 위와 같은 분포를 가진 데이터 셋을 얻었고, 이를 사용하여 학습을 진행했습니다.


04. Model, Train Strategy

모델 구조면에서도 여러 시도들이 있었습니다. 원래 대회에서 제공하는 baseline code 는 yolov5 였습니다. 이와 함께 yolov5l, Swin-L, Centernet 2 등의 여러 모델 구조를 테스트한 결과 yolov5l 를 최종 선택하였고, 이 모델의 정확도를 향상하는데에 집중하였습니다! 참고로 yolov5l 는 coco-test 에서 mAP(0.5:0.95) 0.48 의 정확도를 보여주는 엄청난 모델입니다.

  1. 쪼개서 학습하기

일단 yolov5의 기본 학습 전략을, 앞서 data preprocessing 을 통해 만든 다이어트 데이터 셋에 적용하여 학습했습니다. epoch 은 학습할 데이터 셋을 전부 한 번씩 도는 것인데, 다이어트를 한 데이터 셋을 전부 도는 것이 생각보다 너무 오래 걸려서 epoch를 새로 정의했습니다.
epoch*: 다이어트 데이터 셋을 15 등분으로 쪼개어 shuffle 한 뒤, 첫 1 / 15 의 작은 데이터 셋을 학습하는 것을 1 epoch 으로 정의합니다.

이렇게 학습한 결과 저희가 임의로 분리한 validation set 의 phone, cigar 에 대해 mAP가 잘 나와주었고 제출해서 test-set 에 적용했을 때도 1등을 달성하였습니다! 그렇다는 건 균형있는 데이터 셋으로 generality 또한 잘 학습했다는 뜻이겠죠? 그럼 이제..!

2. Fine Tuning

다이어트 데이터 셋에 포함되지 않은 데이터로 Fine tuning 을 진행합니다. 이 녀석들도 데이터 셋 크기가 상당하기 때문에 새로 정의한 epoch* 으로 50 등분하여 50 epoch* 을 학습했습니다.

오, 무려 0.01 이나 올랐네요!


05. Inference

이제 최종적으로 ML/DL 대회 국룰인 앙상블과 TTA(Test Time Augmentation) 를 적용하여 제출하였습니다!

그 결과 최종적으로 분야 1위를 사수할 수 있었습니다.


06. 후기

박준혁: 큰 대회라 잘 하는 팀들이 많이 참가해서 재밌게 경쟁할 수 있었고, 결과가 너무 좋아서 더욱 기쁜 것 같습니다! 대회에서 배운 지식과 자신감(?)을 살려서 더욱 좋은 제품을 만들 수 있도록 노력할게요~

정재민 : 메이아이에서 object detection 을 연구한 경험이 대회에서 도움이 많이 되기도 했고 대회 경험이 메이아이에서 하는 연구에 많은 도움이 되기도 했습니다.


기타

  • 데이터 수가 너무 많아서 1 epoch 을 돌리기 어려워 epoch*라는 단위로 쪼갰는데 이건 너무 epoch-based train strategy 만 생각했던 것 같습니다. 사실 iteration 단위의 step-based train strategy 로 풀었다면 어땠을까 하네요!
  • Data Preprocessing 방법 중 1번 방법인 object cut-mix 는 메이아이에서 영상 속 Detection FP(False Positive) 를 학습하는 연구로 진행되고 있어요.

인터뷰로 만나보기


관련 기사 보러가기

메이아이, 정부 인공지능 대회 과기정통부 장관상 수상
과학기술정보통신부가 개최한 ’2021 인공지능 온라인 경진대회′ 에서 메이아이가 이미지 분야 최종 1등을 차지하며 , 최우수상인 과학기술정보통신부장관상을 수상했습니다.

메이아이의 뉴스레터를 통해 오프라인 공간 분석 트랜드를 알고 싶다면 구독하세요!

메이아이 뉴스레터 구독신청
″영상처리 인공지능을 통해 오프라인 공간의 디지털 트랜스포메이션을 만들자” 오프라인 방문객 분석 트랜드, 메이아이의 인공지능 엔진 ‘daram’의 성장 이야기 그리고 메이아이의 다양한 소식을 만날 수 있습니다. 나날이 더욱 강력한 인공지능으로 거듭나고 있는 메이아이의 든든한 구독자가 되어 보세요!
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.