팀 명 : 미니배치28
팀 소개 : 현재 최선의 선택을 하는 미니배치28
🔎 프로젝트 : Mask 착용 상태 분류하기
📅 기간 : 2021.08.23 ~ 2021.09.03 (12 일)
1. 프로젝트 개요
1-1 Background (체크)
- 바이러스 확산으로 인한 세계적으로 생산적 활동에 제약
- 비말을 통한 호흡기 감염으로 전염력 큼
1-2 Needs
- 인적자원 Loss를 최소화 하기 위한 Mask 착용여부를 가려내는 System 구축 필요
1-3 Task
- 사람 얼굴 이미지 18 classes multi-label classification (마스크 착용 여부, 성별, 나이)
- 평가 기준 : 18개 Class에 대한 F1 Score
1-4 교육 내용과의 관련성
- 이미지 분류 딥러닝 모델의 성능, 훈련 과정, 최적화 방법 확인, 머신러닝 엔지니어링 역량 강화
1-5 활용 장비 및 재료(개발 환경 등)
- AI Stage server (GPU V100), wandb(log 기록), Github(코드 공유), slack & zoom(소통)
2. 프로젝트 팀 구성 및 역할
Untitled
공통 역할 : 각자 개발한 모델 시뮬레이션, 개선 방법 공유 및 토론, 모델 ensemble
3. 프로젝트 수행 절차 및 방법
3-1 프로젝트의 사전 기획
- Imagenet SOTA 모델 사전 조사 및 공유 (Parameter 수 고려)
- 이미지 분류 방법론 & 아이디어 탐색
3-2 프로젝트 수행 (21.08.23 ~ 21.09.01)
- EDA에 기반한 데이터 전처리
- 모델 개발 및 성능 비교
- 개발 현황 공유
- 적용할 만한 기법 공유 → 외부 데이터, Augmentation, Hyperparameter 탐색, Ensemble, Test Time Augmentation
3-3 완료 과정 (21.09.02 ~ 21.09.03)
- 개발한 모델들 중 성능이 높은 모델들로 Ensemble 진행
- Github에 팀 소스 코드 병합 및 모듈화
- 프로젝트 문서화 및 README 파일 작성
4. 프로젝트 수행 결과
4-1 탐색적 분석 및 전처리 (학습데이터 소개)
전체 데이터셋
- 전체 사진 : 31,500장 (4,500 명 $\times$ 7장)
- 한 사람당 사진 구성 : 7장 [마스크 착용 5장, 오착용(코스크, 턱스크) 1장, 미착용 1장], 384 x 512 사진
- 학습, 평가 데이터셋은 전체 데이터셋의 각 60%(2,700명), 40%(1,800명) (평가 데이터셋 public, private 1:1, private 기준으로 최종 순위 결정)
분석 및 전처리
- 데이터 불균형 확인 → 훈련 데이터셋 18900장 중 60대 이상은 3052장 (약 16%)으로 비중이 작음
- 데이터 노이즈 발견 및 변경(ref. AI stage 토론게시판) → 8명 gender labeling error, 3명 mask labeling error
- 이미지 배경의 특이성 발견 → 다수의 60대 이상 이미지 배경에 붉은 글자 확인
4-2 모델 개요
-
EfficientNet
Compound scaling : 모델의 Length(레이어 깊이), Width(Feature 채널), Resolution을 확장
Inverted bottle neck (mobilenet v2) : Bottle neck에 Residual connection 적용
Separable convolution : Depth wise, Point wise convolution
4-3 모델 선정 및 분석
Soft-voting Ensemble (Model Weight : 모델1 $\times$0.9, 모델2, 모델3, 모델4, 모델5)
Ensemble Model
4-4 모델 평가 및 개선
평가방법
Stratified Validation set으로 제출 모델 선정, 제출 후 test 성능 확인
개선사항
Class 구분에 방해되는 데이터 노이즈 제거(배경에 반복되는 문자 등) → Facecrop 활용하여 입력 이미지 배경 최소화
데이터 불균형에 대한 문제 해결 필요 → Model 훈련 시 Class 별 가중치 적용, (58세, 59세)를 60대에 포함시켜 60대 데이터가 무시되는 것을 방지
Epoch별로 confusion matrix를 출력해보며 현재 모델이 class별로 얼마나 학습이 잘 되어가는지 파악
4-5 시연 결과
- 제출 모델로 왼쪽 이미지들을 판별한 결과, 성별, 마스크 착용 여부를 정확히 구분하였다.
- HYH, MRC는 30대인데 30대 미만 그룹으로 분류하였음. (동안인 것으로 판단됨)
5. 자체 평가 의견
5-1 잘한 점들
- 개개인의 시뮬레이션으로 많은 모델을 시도하여 프로젝트 초기에 잘 동작하는 모델 발견
- Validation set 통일로 submission 없이 자체적인 성능 평가가 가능
- 전체 팀원들 WandB 사용을 통한 기록에 대한 비교 및 feedback
- 다양한 Ensemble 방법 시도
5-2 시도 했으나 잘 되지 않았던 것들
- TTA, Pseudo Labeling, 추가 외부 데이터 적용 → 다양한 크기의 추가 데이터 전처리 통일 및 기존 파이프 라인에 불완전한 적용
- 마스크, 나이, 성별을 따로 예측하는 모델의 성능을 많이 끌어올리지 못함 (라벨이 3, 3, 2개로 나눠지기 때문에 cutmix와 같은 라벨링이 고려되는 augmentation 적용이 까다로웠음)
5-3 아쉬웠던 점들
- ensemble에 적용할 추가적인 고득점 모델 재구현 실패
- 초기 시뮬레이션과 baseline 코드로 모듈화 했을 때의 구현 차이를 일치시키지 못함 → 실험 시작 전에 코드 테스트 수행의 필요
- Augmentation, Loss, Learning rate, Batch size, 전처리 이미지 해상도 등의 하이퍼 파라미터들의 개별적인 효과 검증의 부재 → 데이터셋 파이프 라인, 모델 훈련, 성능 검증의 반복 가능한 구현, 체계적인 실험의 필요
- Ensemble 미세조정으로 인한 테스트 데이터(public) 오버피팅 → 제출 모델 선정시 Generalization 고려할 것