프로젝트 개요
목적
마스크 착용 상태 분류
- 카메라로 촬영한 사람 얼굴 이미지의 마스크 착용 여부를 판단하는 Task
- 사람 얼굴 이미지를 학습하는 모델을 생성하여 성별, 마스크 착용 여부, 나이를 기준으로 18개의 클래스로 분류한다.
활용 장비 및 재료
-
개발 환경 : Aistages server, VScode, Jupyter NoteBook
-
협업 Tools : Git, GitHub, Wandb, TensorBoard
-
Dataset
입력값 : train data 2,700명 x 사진 7장 + evl data 12,600명 x 사진 1장 = 31,500jpg 파일
출력값 : 마스크 착용 여부(Wear / Incorrect / NotWear) [3 class],
성별(Male / Female) [2 class],
나이(~30, 30~60,60~) [3 class]
마스크 착용 여부 x 성별 x 나이 = [18 class]

프로젝트 구조
requirement.txt
train.py
inference.py
Model
Output
기대효과
- Pretrained resnet18 모델을 사용하여 75%의 accuracy 달성
- 데이터 불균형을 해소하기 위하여 cutmix 등 다양한 data augmentation을 통하여 accuracy 85% 달성
- 성능이 제일 잘 나온 2종류 모델을 선택하여 ensemble을 통한 성능 향상 기대
- 최종적으로 나온 모델이 카메라로 촬영한 사람 얼굴 이미지의 마스크 착용 여부를 높은 정확도로 판단할 수 있을 것으로 보임
프로젝트 팀 구성 및 역할
김대유 : baseline 기반 Wandb 추가 2 & 3 MultLable Model 설계 및 학습
이융희 : baseline 코드 리뷰 및 리팩토링 & EfficientNet Model Custom 및 hyper parameter 튜닝
정효재 : 데이터 탐색 후 수정 및 인사이트 도출
이상진 : 다양한 pretrained 모델 적용 및 테스트, github repository 구성, 팀원들이 만든 방법(Cutmix, Multi Label 등) 적용
백경륜 : Augmentation 기법 구현 및 Model 설계, 팀 프로젝트 관리 템플릿 작성
프로젝트 수행 절차 및 방법 (모듈별로 TDD 수행)
※ 모듈별 TDD 수행
전과 비교해, 새롭게 시도한 실험 및 효과
- 데이터 불균형을 해결하기위해 csv파일을 이용한 데이터 증강 및 Albumentation 적용으로 학습데이터를 증가시켰다. 마지막에는 Sampler를 이용해 데이터 불균형을 더 정확하게 극복할 수 있었다.
- 멀티레이블을 이용해서 모델의 결과가 하나로만 나오는 것이 아닌 여러 브랜치로 카테고리 별 결과가 나오고 이를 다시 최종 결과로 만들어 내는 경험을 했다
- 해당 문제에서 마스크 유무에 따라 결과를 뽑아내는 것이 더 좋을 것으로 판단했다. 그래서 먼저 resnet만을 이용해 기본적인 분류 문제를 해결한 모델을 가지고 멀티레이블을 이용한 3개의 브랜치로 나누어 결과를 뽑아내는 모델을 학습을 했었다. 이와 같이 구현했을 때 나이를 맞추는 모델이 가장 어렵다는 것을 알게되었고, 마스크는 99%에 가까운 성능을 보였다. 이를 보고 마스크의 유무를 먼저 판단 해서 이에 따른 나이와 성별 판단을 할 수 있는 아이디어를 제시하였다. 하지만 결과적으로 마스크 먼저분류한 것은 크게 의미가 없었다. 그 이유에 대해서 생각을 해본다면 먼저 resnet을 feature를 뽑게 되는데, 이미 학습된 resnet가 가중치를 두고 있는 feature는 얼굴 위의 부분들로(grad-cam으로 확인) 구성되어 있기 때문이라고 생각한다. 이를 해결하기 위해서는 데이터를 마스크 있는 것과 없는 것을 따로 나눠서 학습을 진행시켜, 이를 가지고 feature을 뽑는 것이 맞다고 생각한다.
마주한 한계와 아쉬웠던 점
- 일반화를 시키지 못했다는 점 그리고 문제가 생기고 정확도가 잘 나오지 못했을때 왜 나오지 못하는지 케이스 분석을 제대로 파악하지 못한다는 점
- 데이터 전처리에 더 집중하지 못했다는 점. 데이터 전처리에 따른 정확도 변화를 제대로 파악을 하지 못했다. 이를 위한 노력을 많이 하지 못했고, 어떻게 해야할 지 고민을 많이 못했다.
대회를 통해 깨달음 점