[P] Week 7 - Classification Competition

JaeJun Lee ·2022년 11월 6일
0

부스트캠프 AI Tech

목록 보기
27/30

P stage의 첫 대회가 종료되었다. 해보고 싶은 걸 다 하지는 못했지만 팀원들과 다양한 시도를 해보고 그 과정에서 많은 것을 배울 수 있었다. 이전 주와 다르게 github로 상황을 공유하며 템플릿을 맞추고 의미있었던 기능 혹은 방법들을 추가하여 실험을 진행했다.

2 way multi-task

먼저 3가지 특징을 각각 예측하지 않고 나이 + 성별, 마스크 착용 상태로 구분하는 multi tasking을 진행해보았다. '성별에 따라 나이별로 나타나는 특징이 있지 않을까?'라는 의문으로 진행했고 classifier로는 linear 레이어를 사용했다.
예측 정확도는 1 way로 18가지 클래스를 분류하는 것보다 f1-score 기준 약 2% 향상되었지만 confustion matrix를 확인한 결과 여전히 나이를 많이 어려워하는 경향이 보였다. 특히 중년층과 노년층을 구분에서 많은 혼동이 있는 것으로 분석했다. 이에 3 way로 진행하여 각 특징을 독립적으로 조정해보고자 하였다.

3 way multi-task

이전 2 way와 다르게 3 way에서는 classifier를 1x1 convolution을 사용하는 구조와 linear를 사용하는 두 가지 구조를 비교했는데 성능 측면에서 유사하여 구현이 용이한 linear 레이어를 사용했다.
실험 결과로 age를 많이 혼동하고 있으며 이를 보완하고자 arcface loss 사용해보자라는 의견이 나왔다. arcface loss는 metric learning 기법으로 input과 label 간의 각도 θ\theta를 학습하여 동일한 class는 조밀하게 다른 class와는 멀리 분포할 수 있게 하는 기법이다. 팀원이 공유해준 적용 결과는 더 낮은 성능의 예측 결과가 나온다고 했다.

  • 결과에 대해 토의한 결과 class마다 공통적인 특징을 가져야 조밀한 분포를 가질 수 있을 거 같은데 사람마다 age별로 나타나는 특징이 다르기 때문에 기대와 다른 결과가 나온 것으로 추측했다.
  • 추가로 imblance 문제가 심하기 때문에 수가 적은 class는 다른 class와 멀리 분포할 수 있을 거 같지만 동일 class와 결집이 잘 이루어질까도 고민을 해보았다.

결과적으로 loss는 cross-entropy와 focal loss를 사용하고 age에 좀 더 가중치를 두어 사용하는 방향으로 진행하였다. 추가적으로 Stratified K-Fold를 적용한ensemble 기법을 사용하였고 모델 classifier에 multi-dropout 구조를 사용하여 내부적으로도 ensemble 효과를 볼 수 있도록 사용하였다. 이후로는 하이퍼 파라미터를 튜닝하며 실험을 진행했다. 주로 learning rate와 batch size, loss weight를 중점으로 시도했고 최종 score는 76.07%로 마무리하게 되었다.

회고

개인적으로 아쉬운 것들이 있었다. 먼저 얼굴에 비중을 두어 데이터를 처리하면 좋을 거 같다는 의견으로 dlib, facenet, mtcnn 등 적용해보면 좋을 거 같았지만 실제로 도입해보지는 못했고 haar cascade를 활용해 얼굴의 평균 위치를 파악해 crop size를 조정하였다. 데이터에서는 imbalance한 문제와 라벨이 잘못된 점들을 좀 더 개선할 수 있는 방법을 찾았으면 하는 아쉬움이 남았다.
그럼에도 대회를 통해 얻은 것들은 많았다. 팀으로 진행하며 다양한 방법으로 문제에 접근할 수 있음을 알게 되었고 생각해보지 못했던 방법들을 적용해는 등 협업으로 인해 생기는 배울 점들이 정말 많았고 팀에 감사함을 느꼈다. 특히 발표를 해주신 팀들의 솔루션을 듣고 내가 부족했던 점과 보완하는 방법들을 알게 되어 정말 좋은 경험이었다.

Reference

0개의 댓글