/Boostcamp-Mask-Classification

네이버 부스트캠프 | 카메라로 촬영한 사람 얼굴 이미지를 통해, 연령, 성별, 마스크 착용 여부 판단

Primary LanguageJupyter Notebook

P Stage - Mask Image Classification

카메라로 촬영한 사람 얼굴 이미지를 통해 연령,성별,마스크 착용 여부를 판단

public 1st private1st


Team Introduction & Score

Click logo

teamlogo

public rankprivate rank



Members

김상렬 김태일 박세연 이재학 정시현
Github Github Github Github Github
ksl970330@naver.com gimty97@gmail.com maylilyo02@gmail.com jaehahk810@naver.com sh2298@naver.com

Members' Role

팀원 역할
김태일_T3063 데이터를 분포를 확인하는 EDA와 불균형한 데이터의 분포를 해결할 수 있는 방법 제시
박세연_T3091 적합한 Model 적용과 AMP를 포함한 Baseline 배포
이재학_T3161 f1 loss 제안, 원본 데이터에서 모든 실험 담당 및 실험관리 검토 후 놓친 부분 실험 제안
김상렬_T3032 miss labeling 데이터에 대한 정정, background 제거 코드 작성
정시현_T3198 EDA를 통한 miss labeling, incorrect path 확인 및 Annotation 코드 작성

F1 Score Record

resultpic


Project Introduction

분류 내용
프로젝트 주제 카메라로 촬영한 사람 얼굴 이미지를 통해 연령,성별,마스크 착용 여부를 판단
프로젝트 개요 부스트캠프 Level1-U stage 강의를 통해 배운 내용을 바탕으로, 모델을 설계하고 학습하며 추론을 통해 나온 결과를 바탕으로 순위 산정하는 방식
활용 장비 및 재료 • GPU : Tesla V100
• 개발환경 : Jupyter Lab , VS code
• 협업 tool
◦Notion : 회의록 정리 , Experiment Page 만들어서 실험 정리 및 공유
◦Github : 코드 협업
◦Slack, 카카오톡 : 활발한 의견 공유
프로젝트 구조및 사용 데이터셋의 구조도(연관도) • metric : Macro F1 Score
• Data :
◦ 20~70대의 아시아인 남녀(4500명)
◦ 한 사람당 사진의 개수: 7 [마스크 착용 5장, 이상하게 착용(코스크, 턱스크) 1장, 미착용 1장]
◦ 이미지 크기 : (384,512)
◦ train : 전체 데이터셋의 60%
◦ eval : public 20% , private 20%
기대 효과 사진 이미지 만으로 사람이 마스크를 올바르게 잘 썼는지 자동으로 가려낼 수 있는 시스템을 구현하고, 이 시스템이 공공장소 입구에 갖춰져 있다면 적은 인적자원으로도 충분히 검사가 가능할 것이다.

Architecture

분류 내용
아키텍처 SwinTransformer-Large(ImageNet-22K pre-trained models) + Pytorch Lightning Lite
LB점수(1/48등) • public : 0.8022 , acc : 83.7143
• private : 0.7959 , acc : 83.0000
training time augmentation CustomAugmentation
• CenterCrop : 320,256
• Resize : 384,384 / BILinear Interpolation
• ColorJitter : (0.1, 0.1, 0.1, 0.1)
• ToTensor()
• Normalize
◦ mean : (0.20629331, 0.17723827, 0.16767759)
◦ std : (0.34968819, 0.30846628, 0.29714536)
TTA(Test Time Augmentation) • ColorJitter를 제외하면 train data와 상동
• Normalize
◦ mean : (0.20683326, 0.16344436, 0.15733106)
◦ std : (0.35039557, 0.28900916, 0.27917677)
데이터 • 배경 제거, mislabeling 수정, 샘플링 적용
• ageband : (30,60) → (29,57)
검증 전략 SOTA 모델의 output.csv 파일을 비교하는 코드 구현하여 비교
앙상블 방법 상위 8개 score를 달성한 모델로 Hard Voting 앙상블 적용
모델 평가 및 개선 Vit보다 파라미터 수가 적기에 오버피팅을 방지할 수 있었고, Lightning까지 적용한 후에는 학습시에 많은 시간을 단축 할 수 있었다(1epoch당 20분 → 8분). 또, Lightning를 통해 효율적으로 GPU를 이용할 수 있기에, image size를 384,384로 논문에 맞게 구현한 결과, 좋은 성능을 낼 수 있었다.

Getting Started

install requirements

pip install -r requirements.txt

Train

sh train.sh

SM_CHANNEL_TRAIN=/opt/ml/input/data/train/images \
python train.py \
--epochs <Epochs> \
--lr 2e-05 \
--batch_size <Batch size> \
--valid_batch_size <Valid set Batch size> \
--model <Model> \
--optimizer <Optimizer> \
--lr_decay_step 4 \
--val_ratio <Val ratio> \
--log_interval 20 \
--criterion <Criterion> \
--name <Model Name>

Inference

sh inference.sh

SM_CHANNEL_EVAL=/opt/ml/input/data/eval \
python inference.py \
--model <Model> \
--name <Model Name> \
--batch_size <Batch size>