- 임의의 사진이 주어졌을 때, 나이, 성별, 마스크 착용 여부를 판단하는 모델 제작
- 해당 프로젝트를 이용한 시스템을 통해 적은 비용으로 마스크 정상 착용 여부를 판별할 수 있을 것으로 기대
- 20 ~ 70대 아시아인 4,500명에 대한 사진 7장( 착용 (5 장) , 잘못된 착용 (1 장) , 미착용 (1 장) )
- 해상도 : 384, 512
- 총 이미지 수 : 31,500장(Train 이미지 수 : 18,900장)
- V100(vram 32GB) 5개
- F1-score
고금강 | 문상인 | 박재민 | 박종서 | 주재영 |
---|---|---|---|---|
Github | Github | Github | Github | Github |
twinkay@yonsei.ac.kr | munsi2003@gmail.com | jemin7709@gmail.com | justin93820@gmail.com | wodud3851@gmail.com |
팀원 | 역할 |
---|---|
고금강_T5011 | EDA를 통한 data re-labeling 진행, 실험 수행 |
문상인_T5075 | 자동화를 위한 baseline 코드 구현, 실험 설계 및 분석 레포트 작성 |
박재민_T5089 | 자동화를 위한 baseline, shell script code 구현, Loss 및 TTA 구현 |
박종서_T5092 | 다양한 모델, Loss, Ensemble 코드 구현 및 검증 |
주재영_T5207 | 실험 수행 및 결과 로깅 및 관리 |
분류 | 내용 |
---|---|
Dataset | Mis-labeled data - 전수 조사를 통한 Mis-labeled data 발견 및 relabeling Class imbalance data - 마스크 착용 여부에 따른 데이터 불균형 (5:1:1) - 성별에 따른 데이터 불균형 (약 1:1.6) - 나이에 따른 데이터 불균형 (약 7:6:1) => age band 수정 =>class0 < 30, 30<= class1 < 59, 59<= class2 =>class0 < 30, 30<= class1 < 58, 58<= class2 =>class0 < 29, 29<= class1 < 58, 58<= class2 BackGround Subtraction - Dataset의 일부에서, 배경에 사람 얼굴이 존재함을 발견하고 'rembg'라는 오픈소스를 활용하여 배경 제거 |
Augmentation | CenterCrop - Female, 18~19세 상당수의 인원이 특정 클래스로 특정되는 옷(빨간색 트레이닝 복, 군복)을 입은 것을 확인 - centercrop을 사용하여 옷 정보를 최대한 제거 => CenterCrop(360,360)에서 가장 높은 성능을 보임 RandomHorizontalFlip RandomRotation RandomHorizontalFlip ColorJitter ToTensor Normalize |
Loss | Focal Loss - Class 불균형 문제가 있어 사용, 확실한 성능 향상 존재 Label Smoothing Loss - 초기 빠른 수렴과 overfitting 방지를 위해 사용, relabel 이후 다른 Loss들과 같이 사용했을 때 성능 향상 존재 F1 Loss - 평가지표가 F1 Score이었기 때문에 성능 향상이 있을 것이라 생각하여 사용 (1 - F1 Score)으로 구현 => 최종적으로 Focal Loss, Label Smoothing Loss, F1 Loss 모두 사용 (동일 가중치) |
Model | Resnet50 - Resnet50을 우선적으로 선택하고 Augmentation 실험을 진행하여 최적화 시켰으나, 타 모델에서는 같은 세팅에서 Resnet보다 낮은 성능을 보임 => 시간 부족의 이유로 Resnet을 그대로 사용하기로 결정 |
Fast Training skills | Mixed Precision(AMP) - 좀 더 빠른 학습과 최적화를 위해 사용 => 기존보다 많으면 절반 수준까지 메모리를 덜 사용하는 모습 확인 Scheduler - 기존 Cosine Annealing with Warm Restart(이하 CAWR)는 max값이 고정되어있기 때문에 기존에 사용 중인 StepLR대비 후반부의 안정적인 학습이 힘들 것이라 생각하여 사이클에 따라 max값을 줄여나가는 Custom CAWR 스케줄러를 사용 => 기존 대비 학습 종료 epoch이 절반으로 줄었고 학습 수렴 자체는 10배정도 빠르게 실험 가능 |
Ensemble & TTA | Ensemble - soft voting을 선택하여 구현 (softmax 사용) - age band 수정 1,3번 데이터, seed : 42, random 총 Resnet50 4개로 앙상블 진행 TTA - 모델의 틀린 예측을 최대한 방지하기 위해 TTA를 적용 - 5회 진행 |
pip install -r requirements.txt
./configs/queue 에 원하는 실험들의 config.json 파일 생성(base_config 이용) 후,
sh auto_trainer.sh
python inference.py