Skip to content

About

BoostCamp AI Tech 3기 - 마스크 착용 상태 Classification 대회

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

README

부스트캠프 AI Tech 3기, level1 CV 14조

1. 프로젝트 개요

  • 프로젝트 주제 : 마스크 착용 상태 분류

    • 성별 (남/여)
    • 나이 (29 / 3059 / 60~)
    • 마스크 착용 상태 (미착용 / 정상 착용 / 비정상 착용)

    → 총 18개(2 x 3 x 3)의 클래스에 대한 예측.

  • 개발 환경 및 협업 tool

    Python, PyTorch, Tensorboard, VScode, github

  • 데이터 개요

    • 전체 사람 수: 4,500명

    • 한 사람 당 사진 개수: 7장 [마스크 착용 5장, 이상하게 착용(코스크, 턱스크 등) 1장, 미착용 1장]

    • 학습 데이터 셋: 60% / 평가 데이터 셋: 40%

    • 입력: 마스크 착용 사진, 미착용 사진, 혹은 이상하게 착용한 사진

    • 출력: 총 18개의 클래스 (0~17)

    예시

  • 기대 효과

    COVID-19은 감염자의 입, 호흡기로부터 나오는 비말, 침 등으로 인해 다른 사람에게 쉽게 전파가 될 수 있기 때문에, 감염확산 방지를 위해 마스크를 올바르게 착용하는 것이 중요하다. 따라서 우리는 카메라에 비춰진 사람 얼굴 이미지만으로 이 사람이 마스크를 올바르게 쓰고 있는지 자동으로 가려낼 수 있는 시스템이 갖춰진다면 적인 인적자원으로도 COVID-19의 확산방지에 도움이 될 것이다.


2. 프로젝트 팀 구성 및 역할

  • 김찬민_T3060: 베이스라인 코드 이해
  • 김준_T3054: 베이스 라인 코드 이해, 모델 및 loss 성능 비교, Data Augmentation 비교
  • 조유진_T3208: 각각 학습한 여러 모델들을 연결.
  • 최홍록_T3228: 모델 성능비교, Data Augmentation비교.

3. 프로젝트 수행 절차 및 방법

실제로 모델링을 처음 하기 때문에 모델을 검증하고 개선하는 경험이 필요하다고 판단했다.

그래서 이번 프로젝트의 목적은 개인의 프로젝트 이해와 모델링에 익숙해지는 것이었다.

3.1. 프로젝트 수행 절차

  1. 각자 모델링 및 Data Augmentation, Optimizer 사용
  2. 각자 해본 Augmentation 기법, Scheduler등 여러가지 기법들 공유
  3. Git을 사용한 코드 공유
  4. 공유한 내용들 바탕으로 각자의 모델 개선
  5. 개선된 모델 중 좋은 성능을 보이는 모델 2개를 선정 및 결과 제출

3.2. 최종 모델

3.2.1. ResNet152

세부 사항
  • Oversampling과 Tomek Links를 사용한 Data Augmentation.
  • Mix Up을 사용한 Data Augmentation.
  • AMP를 사용한 학습 시간 단축.
  • NNI를 사용한 하이퍼 파라미터 튜닝
고려 사항
  • 데이터의 양이 적은 클래스를 Oversampling 하는 과정에서 Overfitting을 우려해 60세 이상의 이미지는 4배로 늘려주고 59세의 데이터를 60세로 바꾼 뒤 2배로 늘려줌.
  • Mix Up을 사용할 때 일정 비율로 사용하지 않고 랜덤한 이미지와 랜덤한 비율로 데이터를 섞어서 써서 일반화가 잘 될 수 있게 함.
개선 과정
  • ResNet18에서 Data Augmentation을 사용해 성능 향상.
  • ResNet152로 모델의 크기를 키워서 성능 향상.
  • NNI를 사용해 Loss Function 결정.
  • Adam과 CosineAnnealingLR을 사용해 Local Minimum 탈출 도모.

3.2.2. ResNet18 + GoogLeNet (모델 분리)

세부 사항
  1. 마스크 착용 여부 예측 모델 : ResNet18 + Normalization
    1. ResNet18만으로 성능이 충분하다고 생각하여 특별히 개선 사항 없음.
  2. 성별, 나이 예측 모델 : GoogLeNet + CenterCrop + Normalization
    1. optimizer : Adam
    2. LR scheduler : CosineAnnealingLR
고려 사항
  • 마스크 착용 여부에 따라 성별, 나이 예측 시 고려해야할 feature가 다르지 않을까 하여 모델을 분리.
  • 60세 이상 데이터가 적은 것을 고려하여, 58~59세를 60세로 수정. & 60세의 데이터를 2배로 증가.
  • train 시 배경보다 얼굴에 좀 더 집중할 수 있도록 CenterCrop 사용.
개선 과정
  • 60세 이상의 데이터를 늘리니 미착용과 올바르지 않게 착용 시의 val acc. 향상.
  • 60세 이상 데이터 증가만으로 최종 F1 score가 0.6918 → 0.7144로 향상.

4. 프로젝트 수행 결과

  • 모델 개요
    1. 단일 모델로 18개 클래스 예측하기.
    2. 마스크 착용 여부를 예측하는 모델과 성별, 나이를 예측하는 모델 분리하기.
  • 모델 평가
    • 주어진 학습 데이터를 사람 별로 train set / validation set으로 나눈 뒤 사용.
  • 시연 결과
    1. Pretrained ResNet152
      1. F1 Score : 0.7370 Accuracy : 80.0317
      2. 결론 : 처음에는 데이터의 불균형이 심해서 모델이 크든 작든 성능이 비슷했다. 하지만 Augmentation으로 데이터의 불균형을 해소한 후 큰 모델을 사용해보니까 모델이 크면 클수록 성능이 잘 나오는 것을 확인 할 수 있었다. MixUp을 통해 계속 새로운 이미지가 입력값으로 사용 되는 효과를 기대할 수 있는데 이렇게 되면 ResNet152보다 더 큰 모델을 사용했을때 학습을 시키면 시킬수록 더 잘 학습이 될 것이라는 것을 기대할 수 있다.
    2. ResNet18 + GoogLeNet (모델 분리)
      1. F1 Score : 0.7144 Accuracy : 76.1905
      2. 결론 : 모델 3~4개를 따로 학습시켜야 해서 시간이 오래 걸림. 때문에 ResNet18과 GoogLeNet에서만 시도를 하여 유의미한 성능 향상을 얻지 못 함. 별 다른 parameter 변경 없이 데이터 불균형만 살짝 조정하여 꽤나 유의미한 f1 score 향상을 얻음. 데이터 불균형 조정 후에는 큰 모델일수록 학습이 잘 되는 위 실험 결과를 고려하면, 데이터를 좀 더 조정하고 큰 모델을 사용하면 더 많은 성능 향상을 기대해볼 수 있을 것 같다.

5. 자체 평가

  1. 잘한 점
    • github**을 활용한 코드공유가 잘 이루어졌다.
    • 모듈화된 코드를 이해하고 command line에서 활용하였다.
    • tmux, tensorboatd, nii 등의 툴들을 활용했다.
  2. 아쉬운 점
    • 협업이 잘 이루어지지 않았다.
    • LB 상에서 성능이 좋지 않았다.
    • 배경을 지우는 Transform을 적용했다면 더 좋은 성능을 얻을 수 있었을 것이다.
  3. 시도 했으나 잘 되지 않았던 것
    • Data Imbalance 해결
    • Overfitting 문제 해결
    • 데이터 resize 및 crop을 통해 학습데이터의 multi-scaling 시도

About

BoostCamp AI Tech 3기 - 마스크 착용 상태 Classification 대회

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages