BrainBuddyAI : Deep Learning Based Engagement Measuring Model (CNN → LSTM)
본 프로젝트에서는 CNN → LSTM 구조를 활용하여
영상 데이터를 기반으로 집중도를 측정하는 모델을 구현하고,
다양한 하이퍼파라미터 및 모델 구조 변경 실험을 통해 최적의 성능을 탐색하였습니다.
-
- Python 3.10.0
-
- PyTorch – 모델 구현 및 학습
- Torchvision – CNN 백본 및 이미지 변환
-
- OpenCV – 영상 프레임 처리
- Mediapipe FaceDetection – 얼굴 검출 및 크롭
-
- scikit-learn – 평가 지표 (F1, Recall, Confusion Matrix)
- Matplotlib – 학습 곡선, 혼동 행렬, 시각화
- UMAP-learn – 임베딩 차원 축소 및 시각화
├── EDA
│ ├── light_color_diff.py
│ ├── t_SNE.py
│ └── umap_features.py
├── datasets
│ ├── video_folder_dataset.py
└── models
│ ├── cnn_encoder.py
│ ├── engagement_model.py
│ └── face_crop.py
└── preprocessing
│ ├── pickle_labels/
│ ├── check_label.py
│ ├── extract_frames.py
│ ├── extract_test_frames.py
│ └── labeling.py
└── test1/
└── test2/
└── test3/
└── test4/
└── real_time.py
└── test.py
└── train.py
30프레임 시퀀스 -> CNN(MobileNetV3-Large) -> LSTM -> 집중여부(0/1)
python -m preprocess2.ext mediapipe로 facecrop 후 10초에 30frame씩 추출
python -m preprocess2.labeling (폴더 경로, 라벨) 값을 .pkl 에 저장
python train.py
- Epoch: 15
- Early Stopping patience: 4
- Batch size = 4
- Optimizer: AdamW
- Loss Function: BCEWithLogitsLoss + CosineAnnealingLR
- Gradient Accumulation = 8 step
| test set | Accuracy | Recall | F1 |
|---|---|---|---|
| AIhub test set | 0.8088 | 0.8690 | 0.8149 |
| 자체 개발 test set | 0.8103 | 0.8911 | 0.7993 |
모델 실험 과정에서는 AIHub의 데이터셋을, 최종 모델 평가에서는 팀원들이 직접 웹캠으로 촬영한 5분 내외의 자체 개발 test set을 사용하였습니다.
- "best_model.pt"를 다운로드
real_time.py의 CKPT_PATH에 해당 .pt 경로 지정python real_time.py
*T_WINDOW와 STRIDE_SEC를 바꾸어 윈도우 크기, 추론 시간을 조정할 수 있습니다.
*Defalut : 학습과정과 동일하게 T_WINDOW =30, STRIDE_SEC =5 따라서 집중도 화면의 결과값에는 대략 5초의 딜레이가 있습니다.

