# K-AI팀 Wrap 리포트
| 프로젝트 이름 | 팀소개 (K-AI) | 날짜 |
| -------- | -------- | -------- |
| Mask classification | All for one, One for all | 2021.9.3 |
## 프로젝트 개요
### 1. 프로젝트주제
<center><img src="https://i.imgur.com/T9RxL0d.png" width="70%" height="70%"></center>
- 코로나 시대에 마스크를 제대로 착용하여 확산을 방지하고자 함
- 사람 얼굴 이미지 만으로 마스크를 쓰고 있는지, 쓰지 않았는지, 정확히 쓴 것이 맞는지 자동으로 가려낼 수 있는 모델 구현
#### 주요 이슈
- Data 불균형, Small Dataset, Model Architecture, Loss, Augmentation
### 2. 프로젝트 개요(프로젝트 구현 내용, 컨셉, 교육 내용과의 관련성 등)
- Python IDLE 형식의 프로젝트로 파이토치 딥러닝 모델 구요
- 이론으로 학습한 내용을 직접 대회에 적용하여 실전에 도모하고자 함.
### 3. 활용 장비 및 재료(개발 환경 등)
- Pytorch, vscode, 개인별 V100 서버
### 4. 프로젝트 구조
- 구성: Dataset, Evaluation, Inference, Loss, Model, Train
- Train 실행 시 설정은 따로 argument값을 넣도록 구현
- 미리 지정된 argument값은 sh파일로 분리
- 모델학습결과는 model폴더에 저장됨
### 5. 기대 효과
#### 사회적 측면
- 건물 출입시 마스크 체크하는 비용을 절감할 수 있다.
- CCTV등 공공장소에서 적용할 경우 마스크를 제대로 착용하지 않은 다수의 인원을 적발함으로써 코로나확산을 사전에 방지할 수 있다.
#### 참여자 측면
- 대회를 진행하면서 자신의 생각과 다른 부분을 직접 경험한다.
- 협업과정 중 일어나는 문제들을 해결하며 성장한다.
- 실전을 통해서 학습한 내용을 시도하고 개선한다.
## 프로젝트 팀 구성 및 역할
- T2001_강석민 : 코드 총 책임자, 문서관리 담당
- T2007_고지호: 데이터 전처리, augmentation 실험
- T2065_김태욱(팀장): 베이스라인 구현, 팀 리딩 및 모델 성능에 기여
- T2066_김태현 : 사람별, class별 Stratify dataset 구현 및 각종 hyperparameter별 실험 결과 공유
- T2143_윤종원 : facenet, 데이터 정제
- T2249_오하은: CutMix 구현 및 Facenet Crop구현 진행
- T2214_조준희 : focal + label smoothing, multi-label classification
## 프로젝트 수행 절차 및 방법
- 수행 기간: 21/08/23 ~ 21/09/03, 총 2주
- 1주차: Competition, Data Feeding, Model, Training, Ensemble & Tip 학습
- 2주차: 가볍게 본 이론을 바탕으로 실전에서 다양한 방법론 적용
## 프로젝트 수행 결과
- 탐색적 분석 및 전처리 (학습데이터 소개)
| train data | test data | ext data |
| -------- | -------- | -------- |
| 18900개 | 12600개 | 153개 |
- 모델 개요
- CNN
- 모델 선정 및 분석
- 아키텍처: Efficient Net b7
- LB점수: 0.729
- training time augmentation
- Resize(), CenterCrop(), HorizontalFlip(), ShiftScaleRotate(), GaussNoise(), Normalize()
- img_size = 384 x 384
- Optimizer: Adam
- criterion: focal
- learning rate: 0.00003
- 추가 시도
- mask, age, gender 각각을 나누어 학습 후 class 구분
- 모델 평가 및 개선
- 앙상블 & Hard Voting 시도
- 하이퍼파라미터 최적화(optuna 적용), freeze 적용 시도
- focal loss, label smoothing, f1 score를 섞어서 loss func 개선 시도
- Multi sample drop, CutMix, Mixup 시도
- Multi labeling 시도
- 시연 결과

## 자체 평가 의견
### 잘한 점들
- 외부데이터를 추가로 사용한 점
- Jupyter Notebook 탈출, 앙상블, Multi sample dropout, CutMix, Mixup 등 스페셜 미션을 전부 실험한 점
- 협업과정에서 모르는 부분을 꼼꼼히 복습한 점
- 마찰없이 사이좋게 협력한 점
### 시도 했으나 잘 되지 않았던 것들
- 베이스라인코드 최적화
- Train.py의 함수 하나가 너무 길어서 나누려 했으나, 이거 하나로 진행이 멈출 가능성이 있어서 그만둠
- K-Fold Validation
- 잘 구현된 모듈이 있지만, 직접 구현하는 것은 제대로 못하였다.
### 아쉬웠던 점들
- Optuna를 구현했으나 제대로 적용하지 못한점
- 마스크를 토대로 나이와 성별 분리를 시도하지 못한점
- 서버를 소중히 하지않아서 서버가 자주 터진 점