README.md 2.43 KB

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의 입력 데이터로 사용하였다. 다운로드 링크는 아래와 같다.

https://www.dropbox.com/sh/b17k2pb83obbrkn/AABF9mUNVdaYwce9fnwXsg1ta/ano0?dl=0&subfolder_nav_tracking=1

다운받은 데이터는 /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