카메라로 촬영한 사람 얼굴 이미지를 통해 연령,성별,마스크 착용 여부를 판단
김상렬 | 김태일 | 박세연 | 이재학 | 정시현 |
---|---|---|---|---|
Github | Github | Github | Github | Github |
ksl970330@naver.com | gimty97@gmail.com | maylilyo02@gmail.com | jaehahk810@naver.com | sh2298@naver.com |
팀원 | 역할 |
---|---|
김태일_T3063 | 데이터를 분포를 확인하는 EDA와 불균형한 데이터의 분포를 해결할 수 있는 방법 제시 |
박세연_T3091 | 적합한 Model 적용과 AMP를 포함한 Baseline 배포 |
이재학_T3161 | f1 loss 제안, 원본 데이터에서 모든 실험 담당 및 실험관리 검토 후 놓친 부분 실험 제안 |
김상렬_T3032 | miss labeling 데이터에 대한 정정, background 제거 코드 작성 |
정시현_T3198 | EDA를 통한 miss labeling, incorrect path 확인 및 Annotation 코드 작성 |
분류 | 내용 |
---|---|
프로젝트 주제 | 카메라로 촬영한 사람 얼굴 이미지를 통해 연령,성별,마스크 착용 여부를 판단 |
프로젝트 개요 | 부스트캠프 Level1-U stage 강의를 통해 배운 내용을 바탕으로, 모델을 설계하고 학습하며 추론을 통해 나온 결과를 바탕으로 순위 산정하는 방식 |
활용 장비 및 재료 | • GPU : Tesla V100 • 개발환경 : Jupyter Lab , VS code • 협업 tool ◦Notion : 회의록 정리 , Experiment Page 만들어서 실험 정리 및 공유 |
프로젝트 구조및 사용 데이터셋의 구조도(연관도) | • metric : Macro F1 Score • Data : ◦ 20~70대의 아시아인 남녀(4500명) |
기대 효과 | 사진 이미지 만으로 사람이 마스크를 올바르게 잘 썼는지 자동으로 가려낼 수 있는 시스템을 구현하고, 이 시스템이 공공장소 입구에 갖춰져 있다면 적은 인적자원으로도 충분히 검사가 가능할 것이다. |
분류 | 내용 |
---|---|
아키텍처 | 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) |
TTA(Test Time Augmentation) | • ColorJitter를 제외하면 train data와 상동 • Normalize ◦ mean : (0.20683326, 0.16344436, 0.15733106) |
데이터 | • 배경 제거, mislabeling 수정, 샘플링 적용 • ageband : (30,60) → (29,57) |
검증 전략 | SOTA 모델의 output.csv 파일을 비교하는 코드 구현하여 비교 |
앙상블 방법 | 상위 8개 score를 달성한 모델로 Hard Voting 앙상블 적용 |
모델 평가 및 개선 | Vit보다 파라미터 수가 적기에 오버피팅을 방지할 수 있었고, Lightning까지 적용한 후에는 학습시에 많은 시간을 단축 할 수 있었다(1epoch당 20분 → 8분). 또, Lightning를 통해 효율적으로 GPU를 이용할 수 있기에, image size를 384,384로 논문에 맞게 구현한 결과, 좋은 성능을 낼 수 있었다. |
pip install -r requirements.txt
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>
sh inference.sh
SM_CHANNEL_EVAL=/opt/ml/input/data/eval \
python inference.py \
--model <Model> \
--name <Model Name> \
--batch_size <Batch size>