一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用NVIDIA Jetson開發(fā)AI數(shù)字健康應(yīng)用程序

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:NVIDIA ? 2022-04-27 10:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

傳統(tǒng)的醫(yī)療保健系統(tǒng)有大量的病人數(shù)據(jù),包括生理信號(hào)、醫(yī)療記錄、提供者注釋和評(píng)論。開發(fā)數(shù)字健康應(yīng)用程序所面臨的最大挑戰(zhàn)是分析大量可用數(shù)據(jù),得出可操作的見解,以及開發(fā)可在嵌入式設(shè)備上運(yùn)行的解決方案。

在開發(fā)這樣的端到端解決方案時(shí),從事生物醫(yī)學(xué)數(shù)據(jù)集工作的工程師和數(shù)據(jù)科學(xué)家經(jīng)常遇到挑戰(zhàn),因?yàn)樗麄儽仨毷謩?dòng)集成應(yīng)用程序代碼,與必要的工具鏈集成以進(jìn)行部署,在許多情況下,還必須重寫代碼以在目標(biāo)硬件上運(yùn)行應(yīng)用程序。如果算法不能產(chǎn)生預(yù)期的結(jié)果,他們必須調(diào)試底層案例,這可能會(huì)很耗時(shí)。

這篇文章討論了數(shù)據(jù)科學(xué)家和工程師如何使用 NVIDIA gpu 為生物醫(yī)學(xué)應(yīng)用開發(fā)基于人工智能的數(shù)字健康算法原型,并在嵌入式物聯(lián)網(wǎng)和邊緣人工智能平臺(tái)(如 NVIDIA Jetson 開關(guān) )上部署這些算法。您還可以使用 MathWorks GPU 編碼器在 Jetson 上部署預(yù)測(cè)管道。

解決的目標(biāo)是訓(xùn)練一個(gè)分類器來(lái)區(qū)分心律失常( ARR )、充血性心力衰竭( CHF )和正常竇性心律( NSR )。本教程使用從以下三個(gè)組或類獲得的 ECG 數(shù)據(jù):

心律失?;颊?/p>

充血性心力衰竭患者

竇性心律正常的人

該示例使用 來(lái)自三個(gè) PhysioNet 數(shù)據(jù)庫(kù)的 162 個(gè)心電圖記錄 ,每個(gè)記錄有 65536 個(gè)樣本:

MIT-BIH 心律失常數(shù)據(jù)庫(kù): 96 次記錄

BIDMC 充血性心力衰竭數(shù)據(jù)庫(kù): 30 個(gè)記錄

正常竇性心律數(shù)據(jù)庫(kù): 36 次錄音

要運(yùn)行此示例,您需要以下資源:

MATLAB

小波工具箱

訊號(hào)處理工具箱

并行計(jì)算工具箱

GPU 編碼器

MATLAB 編碼器

NVIDIA GPU 的 GPU 編碼器支持包

請(qǐng)求產(chǎn)品試用 或發(fā)送電子郵件至 medical@mathworks.com 。

開發(fā)基于人工智能的數(shù)字健康應(yīng)用程序的總體工作流程

建立心電信號(hào)預(yù)測(cè)模型的方法很多。這篇文章的重點(diǎn)是探索一個(gè)簡(jiǎn)化的工作流程,它結(jié)合了信號(hào)處理方面的進(jìn)展,并利用了在開發(fā)卷積神經(jīng)網(wǎng)絡(luò)( CNNs )和 ECG 信號(hào)分類的深度學(xué)習(xí)體系結(jié)構(gòu)方面已經(jīng)完成的大量工作。圖 1 顯示了整個(gè)工作流。

poYBAGJopB2Adc1cAACVGqYJ5H4650.jpg

圖 1 基于人工智能的數(shù)字健康應(yīng)用的總體工作流程。

這里的主要思想是從 ECG 信號(hào)生成時(shí)頻表示,并將這些表示保存為圖像。 ECG 的時(shí)頻表示捕獲了 spe CTR al 成分隨時(shí)間的變化。這些圖像可以用來(lái)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)( CNNs )。 CNNs 可以從圖像中的模式( ECG 信號(hào)的時(shí)頻表示)中提取特征,并且可以建立一個(gè)模型來(lái)區(qū)分屬于不同類別的 ECG 信號(hào)。

開發(fā)模型之后,就可以在嵌入式硬件(如 Jetson )上部署 pipeline : time-frequency 表示和經(jīng)過(guò)訓(xùn)練的模型,以便使用 GPU 編碼器對(duì)新信號(hào)執(zhí)行推斷。 GPU 編碼器根據(jù) MATLAB 算法自動(dòng)生成優(yōu)化的 CUDA 代碼。

使用 NVIDIA Quadro RTX 6000 加速時(shí)頻表示

下面是如何從 ECG 記錄中生成時(shí)頻表示。雖然 MATLAB 中有幾種方法可以從信號(hào)中生成時(shí)頻表示,但我們強(qiáng)烈建議使用連續(xù)小波變換( CWT ),因?yàn)樗?jiǎn)單且能夠從信號(hào)中生成清晰的時(shí)頻表示。由此產(chǎn)生的時(shí)頻表示也被稱為 scalogram

CWT 是通過(guò)對(duì)信號(hào)進(jìn)行加窗處理而得到的,小波經(jīng)過(guò)時(shí)間縮放和移位。小波是振蕩的,可以是復(fù)值的。對(duì)原型小波進(jìn)行了尺度變換和移位運(yùn)算。 CWT 中使用的縮放可收縮和拉伸原型小波:

縮小原型子波可以產(chǎn)生短時(shí)間、高頻子波,這些子波能夠很好地檢測(cè)瞬態(tài)事件。

拉伸原型子波會(huì)產(chǎn)生長(zhǎng)持續(xù)時(shí)間的低頻子波,這些子波擅長(zhǎng)于隔離長(zhǎng)持續(xù)時(shí)間的低頻事件。

pYYBAGJopB6ADk6qAAHDOCtNgdI776.png

圖 2 正常竇性心律( NSR )和充血性心力衰竭( CHF )的標(biāo)度圖。

擁有這樣清晰的時(shí)頻表示可能很有用,因?yàn)樯疃染W(wǎng)絡(luò)或 cnn 擅長(zhǎng)從這種表示中提取特征并建立預(yù)測(cè)模型。使用清晰的時(shí)頻表示法的另一個(gè)好處是,它使您能夠構(gòu)建模型來(lái)捕捉細(xì)微的變化,這些變化反過(guò)來(lái)有助于區(qū)分許多信號(hào)類別,即使這些信號(hào)看起來(lái)相似。

為了加快比例圖的生成過(guò)程,如果將輸入變量轉(zhuǎn)換為 gpuArray 類型,則可以在 gpu 上運(yùn)行 MATLAB 函數(shù)。然后可以使用 gather 函數(shù)從 GPU 檢索輸出數(shù)據(jù)。為了加快尺度圖的生成過(guò)程,使用函數(shù) cwtfilterbank 創(chuàng)建一次小波濾波器組,然后使用 cwtfilterbank 的小波變換方法生成時(shí)頻表示。

我們使用 NVIDIA Quadro RTX 6000 來(lái)計(jì)算標(biāo)度圖,并且能夠?qū)崿F(xiàn)約 6.5 倍的加速。使用的 CPUIntel Xeon CPU E5-1650 v4 @ 3 .60 GHz ,帶有 64 GB RAM 。

useGPU = false;
tic;
X = helperTimeScalogramConversion(ECGData, useGPU);
Tcpu = toc;
 
 
function X = helperTimeScalogramConversion(ECGData, useGPU)
 
data = ECGData.Data;
[Nsamples,signalLength] = size(data);
 
fb = cwtfilterbank('SignalLength',signalLength,'VoicesPerOctave',12);
X = zeros(numel(fb.scales), signalLength, Nsamples);
 
r = size(data,1);
 
if useGPU
    data = single(gpuArray(data));
else
    data = single(data);
end
 
for ii = 1:r
    cfs = abs(fb.wt(data(ii,:)));
    X(:,:,ii) = gather(cfs);
 
end
end
Using GPU: false
Number of signals: 162
-------------------------------------
Total execution time Tcpu =   67.32 s
-------------------------------------
Using GPU: true
Number of signals: 162
-------------------------------------
Total execution time Tgpu =   10.28 s
-------------------------------------

圖 3 CPU 與 GPU 的比例圖執(zhí)行速度。

從命令行輸出和生成的繪圖中,您可以看到使用 gpu 會(huì)導(dǎo)致顯著的加速( 6 。 5 倍)。當(dāng)您有多個(gè)信號(hào)時(shí),這將非常有用。稍后,您將看到,在 GPU 上生成比例圖的能力將是在 Jetson 平臺(tái)上開發(fā)應(yīng)用程序的關(guān)鍵因素。

利用 Quadro RTX 6000 訓(xùn)練 CNNs 對(duì)心電信號(hào)進(jìn)行分類

現(xiàn)在您已經(jīng)有了 ECG 信號(hào)的時(shí)頻圖像,您可以在預(yù)訓(xùn)練的深度學(xué)習(xí)網(wǎng)絡(luò)上應(yīng)用轉(zhuǎn)移學(xué)習(xí)來(lái)構(gòu)建分類器。在這個(gè)例子中, retain SqueezeNet 是一個(gè) 18 層的深度網(wǎng)絡(luò),它訓(xùn)練了超過(guò)一百萬(wàn)張圖像。這是一個(gè)輕量級(jí)的網(wǎng)絡(luò),具有更低的內(nèi)存占用和更好的推理速度,這些特性非常適合嵌入式部署。該網(wǎng)絡(luò)最初訓(xùn)練了 1000 個(gè)圖像類,但是您可以使用三個(gè) ECG 圖像類數(shù)據(jù)集對(duì)網(wǎng)絡(luò)進(jìn)行微調(diào),以構(gòu)建新的分類器。

首先,檢查原始網(wǎng)絡(luò),它包含 18 層,包括卷積、 ReLU 和 fire block (卷積和 ReLU 層的組合)。圖 4 顯示了通過(guò)運(yùn)行以下命令在 MATLAB 中顯示的層的代碼示例:

analyzeNetwork(squeezeNet)

圖 4 擠壓網(wǎng)網(wǎng)絡(luò)結(jié)構(gòu)。

為了重新訓(xùn)練 SqueezeNet 對(duì)三類 ECG 信號(hào)進(jìn)行分類,用一個(gè)新的卷積層替換最后的 conv10 層,濾波器的數(shù)目等于 ECG 類的數(shù)目。另外,用一個(gè)沒有類標(biāo)簽的新層替換分類層。

sqz = squeezenet;
lgraph = layerGraph(sqz);
lgraph.Layers(end-4:end)

圖 5 最后 5 層原擠壓網(wǎng)。
numClasses = 3; % Number of ECG signal classes new_conv10_WeightLearnRateFactor = 1;
new_conv10_BiasLearnRateFactor = 1;
newConvLayer = convolution2dLayer(1,numClasses,...
        'Name','new_conv10',...
        'WeightLearnRateFactor',new_conv10_WeightLearnRateFactor,...
        'BiasLearnRateFactor',new_conv10_BiasLearnRateFactor);
lgraph = replaceLayer(lgraph,'conv10',newConvLayer);
newClassLayer = classificationLayer('Name','new_classoutput');
lgraph = replaceLayer(lgraph,'ClassificationLayer_predictions',newClassLayer);
lgraph.Layers(end-4:end)

圖 6 擠壓網(wǎng)的改良層。

圖 7 以 jpeg 格式保存的 ECG 信號(hào)的時(shí)頻表示。

對(duì)于深度學(xué)習(xí)培訓(xùn),現(xiàn)在可以將保存為 JPEG 的 ECG 標(biāo)度圖數(shù)據(jù)的圖像加載到相應(yīng)的文件夾 ARR 、 CHF 和 NSR 中(圖 7 )。有關(guān)用于將比例圖數(shù)據(jù)保存為 JPEG 圖像的腳本的詳細(xì)信息,請(qǐng)參閱 基于小波分析和深度學(xué)習(xí)的時(shí)間序列分類 。

imageDatastore 函數(shù)用于為這些圖像創(chuàng)建一個(gè)圖像數(shù)據(jù)存儲(chǔ),其標(biāo)簽名稱來(lái)自各個(gè)文件夾名稱,并分為訓(xùn)練( 70% )、驗(yàn)證( 10% )和測(cè)試( 20% )子集。您還將 readFcn 對(duì)象與數(shù)據(jù)存儲(chǔ)相關(guān)聯(lián),以自動(dòng)將圖像大小調(diào)整為 227x227x3 ,并滿足 squezenet 輸入圖像的要求。

readFcn = @(imagefilename)imresize(imread(imagefilename), [227 227]); 
imds = imageDatastore('../data', 'LabelSource', 'foldernames', ...             
                     'IncludeSubFolder', true, 'readFcn', readFcn);  
[imgsTrain, imgsValidation, imgsTest ]  = splitEachLabel(imds, 0.7, 0.1, 0.2); 

下一步是定義訓(xùn)練超參數(shù)并通過(guò)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。如果安裝了 GPU , MATLAB 會(huì)自動(dòng)在 GPU 上縮放訓(xùn)練。要在沒有 GPU 的情況下進(jìn)行訓(xùn)練(不推薦),請(qǐng)使用多個(gè) GPU 或在云端擴(kuò)展訓(xùn)練。您可以通過(guò)調(diào)整 trainingOptions 中的 ExecutionEnvironment 參數(shù)來(lái)實(shí)現(xiàn)。

options = trainingOptions('sgdm',...
    'MiniBatchSize',15,...
    'MaxEpochs',20,...
    'InitialLearnRate',1e-4,...
    'ValidationData',imgsValidation,...
    'ValidationFrequency',10,...
    'Momentum',0.9,...
    'ExecutionEnvironment', 'auto');

trainedModel = trainNetwork(imgsTrain,lgraph,options);

我們用 NVIDIA Quadro RTX 6000 訓(xùn)練這個(gè)網(wǎng)絡(luò)。圖 8 顯示訓(xùn)練網(wǎng)絡(luò)只花了 23 秒。與 CPU 上的訓(xùn)練時(shí)間相比,這要快得多(~ 6 倍)。當(dāng)使用 gpu 時(shí), MATLAB 自動(dòng)使用 CUDA 和 cuDNN 庫(kù)來(lái)加速訓(xùn)練。然而,值得一提的是,我們只處理了 162 幅時(shí)頻圖像,因此,整個(gè)訓(xùn)練時(shí)間相當(dāng)少。與 CPU 相比, GPU 的訓(xùn)練時(shí)間性能隨著訓(xùn)練數(shù)據(jù)量的增加而提高。

圖 8 在 GPU ( 23 秒)和單 CPU ( 2 分 1 秒)上訓(xùn)練深度學(xué)習(xí)模型。

現(xiàn)在你已經(jīng)有了一個(gè)訓(xùn)練過(guò)的模型,你可以通過(guò)推斷測(cè)試圖像數(shù)據(jù)集來(lái)驗(yàn)證準(zhǔn)確度,這是新模型從未見過(guò)的。我們訓(xùn)練了一個(gè)準(zhǔn)確度》 95% 的模型,只有一次錯(cuò)誤分類。

predictedLabels = classify(trainedModel, imgsTest);

accuracy = sum(predictedLabels == imgsTest.Labels) / numel(predictedLabels);

confusionchart(imgsTest.Labels, predictedLabels)

title(“Confusion Matrix, Accuracy ” + accuracy*100 + “%”)

圖 9 訓(xùn)練模型上測(cè)試數(shù)據(jù)集的混淆矩陣。

在 Jetson 上部署數(shù)字健康物聯(lián)網(wǎng)應(yīng)用程序

既然您已經(jīng)培訓(xùn)并構(gòu)建了您的 AI 應(yīng)用程序,現(xiàn)在是部署的時(shí)候了。 NVIDIA Jetson 平臺(tái)提供小型、節(jié)能的模塊上系統(tǒng),具有高計(jì)算性能和云本地功能,是部署數(shù)字健康物聯(lián)網(wǎng)應(yīng)用程序的理想選擇。您可以在 Jetson 平臺(tái)上部署整個(gè)管道(時(shí)頻生成和擠壓網(wǎng)預(yù)測(cè)),以便它可以獨(dú)立運(yùn)行算法。

在本例中,從 IO 模塊讀入實(shí)時(shí) ECG 信號(hào),使用 CWT 將信號(hào)轉(zhuǎn)換為時(shí)頻圖像,最后將圖像通過(guò)經(jīng)過(guò)訓(xùn)練的深度學(xué)習(xí)網(wǎng)絡(luò)進(jìn)行推理。所有這些步驟都是實(shí)時(shí)執(zhí)行的,因此在獲取 ECG 信號(hào)和獲得推斷結(jié)果之間沒有延遲。

利用 GPU 編碼器, MATLAB 提供了一個(gè)將各種信號(hào)處理、小波分析、圖像處理和深度學(xué)習(xí)算法轉(zhuǎn)換為優(yōu)化的 CUDA 代碼的自動(dòng)化途徑,可以直接在 Jetson 平臺(tái)上投入生產(chǎn)。

第一步,將 AI 應(yīng)用程序打包成 MATLAB 函數(shù),就像它在部署版本中運(yùn)行一樣。如代碼示例所示,函數(shù) model_predict_ecg 接收 65536 個(gè)樣本的 ECG 信號(hào)作為輸入,將其傳遞給函數(shù) cwt_ecg_jetson_ex 將其轉(zhuǎn)換為時(shí)頻圖像,將其傳遞給經(jīng)過(guò)訓(xùn)練的深度學(xué)習(xí)網(wǎng)絡(luò),最后提供所有不同 ECG 類別的概率分?jǐn)?shù)作為輸出。

%% MATLAB functions for deployment
function PredClassProb = model_predict_ecg(TimeSeriesSignal)
 
    coder.gpu.kernelfun();
   
    % parameters
    ModFile = 'ecg_model.mat'; % file that saves neural network
    ImgSize = [227 227]; % input image size for the ML model
   
    % sanity check signal is a row vector of correct length
    assert(isequal(size(TimeSeriesSignal), [1 65536]))
 
    %% cwt transformation for the signal
    im = cwt_ecg_jetson_ex(TimeSeriesSignal, ImgSize);
   
    %% model prediction
    persistent model;
    if isempty(model)
        model = coder.loadDeepLearningNetwork(ModFile, 'mynet');
    end
 
    PredClassProb = predict(model, im);
   
end
 
function im = cwt_ecg_jetson_ex(TimeSeriesSignal, ImgSize)
 
coder.gpu.kernelfun();
 
%% Create scalogram
cfs = cwt(TimeSeriesSignal, 'morse', 1, 'VoicesPerOctave', 12);
cfs = abs(cfs);
 
%% Image generation
 
% Load the jet colormap generated and saved earlier using the commands:
% >> cmapj128 = jet(128); save(‘cmapj128.mat’, ‘cmapj128’);
 
cmapj128 = coder.load('cmapj128');
imx = ind2rgb_custom_ecg_jetson_ex(round(255*rescale(cfs))+1,cmapj128.cmapj128);
 
% Resize to proper size and convert to uint8 data type
im = im2uint8(imresize(imx, ImgSize));
 
end
 
function out = ind2rgb_custom_ecg_jetson_ex(a, cm)
  
   indexedImage = a;
  
   % Make sure that indexedImage is in the range from 1 to number of colormap
   % entries
   numColormapEntries = size(cm,1);
   indexedImage = max(1, min(indexedImage, numColormapEntries) );
 
   height = size(indexedImage, 1);
   width = size(indexedImage, 2);
  
   rgb = coder.nullcopy(zeros(height,width,3));
   rgb(1:height, 1:width, 1) = reshape(cm(indexedImage, 1), [height width]);
   rgb(1:height, 1:width, 2) = reshape(cm(indexedImage, 2), [height width]);
   rgb(1:height, 1:width, 3) = reshape(cm(indexedImage, 3), [height width]);
  
   out = rgb;
 
end

現(xiàn)在您已經(jīng)設(shè)置好了函數(shù),從 MATLAB 連接到 Jetson 平臺(tái)。 NVIDIA GPU 的 GPU 編碼器支持包支持以下開發(fā)工具包:

NVIDIA Jetson TK1 型

Jetson TX1 型

Jetson TX2 型

Jetson AGX Xavier

Jetson Xavier NX 型

Jetson 納米

它還支持 NVIDIA 驅(qū)動(dòng)平臺(tái) 。下面是連接到 Jetson Nano 平臺(tái)并設(shè)置配置參數(shù)的代碼示例,用于從前面的函數(shù)生成 CUDA 代碼。

hwobj = jetson('gpucoder-nano-2','username','password');
cfg = coder.gpuConfig('exe');
cfg.Hardware = coder.hardware('NVIDIA Jetson');
cfg.Hardware.BuildDir = '~/remoteBuildDir';
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');
cfg.CustomSource = fullfile('main_ecg_jetson_ex.cu');

指定的代碼示例在代碼生成中包含自定義源文件 main_ecg_jetson_ex.cu 作為參數(shù)。這樣做是為了指定輸入/輸出管道,以便在 Jetson 平臺(tái)上測(cè)試部署的算法。首先,通過(guò)選擇 coder.gpuConfig 對(duì)象到 coder.gpuConfig 的 GenerateExampleMain 屬性,為該應(yīng)用程序生成了示例 main.cu 模板。接下來(lái),您修改了模板 main.cu 文件,包括從文本文件 signalData.txt 中讀取樣本 ECG 信號(hào)數(shù)據(jù),并將算法結(jié)果寫入另一個(gè)文本文件 predClassProb.txt 。修改后的 main.cu 文件另存為 main_ecg_jetson_ex.cu ,僅供參考。

//
// File: main_ecg_jetson_ex.cu
//       
//***********************************************************************
// Include Files
#include "rt_nonfinite.h"
#include "model_predict_ecg.h"
#include "main_ecg_jetson_ex.h"
#include "model_predict_ecg_terminate.h"
#include "model_predict_ecg_initialize.h"
#include 
#include 
#include 
 
// Function Definitions
 
/* Read data from a file*/
int readData_real32_T(const char * const file_in, real32_T data[65536])
{
  FILE* fp1 = fopen(file_in, "r");
  if (fp1 == 0)
  {
    printf("ERROR: Unable to read data from %s
", file_in);
    exit(0);
  }
  for(int i=0; i<65536; i++)
  {
      fscanf(fp1, "%f", &data[i]);
  }
  fclose(fp1);
  return 0;
}
 
/* Write data to a file*/
int writeData_real32_T(const char * const file_out, real32_T data[3])
{
  FILE* fp1 = fopen(file_out, "w");
  if (fp1 == 0)
  {
    printf("ERROR: Unable to write data to %s
", file_out);
    exit(0);
  }
  for(int i=0; i<3; i++)
  {
    fprintf(fp1, "%f
", data[i]);
  }
  fclose(fp1);
  return 0;
}
 
// model predict function
static void main_model_predict_ecg(const char * const file_in, const char * const file_out)
{
  real32_T PredClassProb[3];
  //  real_T b[65536];
  real32_T b[65536];
 
  // readData_real_T(file_in, b);
  readData_real32_T(file_in, b);
      
  model_predict_ecg(b, PredClassProb);
 
  writeData_real32_T(file_out, PredClassProb);
 
}
 
// main function
int32_T main(int32_T argc, const char * const argv[])
{
  const char * const file_out = "predClassProb.txt";
  // Initialize the application.
  model_predict_ecg_initialize();
 
  // Run prediction function
  main_model_predict_ecg(argv[1], file_out); // argv[1] = file_in
 
  // Terminate the application.
  model_predict_ecg_terminate();
  return 0;
}
 
//
// End of file
//

然后執(zhí)行代碼生成命令生成并構(gòu)建 CUDA 代碼,并將其部署到cfg.Hardware.BuildDir設(shè)備上。此命令生成編譯的model_predict_ecg.elf文件,并將其放在代碼生成配置參數(shù) Jetson 中指定的 Jetson 生成目錄路徑上。

inputSignal = coder.newtype('single', [1 65536], [0 0]);
codegen model_predict_ecg.m -args {inputSignal} – config cfg -report

首先,檢查以下自動(dòng)生成的代碼。自動(dòng)創(chuàng)建了 30 多個(gè) CUDA 內(nèi)核,用于執(zhí)行時(shí)頻圖像轉(zhuǎn)換和深度學(xué)習(xí)預(yù)測(cè)步驟。 GPU 編碼器自動(dòng)調(diào)用優(yōu)化的 NVIDIA CUDA cuDNN 庫(kù)進(jìn)行深度學(xué)習(xí),并調(diào)用 cuBLAS 、 cuFFT 和 cuSolver 庫(kù)進(jìn)行其他矩陣計(jì)算。圖 10 顯示了生成的報(bào)告 GUI ,它可以用來(lái)檢查自動(dòng)生成的 CUDA 文件,并將生成的 CUDA 代碼追溯到相應(yīng)的 MATLAB 函數(shù)。

圖 10 GPU 代碼生成報(bào)告。

現(xiàn)在已經(jīng)生成了代碼,請(qǐng)?jiān)?Jetson 上測(cè)試算法的性能。您可以直接從 Jetson 運(yùn)行生成的可執(zhí)行文件,也可以使用 MATLAB 接口直接從 MATLAB 執(zhí)行應(yīng)用程序。在本例中,將示例 ECG 數(shù)據(jù)文件 signalData.txt 寫入 Jetson 的工作區(qū)目錄,并在主板的 Linux 終端上執(zhí)行編譯后的應(yīng)用程序。

sampleIndx = 113; % Chose any ECG record from the ECGData struct for testing
signal_data = ECGData.Data(sampleIndx, :);
ECGType = ECGData.Labels(sampleIndx);
 
fid = fopen('signalData.txt','w');
for i = 1:length(signal_data)
   fprintf(fid,'%f
',signal_data(i));
end
fclose(fid);
 
% Copy the text file to the workspace directory on the Jetson board
hw.putFile('signalData.txt', hwobj.workspaceDir)

圖 11 在 Jetson Nano 終端上執(zhí)行編譯后的應(yīng)用程序。

打開 Jetson 端子。在工作區(qū)內(nèi),您可以找到復(fù)制的 signalData.txt 文件以及編譯的 model_predict_ecg.elf 和文件夾 codegen 。當(dāng)您多次執(zhí)行應(yīng)用程序以記錄執(zhí)行速度時(shí),應(yīng)用程序輸出創(chuàng)建了 predClassProb.txt 輸出文件,其中包含應(yīng)用程序?qū)斎胄盘?hào)進(jìn)行分類的概率分?jǐn)?shù)。

輸出的文本文件可以在 MATLAB 中重新加載。比較 Jetson 與 MATLAB 在 CPU 上的推理結(jié)果。您可以看到,測(cè)試信號(hào)是正常的竇性心律, Jetson 和 MATLAB 在 NSR 類中的概率得分最高。

% Fetch the result file from Jetson
resultFile = 'predClassProb.txt';
resultFile_hw = fullfile(hwobj.workspaceDir,resultFile);
hwobj.getFile(resultFile_hw)
PredClassProb = readmatrix(resultFile);
PredTableJetson = array2table(PredClassProb(:)','VariableNames',matlab.lang.makeValidName(PredCat));
 
% Execute the function in MALTAB
ModPredProb = model_predict_ecg(signal_data);  
PredTableMATLAB = array2table(ModPredProb(:)','VariableNames',matlab.lang.makeValidName(PredCat));
 
% Display the probability scores from Jetson
disp(PredTableJetson)
 
      ARR         CHF        NSR 
    ________    _______    _______
 
    0.026817    0.17381    0.79937
 
 
% Display the probability scores from MATLAB
disp(PredTableMATLAB)
 
      ARR         CHF        NSR 
    ________    _______    _______
 
    0.026863    0.17401    0.79913

Conclusion

在本文中,我們介紹了如何輕松開發(fā)基于人工智能的數(shù)字健康應(yīng)用程序,并將這些算法部署到嵌入式物聯(lián)網(wǎng)和邊緣人工智能平臺(tái)上,如 NVIDIA Jetson 。該工作流程簡(jiǎn)化了使用轉(zhuǎn)移學(xué)習(xí)技術(shù)開發(fā)生理信號(hào)(如 ECG 信號(hào)) AI 應(yīng)用程序的過(guò)程。它為開發(fā)此類算法提供了一個(gè)良好的起點(diǎn)。

關(guān)于作者

Akhilesh Mishra 是 MathWorks 醫(yī)療器械和醫(yī)療保健行業(yè)的高級(jí)應(yīng)用工程師。他擅長(zhǎng)于信號(hào)/數(shù)據(jù)處理、人工智能和 GPU 計(jì)算工作流程。他在 MathWorks 工作了 4 年多。 Akhilesh 擁有堪薩斯大學(xué)的碩士學(xué)位,在那里他是一個(gè)研究探測(cè)格陵蘭和南極洲冰原的雷達(dá)系統(tǒng)的小組的信號(hào)處理負(fù)責(zé)人,以研究全球海平面上升。

Kirthi K Devleker 是 MathWorks 的全球醫(yī)療器械行業(yè)經(jīng)理。 Kirthi Devleker 在目前的職位上與開發(fā)數(shù)字健康和醫(yī)療設(shè)備的客戶、學(xué)術(shù)研究人員和監(jiān)管機(jī)構(gòu)密切合作,幫助他們了解建模和仿真的價(jià)值,以及人們?nèi)绾卫?AI 等最新趨勢(shì)來(lái)構(gòu)建下一代醫(yī)療設(shè)備。在此之前, Kirthi 擔(dān)任 MathWorks 的高級(jí)產(chǎn)品經(jīng)理,主要負(fù)責(zé)制定人工智能和信號(hào)處理產(chǎn)品的路線圖和長(zhǎng)期戰(zhàn)略。 Kirthi 擁有信號(hào)和圖像處理方面的背景,并在 MathWorks 工作了 10 年。他擁有加州圣何塞州立大學(xué)電氣工程碩士學(xué)位。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3811

    瀏覽量

    138137
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5309

    瀏覽量

    106477
  • AI
    AI
    +關(guān)注

    關(guān)注

    88

    文章

    35194

    瀏覽量

    280308
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    NVIDIA AI技術(shù)助力歐洲醫(yī)療健康行業(yè)發(fā)展

    從構(gòu)建全球規(guī)模最大的生物多樣性數(shù)據(jù)庫(kù),到打造賦能罕見病研究的 AI 工廠,NVIDIAAI 初創(chuàng)企業(yè)生態(tài)系統(tǒng)正持續(xù)為歐洲醫(yī)療健康領(lǐng)域注入創(chuàng)新動(dòng)能。
    的頭像 發(fā)表于 06-19 14:40 ?1537次閱讀

    使用NVIDIA RTX PRO Blackwell系列GPU加速AI開發(fā)

    NVIDIA GTC 推出新一代專業(yè)級(jí) GPU 和 AI 賦能的開發(fā)者工具—同時(shí),ChatRTX 更新現(xiàn)已支持 NVIDIA NIM,RTX Remix 正式結(jié)束測(cè)試階段,本月的
    的頭像 發(fā)表于 03-28 09:59 ?634次閱讀

    NVIDIA AI Enterprise助力AI智能體重構(gòu)工作模式

    無(wú)論是為人道主義援助、客戶服務(wù)還是醫(yī)療健康開發(fā),基于NVIDIA AI Enterprise軟件平臺(tái)構(gòu)建的 AI 智能體構(gòu)成了新型
    的頭像 發(fā)表于 03-25 14:59 ?512次閱讀

    MCP:連接AI應(yīng)用程序的開放標(biāo)準(zhǔn)!

    。 在第二種方式中,開發(fā)者需要為AI大模型編寫與具體應(yīng)用程序協(xié)作的訪問(wèn)代碼,例如,開發(fā)者希望DeepSeek-R1與Gmail協(xié)作,就需要手動(dòng)編寫協(xié)作代碼。這種手動(dòng)編寫協(xié)作代碼的方式,
    的頭像 發(fā)表于 03-21 18:21 ?928次閱讀
    MCP:連接<b class='flag-5'>AI</b>與<b class='flag-5'>應(yīng)用程序</b>的開放標(biāo)準(zhǔn)!

    研華NVIDIA Jetson Orin Nano系統(tǒng)支持Super Mode

    提升生成式AI性能1.7倍 2025年春季— 研華科技,作為全球工業(yè)嵌入式 AI 解決方案供應(yīng)商,宣布推出搭載NVIDIA Jetson Orin Nano 8GB系統(tǒng)模塊的
    發(fā)表于 03-10 14:07 ?392次閱讀
    研華<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Jetson</b> Orin Nano系統(tǒng)支持Super Mode

    探索NVIDIA Jetson與DeepSeek融合的無(wú)限可能

    能力高效地部署到邊緣設(shè)備中已然成為行業(yè)關(guān)注的焦點(diǎn)。NVIDIA Jetson 系列作為邊緣計(jì)算領(lǐng)域的佼佼者,憑借其高性能、低功耗的特性,能夠?yàn)?DeepSeek 等 AI 模型的端側(cè)推理提供理想的硬件支持。
    的頭像 發(fā)表于 02-21 14:31 ?737次閱讀
    探索<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Jetson</b>與DeepSeek融合的無(wú)限可能

    NVIDIA推出面向RTX AI PC的AI基礎(chǔ)模型

    NVIDIA 今日發(fā)布能在 NVIDIA RTX AI PC 本地運(yùn)行的基礎(chǔ)模型,為數(shù)字人、內(nèi)容創(chuàng)作、生產(chǎn)力和開發(fā)提供強(qiáng)大助力。
    的頭像 發(fā)表于 01-08 11:01 ?559次閱讀

    NVIDIA發(fā)布小巧高性價(jià)比的Jetson Orin Nano Super開發(fā)者套件

    NVIDIA近期推出了一款全新的生成式AI超級(jí)計(jì)算機(jī)——Jetson Orin Nano Super開發(fā)者套件。這款開發(fā)者套件以其小巧的尺寸
    的頭像 發(fā)表于 12-19 11:28 ?1095次閱讀

    NVIDIA 推出高性價(jià)比的生成式 AI 超級(jí)計(jì)算機(jī)

    Jetson Orin Nano Super 可將生成式 AI 性能提升至1.7 倍,支持科技愛好者、開發(fā)者和學(xué)生使用的主流模型。 ? ? NVIDIA 推出了一款全新的尺寸小巧的生成
    發(fā)表于 12-18 17:01 ?724次閱讀
    <b class='flag-5'>NVIDIA</b> 推出高性價(jià)比的生成式 <b class='flag-5'>AI</b> 超級(jí)計(jì)算機(jī)

    初創(chuàng)公司借助NVIDIA Metropolis和Jetson提高生產(chǎn)線效率

    初創(chuàng)公司使用 NVIDIA Metropolis 視覺 AIJetson 邊緣 AI 平臺(tái)提高生產(chǎn)線效率。
    的頭像 發(fā)表于 11-19 14:39 ?712次閱讀

    使用NVIDIA Jetson打造機(jī)器人導(dǎo)盲犬

    Selin Alara Ornek 是一名富有遠(yuǎn)見的高中生。她使用機(jī)器學(xué)習(xí)和 NVIDIA Jetson邊緣 AI 和機(jī)器人平臺(tái),為視障人士打造了機(jī)器人導(dǎo)盲犬。
    的頭像 發(fā)表于 11-09 13:51 ?773次閱讀

    使用機(jī)器學(xué)習(xí)和NVIDIA Jetson邊緣AI和機(jī)器人平臺(tái)打造機(jī)器人導(dǎo)盲犬

    Selin Alara Ornek 是一名富有遠(yuǎn)見的高中生。她使用機(jī)器學(xué)習(xí)和 NVIDIA Jetson 邊緣 AI 和機(jī)器人平臺(tái),為視障人士打造了機(jī)器人導(dǎo)盲犬。 該項(xiàng)目名為 IC4U
    的頭像 發(fā)表于 11-08 10:05 ?811次閱讀

    使用全新NVIDIA AI Blueprint開發(fā)視覺AI智能體

    為提高生產(chǎn)力、優(yōu)化流程和創(chuàng)造更加安全的空間,埃森哲、戴爾科技和聯(lián)想等公司正在使用全新 NVIDIA AI Blueprint 開發(fā)視覺 AI 智能體。
    的頭像 發(fā)表于 11-06 13:58 ?1064次閱讀

    NVIDIA RTX AI套件簡(jiǎn)化AI驅(qū)動(dòng)的應(yīng)用開發(fā)

    NVIDIA 于近日發(fā)布 NVIDIA RTX AI套件,這一工具和 SDK 集合能夠幫助 Windows 應(yīng)用開發(fā)者定制、優(yōu)化和部署適用于 Windows 應(yīng)用的
    的頭像 發(fā)表于 09-06 14:45 ?888次閱讀

    借助OpenUSD和NVIDIA Omniverse開發(fā)數(shù)字孿生應(yīng)用

    為了滿足制造業(yè)和其他行業(yè)的數(shù)字化轉(zhuǎn)型需求,致力于開發(fā)生產(chǎn)、內(nèi)部物流和裝配優(yōu)化軟件的公司 SyncTwin GmbH 通過(guò)使用用于解決復(fù)雜路線規(guī)劃問(wèn)題的加速優(yōu)化引擎NVIDIA cuOpt和由應(yīng)用編程
    的頭像 發(fā)表于 09-06 14:18 ?759次閱讀