[DeepL Translation of dalgona039/fog-detection-semg]
파킨슨병 환자의 보행 동결(FOG) 탐지를 위한 하이브리드 딥러닝 및 개인화 모델 연구 프로젝트
**보행 동결(Freezing of Gait, FOG)**은 파킨슨병 환자가 보행을 시작하거나 방향을 전환할 때 발이 바닥에 붙은 것처럼 움직이지 못하는 현상으로, 낙상 사고의 주원인이 됩니다.
본 프로젝트는 **58채널의 멀티모달 생체 신호(sEMG, EEG, IMU)**를 융합하여 FOG 이벤트를 실시간으로 탐지하는 딥러닝 시스템을 구축합니다. 특히, 환자 간 생체 신호의 편차가 심한 문제를 해결하기 위해 **'일반화 모델(Generalized)'**과 **'개인화 모델(Personalized)'**의 성능을 비교 분석하고, 최적의 탐지 전략을 제시합니다.
- Multimodal Fusion: sEMG(근전도), EEG(뇌파), IMU(관성) 데이터의 융합 분석
- Model Comparison: CNN-LSTM(하이브리드) vs LSTM vs Random Forest 성능 비교
- Personalization: 환자별 맞춤형 학습을 통한 FOG 탐지 정확도(Recall) 극대화 (92.5% 달성)
본 프로젝트는 Mendeley Data의 공개 데이터셋을 활용하였습니다.
- 데이터셋 명: Multimodal Dataset of Freezing of Gait in Parkinson's Disease
- 출처 (DOI): 10.17632/r8gmbtv7w2.3
- 피험자: 파킨슨병 환자 12명
- 데이터 구성 (총 58채널, 500Hz Sampling)
- 🧠 EEG (25 ch): 뇌 활동 모니터링
- 💪 sEMG (5 ch): 다리 근육(Gastrocnemius, Tibialis Anterior 등) 활동 측정
- 👟 IMU (28 ch): 가속도(Acc), 자이로(Gyro) - 양발, 다리, 골반 부착
fog-detection-semg/
├── data/
│ ├── Labeled Data/ # 레이블링된 원본 데이터 (.txt, .csv)
│ ├── Preprocessed Data/ # 전처리(정규화, 다운샘플링) 완료된 데이터
│ └── Segmented Data/ # 시계열 윈도우(Sliding Window)로 분할된 데이터
├── notebooks/
│ ├── 01_initial_data_exploration.ipynb # 데이터 EDA, 시각화, 클래스 불균형 확인
│ ├── 02_deep_learning_models.ipynb # CNN-LSTM 및 LSTM 모델 학습 및 평가
│ ├── Randon_forest_pakinsin.ipynb # Random Forest 기반 ML 분류 실험
│ ├── multimodal_fog_model.keras # 학습 완료된 딥러닝 모델 파일
│ ├── model_history.npy # 학습 Loss/Accuracy 히스토리
│ ├── X_test_scaled.npy # 테스트용 입력 데이터 (전처리됨)
│ └── y_test.npy # 테스트용 정답 레이블
├── src/
│ └── fog_detection_semg/ # 데이터 로더 및 전처리 유틸리티 소스
├── tests/ # 유닛 테스트 코드
├── pyproject.toml # Poetry 의존성 설정 파일
└── README.md # 프로젝트 문서
- Python: >= 3.12
- Package Manager: Poetry
-
저장소 클론
git clone <repository-url> cd fog-detection-semg
-
Poetry를 이용한 의존성 설치
poetry install
-
가상환경 활성화
poetry shell
-
Jupyter Lab 실행
jupyter lab
- CNN-LSTM Hybrid:
- Conv1D: 다채널 센서 데이터의 공간적 특징(Spatial Feature) 추출
- LSTM: 시계열 데이터의 시간적 흐름(Temporal Feature) 학습
- Dropout (0.3): 과적합 방지
- Windowing: 1초 윈도우 (Window size 32 @ Downsampled 25Hz), 50% Overlap
FOG 탐지의 난제인 '환자 간 개인차'를 극복하기 위한 비교 실험 결과입니다.
| 모델 접근 방식 | 알고리즘 | 결과 (Recall) | 분석 |
|---|---|---|---|
| 일반화 모델 (Generalized) |
CNN-LSTM | ❌ Failure (21 ~ 57%) |
환자 A의 데이터로 B를 예측할 경우, 생체 신호 패턴의 차이로 인해 심각한 성능 저하 발생 |
| 개인화 모델 (Personalized) |
LSTM | ✅ Success (92.5%) |
특정 환자 데이터를 기반으로 미세 튜닝(Fine-tuning) 시 FOG 이벤트를 정확하게 포착 |
결론: 복잡한 모델보다 환자 맞춤형(Personalized) 학습 전략이 임상 적용에 훨씬 유효함을 입증했습니다.
- Language: Python 3.12
- Deep Learning: TensorFlow, Keras (>= 2.14.0)
- Machine Learning: Scikit-learn, Imbalanced-learn (SMOTE 등)
- Data Analysis: Pandas, NumPy, SciPy (Signal Processing)
- Visualization: Matplotlib, Seaborn
- Environment: Poetry, Jupyter Lab
학습된 .keras 모델을 로드하여 새로운 센서 데이터에 대한 추론을 수행할 수 있습니다.
import numpy as np
from tensorflow.keras.models import load_model
# 1. 모델 로드
model = load_model('notebooks/multimodal_fog_model.keras')
# 2. 테스트 데이터 로드 (형상: [samples, time_steps, features])
X_test = np.load('notebooks/X_test_scaled.npy')
# 3. 예측 수행
predictions = model.predict(X_test)
predicted_classes = (predictions > 0.5).astype(int)
print(f"Detected FOG Events: {np.sum(predicted_classes)}")- 멀티모달 데이터 전처리 파이프라인 구축
- CNN-LSTM 및 Random Forest 모델 비교 평가
- 개인화 모델의 유효성 검증 (Recall 92.5% 달성)
- 실시간 스트리밍 데이터 처리 (Real-time Inference)
- 모바일/임베디드 환경을 위한 모델 경량화 (TFLite)
- 웹 기반 보행 분석 대시보드 구축
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License.
Lee Won Seok
- Dept. of Biomedical Engineering, Kyung Hee University
- Contact: [icpuff83@khu.ac.kr]