Диагностика заболеваний по ЭКГ с помощью сверточных нейронных сетей
Характеристика аритмии как типичного типа сердечно-сосудистых заболеваний, который относится к любым изменениям нормальных ритмов сердца. Анализ особенностей применения сверточных нейронных сетей к задаче классификации данных электрокардиографии.
Рубрика | Медицина |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 18.07.2020 |
Размер файла | 1,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
26. data_loader = DataLoader(self, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers)
27. return data_loader
28.
29. def __len__(self):
30. return len(self.data)
31.
32.
33. def callback_get_label(dataset, idx):
34. return dataset[idx]["class"]
35.
36.
37. class EcgPipelineDataset1D(Dataset):
38. def __init__(self, path, mode=128):
39. super().__init__()
40. record = wfdb.rdrecord(path)
41. self.signal = None
42. self.mode = mode
43. for sig_name, signal in zip(record.sig_name, record.p_signal.T):
44. if sig_name in ['MLII', 'II'] and np.all(np.isfinite(signal)):
45. self.signal = scale(signal).astype('float32')
46. if self.signal is None:
47. raise Exception("No MLII LEAD")
48.
49. self.peaks = find_peaks(self.signal, distance=180)[0]
50. mask_left = (self.peaks - self.mode // 2) > 0
51. mask_right = (self.peaks + self.mode // 2) < len(self.signal)
52. mask = mask_left & mask_right
53. self.peaks = self.peaks[mask]
54.
55. def __getitem__(self, index):
56. peak = self.peaks[index]
57. left, right = peak - self.mode // 2, peak + self.mode // 2
58.
59. img = self.signal[left:right]
60. img = img.reshape(1, img.shape[0])
61.
62. return {
63. "image": img,
64. "peak": peak
65. }
66.
67. def get_dataloader(self, num_workers=4, batch_size=16, shuffle=True):
68. data_loader = DataLoader(self, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers)
69. return data_loader
70.
71. def __len__(self):
72. return len(self.peaks)
1. import json
2.
3. import cv2
4. from albumentations import Normalize, Compose
5. from albumentations.pytorch.transforms import ToTensorV2
6. from torch.utils.data import Dataset, DataLoader
7.
8. augment = Compose([
9. Normalize(),
10. ToTensorV2()
11. ])
12.
13.
14. class EcgDataset2D(Dataset):
15. def __init__(self, ann_path, mapping_path):
16. super().__init__()
17. self.data = json.load(open(ann_path))
18. self.mapper = json.load(open(mapping_path))
19.
20. def __getitem__(self, index):
21. img = cv2.imread(self.data[index]['path'])
22. img = augment(**{"image": img})['image']
23.
24. return {
25. "image": img,
26. "class": self.mapper[self.data[index]['label']]
27. }
28.
29.
30. def get_dataloader(self, num_workers=4, batch_size=16, shuffle=True):
31. data_loader = DataLoader(self, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers)
32. return data_loader
33.
34. def __len__(self):
35.
36. return len(self.data)
Приложение 7
1. import os
2. import os.path as osp
3. from datetime import datetime
4.
5. import numpy as np
6. import torch
7. from torch import optim, nn
8. from torch.utils.tensorboard import SummaryWriter
9. from tqdm import tqdm
10.
11. from utils.network_utils import load_checkpoint, save_checkpoint
12.
13.
14. class BaseTrainer:
15. def __init__(self, config):
16. self.config = config
17. self.exp_name = self.config.get('exp_name', None)
18. if self.exp_name is None:
19. self.exp_name = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
20.
21. self.log_dir = osp.join(self.config['exp_dir'], self.exp_name, 'logs')
22. self.pth_dir = osp.join(self.config['exp_dir'], self.exp_name, 'checkpoints')
23. os.makedirs(self.log_dir, exist_ok=True)
24. os.makedirs(self.pth_dir, exist_ok=True)
25.
26. self.writer = SummaryWriter(log_dir=self.log_dir)
27.
28. self.model = self._init_net()
29. self.optimizer = self._init_optimizer()
30. self.criterion = nn.CrossEntropyLoss().to(self.config['device'])
31.
32. self.train_loader, self.val_loader = self._init_dataloaders()
33.
34. pretrained_path = self.config.get('model_path', False)
35. if pretrained_path:
36. self.training_epoch, self.total_iter = load_checkpoint(pretrained_path, self.model,
37. optimizer=self.optimizer)
38.
39. else:
40. self.training_epoch = 0
41. self.total_iter = 0
42.
43. self.epochs = self.config.get('epochs', int(1e5))
44.
45. def _init_net(self):
46. raise NotImplemented
47.
48. def _init_dataloaders(self):
49. raise NotImplemented
50.
51. def _init_optimizer(self):
52. optimizer = getattr(optim, self.config['optim'])(self.model.parameters(), **self.config['optim_params'])
53. return optimizer
54.
55. def train_epoch(self):
56. self.model.train()
57. total_loss = 0
58.
59. gt_class = np.empty(0)
60. pd_class = np.empty(0)
61.
62. for i, batch in enumerate(self.train_loader):
63. inputs = batch['image'].to(self.config['device'])
64. targets = batch['class'].to(self.config['device'])
65.
66. predictions = self.model(inputs)
67. loss = self.criterion(predictions, targets)
68.
69. classes = predictions.topk(k=1)[1].view(-1).cpu().numpy()
70.
71. gt_class = np.concatenate((gt_class, batch['class'].numpy()))
72. pd_class = np.concatenate((pd_class, classes))
73.
74. total_loss += loss.item()
75.
76. self.optimizer.zero_grad()
77. loss.backward()
78. self.optimizer.step()
79.
80. if (i + 1) % 10 == 0:
81. print("\tIter [%d/%d] Loss: %.4f" % (i + 1, len(self.train_loader), loss.item()))
82.
83. self.writer.add_scalar("Train loss (iterations)", loss.item(), self.total_iter)
84. self.total_iter += 1
85.
86. total_loss /= len(self.train_loader)
87. class_accuracy = sum(pd_class == gt_class) / pd_class.shape[0]
88.
89. print('Train loss - {:4f}'.format(total_loss))
90. print('Train CLASS accuracy - {:4f}'.format(class_accuracy))
91.
92. self.writer.add_scalar('Train loss (epochs)', total_loss, self.training_epoch)
93. self.writer.add_scalar('Train CLASS accuracy', class_accuracy, self.training_epoch)
94.
95. def val(self):
96. self.model.eval()
97. total_loss = 0
98.
99. gt_class = np.empty(0)
100. pd_class = np.empty(0)
101.
102. with torch.no_grad():
103. for i, batch in tqdm(enumerate(self.val_loader)):
104. inputs = batch['image'].to(self.config['device'])
105. targets = batch['class'].to(self.config['device'])
106.
107. predictions = self.model(inputs)
108. loss = self.criterion(predictions, targets)
109.
110. classes = predictions.topk(k=1)[1].view(-1).cpu().numpy()
111.
112. gt_class = np.concatenate((gt_class, batch['class'].numpy()))
113. pd_class = np.concatenate((pd_class, classes))
114.
115. total_loss += loss.item()
116.
117. total_loss /= len(self.val_loader)
118. class_accuracy = sum(pd_class == gt_class) / pd_class.shape[0]
119.
120. print('Validation loss - {:4f}'.format(total_loss))
121. print('Validation CLASS accuracy - {:4f}'.format(class_accuracy))
122.
123. self.writer.add_scalar('Validation loss', total_loss, self.training_epoch)
124. self.writer.add_scalar('Validation CLASS accuracy', class_accuracy, self.training_epoch)
125.
126. def loop(self):
127. for epoch in range(self.training_epoch, self.epochs):
128. print("Epoch - {}".format(self.training_epoch + 1))
129. self.train_epoch()
130. save_checkpoint({
131. 'state_dict': self.model.state_dict(),
132. 'optimizer': self.optimizer.state_dict(),
133. 'epoch': epoch,
134. 'total_iter': self.total_iter
135. }, osp.join(self.pth_dir, '{:0>8}.pth'.format(epoch)))
136. self.val()
137.
138. self.training_epoch += 1
Приложение 8
1. future
2. torchvision==0.3.0
3. plotly==4.7.0
4. efficientnet_pytorch==0.6.3
5. numpy==1.17.3
6. wfdb==2.2.1
7. torch==1.1.0
8. tqdm==4.42.1
9. matplotlib==3.0.3
10. opencv_python==4.2.0.32
11. scipy==1.4.1
12. pandas==0.25.3
13. albumentations==0.4.3
14. scikit_learn==0.22.2.post1
15. tensorboard==1.14
Размещено на Allbest.ru
Подобные документы
Эпидемиология сердечно–сосудистых заболеваний и смертность. Основные факторы, группы крови и факторы риска развития заболеваний человека. Программа профилактики сердечно–сосудистых заболеваний. Профилактика сердечно-сосудистой патологии в России.
дипломная работа [237,9 K], добавлен 25.06.2013Основные симптомы сердечно-сосудистых заболеваний, причины их возникновения. Классификация сердечно-сосудистых заболеваний, их этиология и лечение. Роль сестринского персонала в профилактике и уходе за больными с сердечно-сосудистыми заболеваниями.
курсовая работа [106,5 K], добавлен 02.06.2014Причины и факторы риска сердечно-сосудистых заболеваний. Статистика смертности от сердечно-сосудистых заболеваний по Европе, распространенности курения, злоупотребления алкоголем. Необходимость изменения образа жизни в целях профилактики заболеваний.
презентация [1,2 M], добавлен 02.06.2014Факторы риска развития сердечно-сосудистых заболеваний. Гиперлипидемии как фактор риска, ССЗ. Предупреждение артериальной гипертензии. Методы профилактики ССЗ. Заболевания сердечно-сосудистой системы. Методика работы.
реферат [75,5 K], добавлен 23.01.2007Этиология и патогенез инфаркта миокарда. Динамика ранних маркеров кардионекроза в остром периоде инфаркта миокарда и коагулографические факторы риска развития тромбообразования. Основные методы ранней диагностики сердечно-сосудистых заболеваний.
дипломная работа [1016,2 K], добавлен 01.12.2014Определение сердечно-сосудистой системы. Основные причины, признаки и симптомы при сердечно-сосудистых заболеваниях: одышка, удушье, учащенное сердцебиение, боль в области сердца. Статистика заболеваний ССС по Казахстану. Основные методы их профилактики.
презентация [78,5 K], добавлен 23.11.2013Ишемическая болезнь сердца, инфаркт миокарда, сердечная недостаточность, гипертоническая болезнь. Факторы риска сердечно-сосудистых заболеваний. Профилактика гипертонии, диабета и повышенного уровня липидов в крови. Общие принципы рационального питания.
курсовая работа [204,7 K], добавлен 13.09.2015Лечебное применение электромагнитных волн миллиметрового диапазона. Эффект воздействия электромагнитных волн на биологические объекты. Лечение инфаркта миокарда и его осложнений. Применение КВЧ-терапии в лечении сердечно-сосудистых заболеваний.
реферат [134,8 K], добавлен 16.06.2011Индикаторы качества профилактической медицинской помощи. Роль и значение профилактического консультирования. Оценка качества профилактического консультирования по факторам риска сердечно-сосудистых заболеваний, на основе медико-социологического опроса.
курсовая работа [447,7 K], добавлен 21.08.2011Продолжительность жизни населения и летальность от сердечно-сосудистых заболеваний в России и странах мира. Дефиниция и критерии инфаркта миокарда. Рекомендации NACBLM по использованию биохимических маркеров для диагностики сердечных заболеваний.
презентация [1,4 M], добавлен 06.02.2011