1. 프로젝트 배경
Computer Vision을 배운 후 약 3일간 mini project를 진행하면서 만들게 되었다.
자주다니는 도서관 입구에 마스크착용 + 온도계 시스템이 있었는데, 배운 내용가지고도 충분히 만들 수 있을꺼 같아 해당 주제로 시작하게 되었다. 구글링 하니 비슷한 프로젝트가 있어, 참고하여 쉽게 만들 수 있었다.
2. 프로젝트 소개
마스크 착용, 미착용을 구분하는 판별기가 아닌, 코까지 올바르게 마스크를 착용 했는지 판단하는 판별기 이다.
3. 프로젝트 과정
구분 | 기간 | 활동 | 비고 |
주제 선정 | 03/07(월) | 주제 선정 | |
모델 및 툴 선정 | 03/08(화) | CNN 모델 선정 및 데이터 수집 툴 선정 |
전이학습 공부 |
데이터 셋 선정 | 03/08(화), 03/10(목) | 요구되는 데이터 선정 | 모든 마스크 종류마다 데이터 준비 |
모델링 | 03/10(목) | 모델 구현 | |
데이터 및 모델 수정 | 03/10(목) | 데이터 표본 다양화 및 fine tuning |
-두 개의 마스크 종류 데이터만 준비 -여러 모델 비교 분석 |
발표 | 03/11(금) | 발표 | |
총 개발기간 | 03/07(월)~03/10(목)(총 3일) | 03/09(수) 공휴일 |
4. 프로젝트 구성
1. webcam을 통해 10프레임마다 이미지를 저장하여 모델의 데이터셋 생성
2. InceptionResNetV2 모델 전이학습을 통해 판별기 훈련
2-1. InceptionResNetV2의 imagenet Weight 그대로 사용, 시작과 마지막 Layer만 제거
2-2. fine-tuning
- Layer 추가
- Learning rate 값 정하기
- epochs, batch_size 값 정하기
- EarlyStopping으로 overfitting 방지
3. openCV로 결과값 출력
5. 소스코드
로컬에선 학습시간이 오래걸려, colab에서 GPU를 사용해 따로 학습시켰다.
https://github.com/jaesik103/Put-Up-your-MASK
6. 프로젝트 리뷰
6-1. fine-tuning을 통해 성능을 올릴 수 있지만, 아무리 성능을 좋게 뽑아도 손으로 마스크처럼 얼굴을 가린다거나, 비슷한 사물로 마스크처럼 위장하여 얼굴을 가릴때를 잘 구분하지 못했다. fine-tuning보단 모델이 헷갈릴 수 있을만한 다양한 데이터셋을 준비하는 것이 더 유용한 것 같다.
6-2. 해당 프로젝트 데이터셋은 마스크:250장 / 노마스크:300장 이었는데도 불구하고 충분히 시제품으로 사용할 수 있을만한 성능을 보였다.
6-3. 300줄이 안되는 코드로도 좋은 프로그램을 만들수 있었다.
6-4. 어떤 Layer, Learning rate, epochs, batch_size 가 더 적절한지 알아내기 힘들었다. 특히, 해당 모델은 적은 epochs(1~2)으로도 accuracy가 금방 1로 수렴해버려 epoechs를 늘리는게 의미가 있었나 싶지만, 중간에 튀는 값이 있어 EarlyStopping을 사용하지 못했고, 해석하기 어려웠다.
6-5. 모델검증이 어려웠다.
6-6. 결과를 확인하면 0에폭부터 확률이 100%만 출력되는 것을 볼 수 있다. overfitting됐을 것이라 예측되지만, 표본이 적어서 발생하는 문제이고, 매우 잘 판별하고있다. overfitting을 피하려고 여러 모델들을 사용해 봤는데, 특이하게 colab에서 GPU를 통해 학습시킨 경우에 이런 현상이 잘 발생하였다. 중간에 튀는 값들은 아마 다양한 데이터를 넣으면서 몇몇 데이터가 노이즈로 인식되는 것 같다.