1. 프로젝트 배경

Computer Vision을 배운 후 약 3일간 mini project를 진행하면서 만들게 되었다.

자주다니는 도서관 입구에 마스크착용 + 온도계 시스템이 있었는데, 배운 내용가지고도 충분히 만들 수 있을꺼 같아 해당 주제로 시작하게 되었다. 구글링 하니 비슷한 프로젝트가 있어, 참고하여 쉽게 만들 수 있었다.

 

2. 프로젝트 소개

마스크 착용, 미착용을 구분하는 판별기가 아닌, 코까지 올바르게 마스크를 착용 했는지 판단하는 판별기 이다.

https://youtu.be/wg2FaAc-0k4

검은색 마스크는 데이터셋에 없음

 

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

 

GitHub - jaesik103/Put-Up-your-MASK

Contribute to jaesik103/Put-Up-your-MASK development by creating an account on GitHub.

github.com

 

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을 사용하지 못했고, 해석하기 어려웠다.

가장 양호하다고 판단된 Learning rate = 0.001 의 그래프

 6-5. 모델검증이 어려웠다.

 

 6-6. 결과를 확인하면 0에폭부터 확률이 100%만 출력되는 것을 볼 수 있다. overfitting됐을 것이라 예측되지만, 표본이 적어서 발생하는 문제이고, 매우 잘 판별하고있다. overfitting을 피하려고 여러 모델들을 사용해 봤는데, 특이하게 colab에서 GPU를 통해 학습시킨 경우에 이런 현상이 잘 발생하였다. 중간에 튀는 값들은 아마 다양한 데이터를 넣으면서 몇몇 데이터가 노이즈로 인식되는 것 같다.

+ Recent posts