То В этом примере показано, как использовать вейвлет, преобразовывает и нейронная сеть для глубокого обучения в модели Simulink(R), чтобы классифицировать сигналы ECG. Этот пример использует предварительно обученную сверточную нейронную сеть от Классифицировать Временных рядов Используя пример Анализа и Глубокого обучения Вейвлета Wavelet Toolbox™, чтобы классифицировать сигналы ECG на основе изображений от CWT данных временных рядов. Для получения информации об обучении смотрите, Классифицируют Временные ряды Используя Анализ Вейвлета и Глубокое обучение (Wavelet Toolbox).
Этот пример использует данные о ECG из Физиосетевой базы данных. Это содержит данные из трех групп людей:
Люди с сердечной аритмией (ARR)
Люди с застойной сердечной недостаточностью (CHF)
Люди с нормальными ритмами пазухи (NSR)
Это включает 96 записей от людей с ARR, 30 записей от людей со швейцарским франком и 36 записей от людей с NSR. ecg_signals
MAT-файл содержит тестовые данные о ECG в формате временных рядов. Классификатор изображений в этом примере различает ARR, швейцарский франк и NSR.
Блок-схему для алгоритмического рабочего процесса модели Simulink показывают.
Модель Simulink для классификации сигналов ECG показывают. Когда модель запускается, Video Viewer
блок отображает классифицированный сигнал ECG.
open_system('ecg_dl_cwtMDL');
ECG Preprocessing
подсистема содержит MATLAB Function
блокируйтесь, который выполняет CWT, чтобы получить scalogram сигнала ECG и затем обрабатывает scalogram, чтобы получить изображение. Это также содержит Image Classifier
блок из Deep Learning Toolbox™, который загружает предварительно обученную сеть от trainedNet.mat
и выполняет предсказание для классификации изображений на основе CNN глубокого обучения SqueezeNet.
open_system('ecg_dl_cwtMDL/ECG Preprocessing');
ScalogramFromECG
функциональный блок задает функцию под названием ecg_to_scalogram
это:
Использование 65 536 выборок данных о ECG с двойной точностью, как введено.
Создайте представление частоты времени от данных о ECG путем применяния преобразования Вейвлета.
Получите scalogram из коэффициентов вейвлета.
Преобразуйте scalogram в изображение размера (227 227 3).
Функциональная подпись ecg_to_scalogram
показан.
type ecg_to_scalogram
function ecg_image = ecg_to_scalogram(ecg_signal) % Copyright 2020 The MathWorks, Inc. persistent jetdata; if(isempty(jetdata)) jetdata = colourmap(128,'single'); end % Obtain wavelet coefficients from ECG signal cfs = cwt_ecg(ecg_signal); % Obtain scalogram from wavelet coefficients image = ind2rgb(im2uint8(rescale(cfs)),jetdata); ecg_image = im2uint8(imresize(image,[227,227])); end
ECG Postprocessing
Блок MATLAB function задает label_prob_image
функция, которая находит метку для изображения scalogram на основе самого высокого счета от баллов выведенной классификатором изображений. Это выводит изображение scalogram с меткой и доверием overlayed.
type label_prob_image
function final_image = label_prob_image(ecg_image, scores, labels) % Copyright 2020 The MathWorks, Inc. scores = double(scores); % Obtain maximum confidence [prob,index] = max(scores); confidence = prob*100; % Obtain label corresponding to maximum confidence label = erase(char(labels(index)),'_label'); text = cell(2,1); text{1} = ['Classification: ' label]; text{2} = ['Confidence: ' sprintf('%0.2f',confidence) '%']; position = [135 20 0 0; 130 40 0 0]; final_image = insertObjectAnnotation(ecg_image,'rectangle',position,text,'TextBoxOpacity',0.9,'FontSize',9); end
Чтобы проверить алгоритм и отобразить метки и оценку достоверности тестового сигнала ECG, загруженного в рабочей области, запустите симуляцию.
set_param('ecg_dl_cwtMDL', 'SimulationMode', 'Normal'); sim('ecg_dl_cwtMDL');
С GPU Coder™ можно ускорить выполнение модели на NVIDIA® графические процессоры и сгенерировать код CUDA® для модели. Смотрите Генерацию кода для Глубокого обучения Модель Simulink, чтобы Классифицировать Сигналы ECG (GPU Coder) для получения дополнительной информации.
Закройте модель Simulink.
close_system('ecg_dl_cwtMDL/ECG Preprocessing'); close_system('ecg_dl_cwtMDL');