主要内容

基于CycleGAN的无监督医学图像去噪

这个例子展示了如何使用CycleGAN神经网络从有噪声的低剂量CT图像生成高质量的高剂量CT图像。

x射线CT是一种广泛应用于临床和工业应用的成像方式,因为它能产生高质量的图像并提供优越的诊断能力。为了保护病人的安全,临床医生建议使用低剂量的辐射。然而,低辐射剂量导致图像信噪比(SNR)较低,从而降低了诊断的准确性。

深度学习技术可以提高低剂量CT (LDCT)图像的质量。使用生成对抗网络(GAN)进行图像到图像的转换,可以将有噪声的LDCT图像转换为与常规剂量CT图像相同质量的图像。在这个应用中,源域由LDCT图像组成,目标域由常规剂量图像组成。有关更多信息,请参见开始使用GANs进行图像到图像的翻译

CT图像去噪需要进行无监督训练的GAN,因为临床医生通常不会在同一疗程中获得同一患者的低剂量和常规剂量CT图像的匹配对。本例使用一个周期一致的GAN (CycleGAN),它是从大量数据样本中采集图像数据的小块进行训练的。有关使用UNIT神经网络对有限样本数据的完整图像进行训练的类似方法,请参见无监督医学图像去噪使用单元

UnsupervisedDenoisingExampleUpdated_3.png

下载LDCT数据集

本例使用的数据来自低剂量CT大挑战[2,3,4]。数据包括99个头部扫描(标记N为神经)、100个胸部扫描(标记C为胸部)和100个腹部扫描(标记L为肝脏)的常规剂量CT图像和模拟低剂量CT图像。数据集的大小为1.2 TB。

指定dataDir作为数据集的期望位置。

dataDir = fullfile (tempdir,“LDCT”“LDCT-and-Projection-data”);

要下载数据,请转到癌症成像存档的网站。这个例子只使用胸部的图像。从“Images (DICOM, 952 GB)”数据集中下载存储文件到指定的目录dataDir使用通过数据寻回犬.下载成功后,dataDir包含50个子文件夹,名称如"C002"及"C004",以"C296"结尾。

为培训、验证和测试创建数据存储

LDCT数据集提供对低剂量和高剂量CT图像。然而,CycleGAN体系结构需要非成对数据进行无监督学习。本例通过分割图像模拟未配对的训练和验证数据,以便用于获得低剂量CT和高剂量CT图像的患者不会重叠。该示例保留了用于测试的低剂量和常规剂量图像对。

方法将数据分割为训练、验证和测试数据集createLDCTFolderListhelper函数。该函数作为支持文件附加到示例中。助手函数对数据进行拆分,使每组中两种类型的图像都有大致的良好表示。大约80%的数据用于培训,15%用于测试,5%用于验证。

maxDirsForABodyPart = 25;[filesTrainLD, filesTrainHD filesTestLD、filesTestHD filesValLD, filesValHD] =...createLDCTFolderList (dataDir maxDirsForABodyPart);

创建图像数据存储,其中包含两个域的训练和验证图像,即低剂量CT图像和高剂量CT图像。数据集由DICOM映像组成,因此使用自定义ReadFcn名称-值参数在imageDatastore允许读取数据。

ext =“.dcm”;readFcn = @ (x) dicomread (x);imdsTrainLD = imageDatastore (filesTrainLD FileExtensions = ext ReadFcn = ReadFcn);imdsTrainHD = imageDatastore (filesTrainHD FileExtensions = ext ReadFcn = ReadFcn);imdsValLD = imageDatastore (filesValLD FileExtensions = ext ReadFcn = ReadFcn);imdsValHD = imageDatastore (filesValHD FileExtensions = ext ReadFcn = ReadFcn);imdsTestLD = imageDatastore (filesTestLD FileExtensions = ext ReadFcn = ReadFcn);imdsTestHD = imageDatastore (filesTestHD FileExtensions = ext ReadFcn = ReadFcn);

低剂量和高剂量图像的数量可能不同。选择文件的一个子集,使图像的数量相等。

numTrain = min(元素个数(imdsTrainLD.Files),元素个数(imdsTrainHD.Files));imdsTrainLD =子集(imdsTrainLD 1: numTrain);imdsTrainHD =子集(imdsTrainHD 1: numTrain);numVal = min(元素个数(imdsValLD.Files),元素个数(imdsValHD.Files));imdsValLD =子集(imdsValLD 1: numVal);imdsValHD =子集(imdsValHD 1: numVal);numTest = min(元素个数(imdsTestLD.Files),元素个数(imdsTestHD.Files));imdsTestLD =子集(imdsTestLD 1: numTest);imdsTestHD =子集(imdsTestHD 1: numTest);

预处理和增加数据

方法对数据进行预处理变换方法指定的自定义预处理操作normalizeCTImageshelper函数。该函数作为支持文件附加到示例中。的normalizeCTImages函数将数据缩放到范围[- 1,1]。

timdsTrainLD =变换(imdsTrainLD @ (x) {normalizeCTImages (x)});timdsTrainHD =变换(imdsTrainHD @ (x) {normalizeCTImages (x)});timdsValLD =变换(imdsValLD @ (x) {normalizeCTImages (x)});timdsValHD =变换(imdsValHD @ (x) {normalizeCTImages (x)});timdsTestLD =变换(imdsTestLD @ (x) {normalizeCTImages (x)});timdsTestHD =变换(imdsTestHD @ (x) {normalizeCTImages (x)});

结合低剂量和高剂量训练数据使用randomPatchExtractionDatastore.从该数据存储读取时,使用随机旋转和水平反射增加数据。

inputSize =[1] 128128年;增量= imageDataAugmenter (RandRotation = @ (90) * (randi ([0, 1], 1)), RandXReflection = true);dsTrain = randomPatchExtractionDatastore (timdsTrainLD timdsTrainHD,...inputSize (1:2), PatchesPerImage = 16, DataAugmentation =增压器);

方法组合验证数据randomPatchExtractionDatastore.在读取验证数据时不需要执行扩展。

dsVal = randomPatchExtractionDatastore (timdsValLD、timdsValHD inputSize (1:2));

可视化数据集

看看训练集中的几个低剂量和高剂量图像补丁对。注意,低剂量(左)和高剂量(右)的图像对是不配对的,因为它们来自不同的患者。

numImagePairs = 6;imagePairsTrain = [];i = 1:numImagePairs imLowAndHighDose = read(dsTrain);inputImage = imLowAndHighDose.InputImage {1};inputImage =重新调节(im2single (inputImage));responseImage = imLowAndHighDose.ResponseImage {1};responseImage =重新调节(im2single (responseImage));imagePairsTrain =猫(4 imagePairsTrain inputImage responseImage);结束蒙太奇(imagePairsTrain大小= [numImagePairs 2], BorderSize = 4,写成BackgroundColor =“w”)

批量培训和培训期间的验证数据

本例使用自定义训练循环。的minibatchqueue(深度学习工具箱)对象对于在自定义训练循环中管理观察的小批处理非常有用。minibatchqueue对象还将数据转换为dlarray对象,该对象可在深度学习应用中实现自动区分。

通过使用助手函数沿着批处理维度连接图像补丁来处理小批concatenateMiniBatchLD2HDCT.该函数作为支持文件附加到示例中。指定小批处理数据提取格式为"SSCB”(空间,空间,渠道,批处理)。丢弃任何小于miniBatchSize观察。

miniBatchSize = 32;mbqTrain = minibatchqueue (dsTrain,...MiniBatchSize = MiniBatchSize,...MiniBatchFcn = @concatenateMiniBatchLD2HDCT,...PartialMiniBatch =“丢弃”...MiniBatchFormat =“SSCB”);mbqVal = minibatchqueue (dsVal,...MiniBatchSize = MiniBatchSize,...MiniBatchFcn = @concatenateMiniBatchLD2HDCT,...PartialMiniBatch =“丢弃”...MiniBatchFormat =“SSCB”);

创建生成器和鉴别器网络

CycleGAN由两个发生器和两个鉴别器组成。发生器执行从低剂量到高剂量的图像到图像的转换,反之亦然。鉴别器是PatchGAN网络,它返回输入数据是真实的或生成的patch-wise概率。一个鉴别器区分真实和生成的低剂量图像,另一个鉴别器区分真实和生成的高剂量图像。

创建每个发电机网络使用cycleGANGenerator函数。对于256 × 256像素的输入大小,指定NumResidualBlocks参数为9.默认情况下,该函数有3个编码器模块,并在第一卷积层使用64个过滤器。

numResiduals = 6;genHD2LD = cycleGANGenerator (inputSize NumResidualBlocks = numResiduals NumOutputChannels = 1);genLD2HD = cycleGANGenerator (inputSize NumResidualBlocks = numResiduals NumOutputChannels = 1);

方法创建每个鉴别器网络patchGANDiscriminator函数。对鉴别器中第一个卷积层中的下采样块的数量和过滤器的数量使用默认设置。

discLD = patchGANDiscriminator (inputSize);discHD = patchGANDiscriminator (inputSize);

定义损失函数和分数

modelGradients辅助函数为鉴别器和生成器计算梯度和损失。函数中定义了此函数支持功能部分。

生成器的目标是生成经过翻译的图像,识别器将其分类为真实图像发电机损耗是三种损耗的加权总和:对抗性损耗、周期一致性损耗和保真度损耗。保真度损失是基于结构相似性(SSIM)损失。

l 总计 l 敌对的 + λ l 周期 一致性 + l 忠诚

指定权重因子 λ 这控制了周期一致性损失与对抗性损失和保真度损失的相对显著性。

λ= 10;

每个鉴别器的目标是对其域中的图像正确区分真实图像(1)和平移图像(0)。每个鉴别器都有一个损失函数,该函数依赖于预期输出和预测输出之间的均方误差(MSE)。

指定培训选项

训练的小批次大小为32个,共3个课时。

numEpochs = 3;miniBatchSize = 32;

指定Adam优化的选项。对于生成器和鉴别器网络,使用:

  • 学习率为0.0002

  • 梯度衰减系数为0.5

  • 平方梯度衰减系数为0.999

learnRate = 0.0002;gradientDecay = 0.5;squaredGradientDecayFactor = 0.999;

初始化生成器和鉴别器的Adam参数。

avgGradGenLD2HD = [];avgSqGradGenLD2HD = [];avgGradGenHD2LD = [];avgSqGradGenHD2LD = [];avgGradDiscLD = [];avgSqGradDiscLD = [];avgGradDiscHD = [];avgSqGradDiscHD = [];

每100次迭代显示生成的验证图像。

validationFrequency = 100;

培训或下载模式

默认情况下,该示例下载一个预训练版本的CycleGAN生成器,用于低剂量到高剂量CT。预先训练的网络使您可以运行整个示例,而无需等待训练完成。

要训练网络,请设置doTraining变量的真正的.在自定义训练循环中训练模型。每一次迭代:

  • 方法读取当前小批处理的数据下一个(深度学习工具箱)函数。

  • 评估模型的梯度使用dlfeval(深度学习工具箱)函数和modelGradientshelper函数。

  • 更新网络参数adamupdate(深度学习工具箱)函数。

  • 在每个历之后显示源域和目标域的输入和翻译图像。

如果有GPU,请使用GPU进行训练。使用GPU需要并行计算工具箱™和CUDA®支持的NVIDIA®GPU。有关更多信息,请参见GPU计算的需求(并行计算工具箱).在配备24 GB GPU内存的NVIDIA™Titan X上进行培训大约需要30个小时。

doTraining = false;如果doTraining迭代= 0;开始=抽搐;创建一个目录来存储检查点checkpointDir = fullfile (dataDir,“检查点”);如果~存在(checkpointDir“dir”mkdir (checkpointDir);结束初始化训练进度图[figureHandle, tileHandle imageAxes、scoreAxesX scoreAxesY,...lineScoreGenLD2HD lineScoreGenD2LD lineScoreDiscHD lineScoreDiscLD] =...initializeTrainingPlotLD2HDCT_CycleGAN;epoch = 1:numEpochs shuffle(mbqTrain);在小批量上循环hasdata(mbqTrain)迭代=迭代+ 1;读取小批数据[imageLD, imageHD] =下一个(mbqTrain);将小批数据转换为dlarray并指定尺寸标签% "SSCB"(空间,空间,通道,批处理)imageLD = dlarray (imageLD,“SSCB”);imageHD = dlarray (imageHD,“SSCB”);如果在GPU上训练,那么将数据转换为GPU array如果canUseGPU imageLD = gpuArray(imageLD);imageHD = gpuArray (imageHD);结束%计算损失和梯度[genHD2LDGrad, genLD2HDGrad discrXGrad discYGrad,...genHD2LDState genLD2HDState,分数,imagesOutLD2HD imagesOutHD2LD] =...dlfeval (@modelGradients genLD2HD genHD2LD,...discLD、discHD imageHD imageLD,λ);genHD2LD。状态= genHD2LDState;genLD2HD。状态= genLD2HDState;%更新discLD的参数,用于区分%由真实的低剂量CT图像生成低剂量CT图像[discLD。learnables,avgGradDiscLD,avgSqGradDiscLD] =...adamupdate (discLD。learnables,discrXGrad,avgGradDiscLD,...迭代,avgSqGradDiscLD learnRate、gradientDecay squaredGradientDecayFactor);%更新discHD的参数,用于区分%由真实的高剂量CT图像生成高剂量CT图像[discHD。learnables,avgGradDiscHD,avgSqGradDiscHD] =...adamupdate (discHD。learnables,discYGrad,avgGradDiscHD,...迭代,avgSqGradDiscHD learnRate、gradientDecay squaredGradientDecayFactor);%更新genHD2LD的参数%从高剂量CT图像生成低剂量CT图像[genHD2LD。learnables,avgGradGenHD2LD,avgSqGradGenHD2LD] =...adamupdate (genHD2LD。learnables,genHD2LDGrad,avgGradGenHD2LD,...迭代,avgSqGradGenHD2LD learnRate、gradientDecay squaredGradientDecayFactor);%更新genLD2HD参数,其中%从低剂量CT图像生成高剂量CT图像[genLD2HD。learnables,avgGradGenLD2HD,avgSqGradGenLD2HD] =...adamupdate (genLD2HD。learnables,genLD2HDGrad,avgGradGenLD2HD,...迭代,avgSqGradGenLD2HD learnRate、gradientDecay squaredGradientDecayFactor);更新网络评分图updateTrainingPlotLD2HDCT_CycleGAN(得分、迭代、时代、启动、scoreAxesX scoreAxesY,...lineScoreGenLD2HD lineScoreGenD2LD,...lineScoreDiscHD lineScoreDiscLD)%每个validationFrequency迭代,显示一批%生成的图像使用搁置生成器输入如果mod(迭代,validationFrequency) == 0 ||迭代== 1 displayGeneratedLD2HDCTImages(mbqVal,imageAxes,genLD2HD,genHD2LD);结束结束%在每个历之后保存模型如果canUseGPU [genLD2HD、genHD2LD discLD discHD] =...收集(genLD2HD genHD2LD、discLD discHD);结束generatorHighDoseToLowDose = genHD2LD;generatorLowDoseToHighDose = genLD2HD;discriminatorLowDose = discLD;discriminatorHighDose = discHD;modelDateTime =字符串(datetime (“现在”格式=“yyyy-MM-dd-HH-mm-ss”));保存(checkpointDir + filesep +“LD2HDCTCycleGAN——”+ modelDateTime +“时代——”+时代+“.mat”...“generatorLowDoseToHighDose”“generatorHighDoseToLowDose”...“discriminatorLowDose”“discriminatorHighDose”);结束保存最终模型modelDateTime =字符串(datetime (“现在”格式=“yyyy-MM-dd-HH-mm-ss”));保存(checkpointDir + filesep +“trainedLD2HDCTCycleGANNet——”+ modelDateTime +“.mat”...“generatorLowDoseToHighDose”“generatorHighDoseToLowDose”...“discriminatorLowDose”“discriminatorHighDose”);其他的net_url =“//www.ru-cchi.com/supportfiles/vision/data/trainedLD2HDCTCycleGANNet.mat”;downloadTrainedNetwork (net_url dataDir);负载(fullfile (dataDir“trainedLD2HDCTCycleGANNet.mat”));结束

使用测试数据生成新图像

定义用于计算质量指标的测试图像的数量。随机选择两个测试图像来显示。

numTest = timdsTestLD.numpartitions;numImagesToDisplay = 2;idxImagesToDisplay =兰迪(numTest 1 numImagesToDisplay);

初始化变量,计算PSNR和SSIM。

origPSNR = 0 (numTest, 1);generatedPSNR = 0 (numTest, 1);origSSIM = 0 (numTest, 1);generatedSSIM = 0 (numTest, 1);

若要生成新的已翻译图像,请使用预测(深度学习工具箱)函数。从测试数据集中读取图像,并使用训练过的生成器生成新的图像。

idx = 1:numTest imageTestLD = read(timdsTestLD);imageTestHD =阅读(timdsTestHD);imageTestLD =猫(4,imageTestLD {1});imageTestHD =猫(4,imageTestHD {1});将小批数据转换为dlarray并指定尺寸标签% "SSCB"(空间,空间,通道,批处理)imageTestLD = dlarray (imageTestLD,“SSCB”);imageTestHD = dlarray (imageTestHD,“SSCB”);%如果运行在GPU上,那么转换数据到GPU阵列如果canUseGPU imageTestLD = gpuArray(imageTestLD);imageTestHD = gpuArray (imageTestHD);结束生成翻译后的图像generatedImageHD =预测(generatorLowDoseToHighDose imageTestLD);generatedImageLD =预测(generatorHighDoseToLowDose imageTestHD);显示一些图像来可视化网络响应。如果ismember(idx,idxImagesToDisplay) figure origImLD = rescale(extractdata(imageTestLD));genImHD =重新调节(extractdata (generatedImageHD));蒙太奇({origImLD, genImHD},大小= [1 - 2],BorderSize = 5)标题(“原始LDCT测试图像”+ idx +(左),生成的HDCT图像(右))结束origPSNR (idx) = psnr (imageTestLD imageTestHD);generatedPSNR (idx) = psnr (generatedImageHD imageTestHD);origSSIM (idx) = multissim (imageTestLD imageTestHD);generatedSSIM (idx) = multissim (generatedImageHD imageTestHD);结束

计算原始图像和生成图像的平均PSNR。PSNR值越大,图像质量越好。

disp (原始图像的平均PSNR:+的意思是(origPSNR,“所有”));
原始图像平均PSNR: 20.4045
disp (生成图像的平均PSNR:+的意思是(generatedPSNR,“所有”));
生成图像的平均PSNR: 27.9155

计算原始图像和生成图像的平均SSIM。SSIM值越接近1表示图像质量越好。

disp (“原始图像的平均SSIM:”+的意思是(origSSIM,“所有”));
原始图像的平均SSIM: 0.76651
disp (生成图像的平均SSIM:+的意思是(generatedSSIM,“所有”));
生成图像的平均SSIM: 0.90194

支持功能

模型梯度函数

这个函数modelGradients取两个生成器和鉴别器作为输入dlnetwork对象和输入数据的小批处理。函数返回损失相对于网络中可学习参数的梯度和四个网络的分数。由于鉴别器输出不在[0,1]范围内,因此modelGradients函数应用sigmoid函数将鉴别器输出转换为概率分数。

函数[genHD2LDGrad, genLD2HDGrad discLDGrad discHDGrad,...genHD2LDState genLD2HDState,分数,imagesOutLDAndHDGenerated imagesOutHDAndLDGenerated] =...modelGradients (genLD2HD、genHD2LD discLD、discHD imageHD, imageLD,λ)将图像从一个域转换到另一个域:低剂量到高剂量和%亦然向前(imageLDGenerated genHD2LDState] = (genHD2LD imageHD);向前(imageHDGenerated genLD2HDState] = (genLD2HD imageLD);计算每个域的真实图像的预测%鉴别器网络predRealLD =前进(discLD imageLD);predRealHD =前进(discHD imageHD);计算每个域中生成的图像的预测%对应的鉴别器网络predGeneratedLD =前进(discLD imageLDGenerated);predGeneratedHD =前进(discHD imageHDGenerated);计算真实图像的鉴别器损失discLDLossReal = lossReal (predRealLD);discHDLossReal = lossReal (predRealHD);为生成的图像计算鉴别器损失discLDLossGenerated = lossGenerated (predGeneratedLD);discHDLossGenerated = lossGenerated (predGeneratedHD);计算每个鉴别器网络的总鉴别器损耗discLDLossTotal = 0.5*(discLDLossReal + discLDLossGenerated);discHDLossTotal = 0.5*(discHDLossReal + discHDLossGenerated);计算生成图像的生成损失genLossHD2LD = lossReal (predGeneratedLD);genLossLD2HD = lossReal (predGeneratedHD);参数完成往返(周期一致性)输出%生成器到每个生成的图像中获取相应的图像%原域cycleImageLD2HD2LD =前进(genHD2LD imageHDGenerated);cycleImageHD2LD2HD =前进(genLD2HD imageLDGenerated);计算真实图像和生成图像之间的周期一致性损失cycleLossLD2HD2LD = cycleConsistencyLoss (imageLD cycleImageLD2HD2LD,λ);cycleLossHD2LD2HD = cycleConsistencyLoss (imageHD cycleImageHD2LD2HD,λ);%计算标识输出identityImageLD =前进(genHD2LD imageLD);identityImageHD =前进(genLD2HD imageHD);计算标识输出之间的保真度损失(SSIM)fidelityLossLD =意味着(1-multissim (identityImageLD imageLD),“所有”);fidelityLossHD =意味着(1-multissim (identityImageHD imageHD),“所有”);计算发电机总损耗genLossTotal = genLossHD2LD + cycleLossHD2LD2HD +...genLossLD2HD + cycleLossLD2HD2LD + fidelityLossLD + fidelityLossHD;计算生成器的分数genHD2LDScore =意味着(乙状结肠(predGeneratedLD),“所有”);genLD2HDScore =意味着(乙状结肠(predGeneratedHD),“所有”);计算鉴别器的分数discLDScore = 0.5 *意味着(乙状结肠(predRealLD),“所有”) +...0.5 *意味着(1-sigmoid (predGeneratedLD),“所有”);discHDScore = 0.5 *意味着(乙状结肠(predRealHD),“所有”) +...0.5 *意味着(1-sigmoid (predGeneratedHD),“所有”);将分数合并到单元格数组中成绩= {genHD2LDScore, genLD2HDScore、discLDScore discHDScore};计算生成器的梯度genLD2HDGrad = dlgradient (genLossTotal、genLD2HD.Learnables RetainData = true);genHD2LDGrad = dlgradient (genLossTotal、genHD2LD.Learnables RetainData = true);计算鉴别器的梯度discLDGrad = dlgradient (discLDLossTotal、discLD.Learnables RetainData = true);discHDGrad = dlgradient (discHDLossTotal discHD.Learnables);返回小批量图像,将低剂量CT转换为高剂量CTimagesOutLDAndHDGenerated = {imageLD, imageHDGenerated};返回小批量将高剂量CT转换为低剂量CT的图像imagesOutHDAndLDGenerated = {imageHD, imageLDGenerated};结束

损失函数

指定真实图像和生成图像的MSE损失函数。

函数loss = lossReal(预言)loss = mean((1-预言).^2,“所有”);结束函数损失=损失产生的(预测)损失=平均数(预测)。“所有”);结束

为真实图像和生成图像指定周期一致性损失函数。

函数loss = cycleConsistencyLoss(imageReal,imageGenerated,lambda) loss = mean(abs(imageReal-imageGenerated),“所有”) *λ;结束

参考文献

[1]朱俊燕,朴taesung Park, Phillip Isola, Alexei A. Efros。使用周期一致对抗网络的未配对图像对图像翻译。在2017 IEEE计算机视觉国际会议(ICCV)2242 - 51。威尼斯:IEEE 2017。https://doi.org/10.1109/ICCV.2017.244

[2] McCollough, Cynthia,陈白瑜,David R Holmes III,段新慧,余志聪,余立峰,冷帅,Joel Fletcher。低剂量CT图像和投影数据(ldct和投影数据)。癌症成像档案,2020年。https://doi.org/10.7937/9npb - 2637。

[3]授予国家生物医学成像和生物工程研究所的EB017095和EB017185 (Cynthia McCollough, PI)。

[4] Clark, Kenneth, Bruce Vendt, Kirk Smith, John Freymann, Justin Kirby, Paul Koppel, Stephen Moore,等。“癌症影像档案(TCIA):维护和操作一个公共信息库。”数字成像杂志26日,没有。6(2013年12月):1045-57。https://doi.org/10.1007/s10278 - 013 - 9622 - 7。

[5]尤晨宇,杨青松,单洪明,Lars Gjesteby,李光,鞠圣红,张zhuiyang等。“结构敏感多尺度深度神经网络用于低剂量CT去噪。”IEEE访问6(2018): 41839 - 55。https://doi.org/10.1109/ACCESS.2018.2858196。

另请参阅

||||(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)

相关的例子

更多关于

Baidu
map