B2I-GAN: Anomaly detection from imaged ECG using GAN
ECG(electrocardiogram) 데이터는 심장 및 혈관 장애 분석에 많이 쓰이는 데이터다. 이를 이용한 기존의 연구들은 일차원 상태인 원본 데이터를 사용해왔다. 우리는 STFT(Short-time Fourier transform)를 이용해 데이터를 이차원으로 확장시키고, 시간에 따른 주파수 영역의 분포를 분석하여 특징을 추출하여 분류하고, GAN을 이용해 비정상 데이터-생성된 정상 데이터의 차이를 보여줌으로서 어느 부분이 비정상인지 사용자에게 보여주고자 한다.
Dataset
해당 연구에 사용한 데이터는 MIT-BIH Arrhythmia Database이다. 이 데이터베이스는 다양한 종류의 심부전증을 나타내는 데이터를 포함하고 있으며 ECG 딥러닝 분야의 많은 연구에서 사용되어 왔다. 내부 데이터는 초당 360Hz로 sampling된 신호로, 우리는 이 전체 샘플 중 가장 특징을 잘 나타내는 II-lead에 대해 정상 신호(N) SVE (S), VEBs (V)를 앓고 있는 환자의 ECG 신호를 추출해 GAN의 입력 데이터로 사용하였다. 다운로드 링크는 아래와 같다.
다운받은 데이터는 /experiments/ecg/dataset/preprocessed/ano0 에 넣어준다.
Require
- Python 3
Packages
- PyTorch (1.0.0)
- scikit-learn (0.20.0)
- biosppy (0.6.1) # For data preprocess
- tqdm (4.28.1)
- matplotlib (3.0.2)
데이터 전처리
원본 데이터를 STFT로 변경하여 저장해야 한다. /experiments/ecg/dataset/preprocessed에 존재하는 change.py, change2.py를 하위 디렉토리 /ano0에 넣은 후 순서대로 실행하면 된다.
사용법
-
train/test를 정하기 위해 run_ecg.sh 파일을 수정해야 한다.
test 값이 0이면 train, 1이면 test이다. 실행의 명령어는
run_ecg.sh
파일이 존재하는 디렉토리에서 다음과 같이 입력한다.
/bin/bash run_ecg.sh
결과
Model | AUC | AP |
---|---|---|
AE | 0.8944 | 0.8415 |
AnoGAN | 0.8642 | 0.8035 |
Ganomaly | 0.9083 | 0.8701 |
BeatGAN | 0.9447 | 0.9143 |
B2I-GAN | 0.9460 | 0.9058 |