# Image objectation을 위한 yolov5
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
# Image classification을 위한 CNN 모델
https://drive.google.com/file/d/1-EUAMx7jI1h6dKuh-DaJircK2cCOGfjU/view?usp=sharing
Python>=3.7.0 environment, including PyTorch>=1.7., 화면 캡처가 가능한 Local 환경
1. git clone https://github.com/ultralytics/yolov5
2. yolov5/model 폴더에 CNN 모델 가중치 저장(~.h5)
3. yolov5 폴더에 yolov5s.pt 저장(yolov5 small 모델 가중치)
4. mv FinalModel.py ./yolov5
5. python FinalModel.py
Image Detection과 CNN을 활용한 비대면 수업 자동 출석체크 시스템
최종 출석체크 시스템은 크게 두 파트로 구성됩니다.
- Part1) Face Detection - 줌 화면에서 얼굴 영역을 인식하고, CNN모델이 인식하기 쉽도록 얼굴 이미지를 정규화합니다
- Part2) Face Classification - 누구의 얼굴인지 분류합니다.
Kaggle의 Face Mask Detection 데이터셋과 직접 크롤링한 데이터 총 1,000여장에 데이터 증강을 적용하여 최종 6,527장의 데이터셋을 확보했습니다. 이때, 이목구비의 위치를 바꿔 정확도를 떨어트릴 것이라는 가설을 바탕으로 vflip과 rotation 기법은 제외하고, hflip과 grayscale 기법만을 적용하여 학습을 진행했습니다.
객체의 class와 위치(Bounding Box)를 빠르게 찾는 Yolov5의 pre-trained model을 가져와 줌 화면 속 다양한 얼굴들-마스크를 쓴 얼굴, 측면만 나온 얼굴 등-을 인식할 수 있게 학습시켰습니다.
Yolov5로 인식한 얼굴을 CNN모델이 보다 더 잘 얼굴로 인식할 수 있게, FaceLandmark를 통해 얼굴의 이목구비 위치를 동일하게 정렬했습니다.
출석여부를 판단하기 위해 Yolov5로 인식한 얼굴이 누구의 얼굴인지 분류할 수 있는 4층 CNN 모델을 만들었습니다.
CNN모델을 학습하기 위해선 실제 수강생들의 얼굴 이미지 데이터셋이 수집되어야 합니다. 해당 프로젝트에서는 팀원 6명의 다양한 얼굴 이미지를 확보하기 위해 동영상을 촬영한 뒤 프레임 단위로 이미지를 추출했습니다.
- Convolutional Layer 4층, 활성함수는 ReLU, Optimizer는 Adam, Dropout 적용
10 epoch 훈련한 뒤, Test set에 대한 예측 정확도입니다.
최종 출석체크 시스템의 로직은 다음과 같습니다.