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