Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Segmentación de tumores cerebrales 3D mediante aprendizaje profundo

Este ejemplo muestra cómo entrenar una red neuronal U-Net 3-D y realizar la segmentación semántica de tumores cerebrales a partir de imágenes médicas 3D. El ejemplo muestra cómo entrenar una red U-Net 3D y también proporciona una red previamente entrenada. El uso de una GPU NVIDIA™ compatible con CUDA con capacidad de computación 3.0 o superior es muy recomendable para la segmentación semántica 3D (requiere Parallel Computing Toolbox™).

Introducción

La segmentación semántica implica etiquetar cada píxel de una imagen o voxel de un volumen 3D con una clase. Este ejemplo ilustra el uso de métodos de aprendizaje profundo para realizar la segmentación semántica binaria de tumores cerebrales en exploraciones por resonancia magnética (RM). En esta segmentación binaria, cada píxel se etiqueta como tumor o fondo.

Este ejemplo realiza la segmentación de tumores cerebrales utilizando una arquitectura de Red De U 3D [ ].1 U-Net es una red rápida, eficiente y sencilla que se ha vuelto popular en el dominio de segmentación semántica.

Un desafío de la segmentación de imágenes médicas es la cantidad de memoria necesaria para almacenar y procesar volúmenes 3D. Entrenar una red en el volumen de entrada completo no es práctico debido a las restricciones de recursos de GPU. Este ejemplo resuelve el problema entrenando la red en parches de imagen. En el ejemplo se utiliza una estrategia de superposición de teselas para coser parches de prueba en un volumen de prueba segmentado completo. En el ejemplo se evitan los artefactos de borde mediante la parte válida de la convolución en la red neuronal [ ].5

Un segundo desafío de la segmentación de imágenes médicas es el desequilibrio de claseenlos datos que dificultan el entrenamiento cuando se utiliza la pérdida de entropía cruzada convencional. En este ejemplo se resuelve el problema mediante una función ponderada de pérdida de dados multiclase [ ].4 Ponderar las clases ayuda a contrarrestar la influencia de las regiones más grandes en la puntuación de los dados, lo que facilita a la red aprender a segmentar regiones más pequeñas.

Descargue los datos de capacitación, validación y pruebas

En este ejemplo se utiliza el conjunto de datos BraTS [ ].2 El conjunto de datos BraTS contiene resonancias magnéticas de tumores cerebrales, a saber, gliomas, que son los tumores malignos cerebrales primarios más comunes. El tamaño del archivo de datos es de 7 GB. Si no desea descargar el conjunto de datos BraTS, vaya directamente a la sección de este ejemplo.Descargar red preentrenada y conjunto de pruebas de muestra

Cree un directorio para almacenar el conjunto de datos BraTS.

imageDir = fullfile(tempdir,'BraTS'); if ~exist(imageDir,'dir')     mkdir(imageDir); end

Para descargar los datos de BraTS, vaya al sitio web y haga clic en el enlace "Descargar datos".Segmentación Médica Decathalon Descargue el archivo "Task01_BrainTumour.tar" [ ].3 Descomprima el archivo TAR en el directorio especificado por la variable.imageDir Cuando se descomprime correctamente, contendrá un directorio denominado que tiene tres subdirectorios: , , y .imageDirTask01_BrainTumourimagesTrimagesTslabelsTr

El conjunto de datos contiene 750 volúmenes 4D, cada uno de los cuales representa una pila de imágenes 3D. Cada volumen 4-D tiene el tamaño 240-por-240-por-155-por-4, donde las tres primeras dimensiones corresponden a la altura, anchura y profundidad de una imagen volumétrica 3D. La cuarta dimensión corresponde a diferentes modalidades de análisis. El conjunto de datos se divide en 484 volúmenes de entrenamiento con etiquetas de voxel y 266 volúmenes de prueba, Los volúmenes de prueba no tienen etiquetas por lo que este ejemplo no utiliza los datos de prueba. En su lugar, el ejemplo divide los volúmenes de entrenamiento 484 en tres conjuntos independientes que se usan para el entrenamiento, la validación y las pruebas.

Datos de capacitación y validación de preprocesos

Para entrenar la red U-Net 3D de forma más eficiente, preprocese los datos de RMN mediante la función auxiliar .preprocessBraTSdataset Esta función se adjunta al ejemplo como un archivo auxiliar.

La función auxiliar realiza estas operaciones:

  • Recorte los datos a una región que contenga principalmente el cerebro y el tumor. Recortar los datos reduce el tamaño de los datos al tiempo que conserva la parte más crítica de cada volumen de RMN y sus etiquetas correspondientes.

  • Normalizar cada modalidad de cada volumen de forma independiente restando la media y dividiendo por la desviación estándar de la región cerebral recortada.

  • Divida los 484 volúmenes de entrenamiento en 400 entrenamientos, 29 validaciones y 55 conjuntos de pruebas.

El procesamiento previo de los datos puede tardar unos 30 minutos en completarse.

sourceDataLoc = [imageDir filesep 'Task01_BrainTumour']; preprocessDataLoc = fullfile(tempdir,'BraTS','preprocessedDataset'); preprocessBraTSdataset(preprocessDataLoc,sourceDataLoc);

Crear almacén de datos de extracción aleatoria de parches para entrenamiento y validación

Utilice un almacén de datos de extracción de parches aleatorio para enviar los datos de entrenamiento a la red y validar el progreso del entrenamiento. Este almacén de datos extrae parches aleatorios de imágenes de la verdad del suelo y los datos de etiquetas de píxeles correspondientes. La aplicación de parches es una técnica común para evitar quedarse sin memoria cuando se entrena con volúmenes arbitrariamente grandes.

Cree un para almacenar los datos de imagen 3D.imageDatastore Dado que el formato de archivo MAT es un formato de imagen no estándar, debe utilizar un lector de archivos MAT para habilitar la lectura de los datos de imagen. Puede utilizar el lector de archivos MAT auxiliar, .matRead Esta función se adjunta al ejemplo como un archivo auxiliar.

volReader = @(x) matRead(x); volLoc = fullfile(preprocessDataLoc,'imagesTr'); volds = imageDatastore(volLoc, ...     'FileExtensions','.mat','ReadFcn',volReader);

Cree a para almacenar las etiquetas.pixelLabelDatastore (Computer Vision Toolbox)

lblLoc = fullfile(preprocessDataLoc,'labelsTr'); classNames = ["background","tumor"]; pixelLabelID = [0 1]; pxds = pixelLabelDatastore(lblLoc,classNames,pixelLabelID, ...     'FileExtensions','.mat','ReadFcn',volReader);

Previsualice un volumen y una etiqueta de imagen. Visualice el volumen etiquetado mediante la función.labelvolshow Haga que el fondo sea totalmente transparente estableciendo la visibilidad de la etiqueta de fondo ( ) en .10

volume = preview(volds); label = preview(pxds);  viewPnl = uipanel(figure,'Title','Labeled Training Volume'); hPred = labelvolshow(label,volume(:,:,:,1),'Parent',viewPnl, ...     'LabelColor',[0 0 0;1 0 0]); hPred.LabelVisibility(1) = 0;

Cree un archivo que contenga la imagen de entrenamiento y los datos de etiqueta de píxel.randomPatchExtractionDatastore Especifique un tamaño de parche de 132 por 132 por 132 vóxeles. Especifique para extraer 16 parches colocados aleatoriamente de cada par de volúmenes y etiquetas durante el entrenamiento.'PatchesPerImage' Especifique un tamaño de minilote de 8.

patchSize = [132 132 132]; patchPerImage = 16; miniBatchSize = 8; patchds = randomPatchExtractionDatastore(volds,pxds,patchSize, ...     'PatchesPerImage',patchPerImage); patchds.MiniBatchSize = miniBatchSize;

Siga los mismos pasos para crear un que contenga la imagen de validación y los datos de etiqueta de píxel.randomPatchExtractionDatastore Puede utilizar los datos de validación para evaluar si la red está aprendiendo, sobreadaptando o sobreadaptando continuamente a medida que avanza el tiempo.

volLocVal = fullfile(preprocessDataLoc,'imagesVal'); voldsVal = imageDatastore(volLocVal, ...     'FileExtensions','.mat','ReadFcn',volReader);  lblLocVal = fullfile(preprocessDataLoc,'labelsVal'); pxdsVal = pixelLabelDatastore(lblLocVal,classNames,pixelLabelID, ...     'FileExtensions','.mat','ReadFcn',volReader);  dsVal = randomPatchExtractionDatastore(voldsVal,pxdsVal,patchSize, ...     'PatchesPerImage',patchPerImage); dsVal.MiniBatchSize = miniBatchSize;

Aumente los datos de entrenamiento y validación mediante la función con operaciones de preprocesamiento personalizadas especificadas por la función auxiliar .transformaugmentAndCrop3dPatch Esta función se adjunta al ejemplo como un archivo auxiliar.

La función realiza estas operaciones:augmentAndCrop3dPatch

  1. Gire aleatoriamente y refleje los datos de entrenamiento para que el entrenamiento sea más robusto. La función no gira ni refleja los datos de validación.

  2. Recorte los parches de respuesta al tamaño de salida de la red, los vóxeles 44 por 44.

dataSource = 'Training'; dsTrain = transform(patchds,@(patchIn)augmentAndCrop3dPatch(patchIn,dataSource));  dataSource = 'Validation'; dsVal = transform(dsVal,@(patchIn)augmentAndCrop3dPatch(patchIn,dataSource));

Configurar capas U-Net 3D

Este ejemplo utiliza la red 3-D U-Net [ ].1 En U-Net, la serie inicial de capas convolucionales se intercala con capas de agrupación máxima, lo que reduce sucesivamente la resolución de la imagen de entrada. Estas capas son seguidas por una serie de capas convolucionales intercaladas con operadores de upsampling, aumentando sucesivamente la resolución de la imagen de entrada. Se introduce una capa de normalización por lotes antes de cada capa ReLU. El nombre U-Net proviene del hecho de que la red se puede dibujar con una forma simétrica como la letra U.

Cree una red U-Net 3D predeterminada mediante la función.unetLayers (Computer Vision Toolbox) Especifique dos segmentación de clases. Especifique también el relleno de convolución válido para evitar artefactos de borde cuando se usa la estrategia de superposición de teselas para la predicción de los volúmenes de prueba.

inputPatchSize = [132 132 132 4]; numClasses = 2; [lgraph,outPatchSize] = unet3dLayers(inputPatchSize,numClasses,'ConvolutionPadding','valid');

Para segmentar mejor las regiones tumorales más pequeñas y reducir la influencia de regiones de fondo más grandes, este ejemplo utiliza un archivo .dicePixelClassificationLayer (Computer Vision Toolbox) Reemplace la capa de clasificación de píxeles por la capa de clasificación de píxeles Dados.

outputLayer = dicePixelClassificationLayer('Name','Output'); lgraph = replaceLayer(lgraph,'Segmentation-Layer',outputLayer);

Los datos ya se han normalizado en la sección de este ejemplo.Datos de capacitación y validación de preprocesos La normalización de datos en el es innecesaria, así que reemplace la capa de entrada con una capa de entrada que no tenga normalización de datos.image3dInputLayer (Deep Learning Toolbox)

inputLayer = image3dInputLayer(inputPatchSize,'Normalization','none','Name','ImageInputLayer'); lgraph = replaceLayer(lgraph,'ImageInputLayer',inputLayer);

Como alternativa, puede modificar la red 3D de U-Net mediante deep Network Designer App desde Deep Learning Toolbox™.

Trazar el gráfico de la red 3-D U-Net actualizada.

analyzeNetwork(lgraph)

Especificar opciones de entrenamiento

Entrene la red utilizando el solucionador de optimización.adam Especifique la configuración de hiperparámetros mediante la función.trainingOptions (Deep Learning Toolbox) La tasa de aprendizaje inicial se establece en 5e-4 y disminuye gradualmente en el lapso de entrenamiento. Puede experimentar con la propiedad en función de la memoria de GPU.MiniBatchSize Para maximizar la utilización de la memoria DE la GPU, favorezca los parches de entrada grandes sobre un tamaño de lote grande. Tenga en cuenta que las capas de normalización por lotes son menos eficaces para valores más pequeños de .MiniBatchSize Ajuste la tasa de aprendizaje inicial en función de la extensión .MiniBatchSize

options = trainingOptions('adam', ...     'MaxEpochs',50, ...     'InitialLearnRate',5e-4, ...     'LearnRateSchedule','piecewise', ...     'LearnRateDropPeriod',5, ...     'LearnRateDropFactor',0.95, ...     'ValidationData',dsVal, ...     'ValidationFrequency',400, ...     'Plots','training-progress', ...     'Verbose',false, ...     'MiniBatchSize',miniBatchSize);

Descargar red preentrenada y conjunto de pruebas de muestra

Opcionalmente, descargue una versión previamente entrenada de 3-D U-Net y cinco volúmenes de prueba de muestra y sus etiquetas correspondientes del conjunto de datos BraTS [ ].3 El modelo y los datos de ejemplo previamente entrenados le permiten realizar la segmentación en los datos de prueba sin descargar el conjunto de datos completo ni esperar a que la red entrene.

trained3DUnet_url = 'https://www.mathworks.com/supportfiles/vision/data/brainTumor3DUNetValid.mat'; sampleData_url = 'https://www.mathworks.com/supportfiles/vision/data/sampleBraTSTestSetValid.tar.gz';  imageDir = fullfile(tempdir,'BraTS'); if ~exist(imageDir,'dir')     mkdir(imageDir); end  downloadTrained3DUnetSampleData(trained3DUnet_url,sampleData_url,imageDir);
Pretrained 3-D U-Net model for BraTS data set already exists.  Sample BraTS test data set already exists. 

Red de trenes

Después de configurar las opciones de entrenamiento y el origen de datos, entrene la red U-Net 3D mediante la función.trainNetwork (Deep Learning Toolbox) Para entrenar la red, establezca la variable en el código siguiente en .doTrainingtrue Una GPU NVIDIA™ compatible con CUDA con capacidad de computación 3.0 o superior es muy recomendable para el entrenamiento.

Si mantiene la variable en el código siguiente como , el ejemplo devuelve una red U-Net 3D entrenada previamente.doTrainingfalse

Nota: El entrenamiento tarda unas 30 horas en un sistema multi-GPU con 4 GPU NVIDIA™ Titan Xp y puede tardar aún más tiempo dependiendo del hardware de tu GPU.

doTraining = false; if doTraining     modelDateTime = datestr(now,'dd-mmm-yyyy-HH-MM-SS');     [net,info] = trainNetwork(dsTrain,lgraph,options);     save(['trained3DUNetValid-' modelDateTime '-Epoch-' num2str(options.MaxEpochs) '.mat'],'net'); else     inputPatchSize = [132 132 132 4];     outPatchSize = [44 44 44 2];     load(fullfile(imageDir,'trained3DUNet','brainTumor3DUNetValid.mat')); end

Ahora puedes usar la Red U para segmentar semánticamente los tumores cerebrales.

Realizar segmentación de datos de prueba

Se recomienda encarecidamente una GPU para realizar la segmentación semántica de los volúmenes de imagen (requiere Parallel Computing Toolbox™).

Seleccione el origen de los datos de prueba que contiene volúmenes de verdad de terreno y etiquetas para la prueba. Si mantiene la variable en el código siguiente como , el ejemplo utiliza cinco volúmenes para las pruebas.useFullTestSetfalse Si establece la variable en , el ejemplo utiliza 55 imágenes de prueba seleccionadas del conjunto de datos completo.useFullTestSettrue

useFullTestSet = false; if useFullTestSet     volLocTest = fullfile(preprocessDataLoc,'imagesTest');     lblLocTest = fullfile(preprocessDataLoc,'labelsTest'); else     volLocTest = fullfile(imageDir,'sampleBraTSTestSetValid','imagesTest');     lblLocTest = fullfile(imageDir,'sampleBraTSTestSetValid','labelsTest');     classNames = ["background","tumor"];     pixelLabelID = [0 1]; end

La variable almacena las imágenes de prueba de la verdad del suelo.voldsTest La variable almacena las etiquetas de la verdad del suelo.pxdsTest

volReader = @(x) matRead(x); voldsTest = imageDatastore(volLocTest, ...     'FileExtensions','.mat','ReadFcn',volReader); pxdsTest = pixelLabelDatastore(lblLocTest,classNames,pixelLabelID, ...     'FileExtensions','.mat','ReadFcn',volReader);

Utilice la estrategia de superposición de teselas para predecir las etiquetas de cada volumen de prueba. Cada volumen de prueba se rellena para hacer que el tamaño de entrada sea un múltiplo del tamaño de salida de la red y compensa los efectos de la convolución válida. El algoritmo de teselas superpuestas selecciona las revisiones superpuestas, predice las etiquetas de cada parche mediante la función y, a continuación, vuelve a combinar las revisiones.semanticseg (Computer Vision Toolbox)

id = 1; while hasdata(voldsTest)     disp(['Processing test volume ' num2str(id)]);          tempGroundTruth = read(pxdsTest);     groundTruthLabels{id} = tempGroundTruth{1};     vol{id} = read(voldsTest);          % Use reflection padding for the test image.      % Avoid padding of different modalities.     volSize = size(vol{id},(1:3));     padSizePre  = (inputPatchSize(1:3)-outPatchSize(1:3))/2;     padSizePost = (inputPatchSize(1:3)-outPatchSize(1:3))/2 + (outPatchSize(1:3)-mod(volSize,outPatchSize(1:3)));     volPaddedPre = padarray(vol{id},padSizePre,'symmetric','pre');     volPadded = padarray(volPaddedPre,padSizePost,'symmetric','post');     [heightPad,widthPad,depthPad,~] = size(volPadded);     [height,width,depth,~] = size(vol{id});          tempSeg = categorical(zeros([height,width,depth],'uint8'),[0;1],classNames);          % Overlap-tile strategy for segmentation of volumes.     for k = 1:outPatchSize(3):depthPad-inputPatchSize(3)+1         for j = 1:outPatchSize(2):widthPad-inputPatchSize(2)+1             for i = 1:outPatchSize(1):heightPad-inputPatchSize(1)+1                 patch = volPadded( i:i+inputPatchSize(1)-1,...                     j:j+inputPatchSize(2)-1,...                     k:k+inputPatchSize(3)-1,:);                 patchSeg = semanticseg(patch,net);                 tempSeg(i:i+outPatchSize(1)-1, ...                     j:j+outPatchSize(2)-1, ...                     k:k+outPatchSize(3)-1) = patchSeg;             end         end     end          % Crop out the extra padded region.     tempSeg = tempSeg(1:height,1:width,1:depth);      % Save the predicted volume result.     predictedLabels{id} = tempSeg;     id=id+1; end
Processing test volume 1 Processing test volume 2 Processing test volume 3 Processing test volume 4 Processing test volume 5 

Comparar la verdad del suelo con la predicción de la red

Seleccione una de las imágenes de prueba para evaluar la precisión de la segmentación semántica. Extraiga la primera modalidad de los datos volumétricos 4D y almacene este volumen 3D en la variable.vol3d

volId = 1; vol3d = vol{volId}(:,:,:,1);

Muestre en un montaje la porción central de la verdad del suelo y las etiquetas predichas a lo largo de la dirección de profundidad.

zID = size(vol3d,3)/2; zSliceGT = labeloverlay(vol3d(:,:,zID),groundTruthLabels{volId}(:,:,zID)); zSlicePred = labeloverlay(vol3d(:,:,zID),predictedLabels{volId}(:,:,zID));  figure montage({zSliceGT,zSlicePred},'Size',[1 2],'BorderSize',5)  title('Labeled Ground Truth (Left) vs. Network Prediction (Right)')

Muestre el volumen etiquetado con la verdad sobre el suelo utilizando la función.labelvolshow Haga que el fondo sea totalmente transparente estableciendo la visibilidad de la etiqueta de fondo ( ) en .10 Debido a que el tumor está dentro del tejido cerebral, haz transparentes algunos de los vóxeles cerebrales, de modo que el tumor sea visible. Para hacer transparentes algunos vóxeles cerebrales, especifique el umbral de volumen como un número en el rango [0, 1]. Todas las intensidades de volumen normalizadas por debajo de este valor de umbral son totalmente transparentes. En este ejemplo se establece el umbral de volumen como menor que 1 para que algunos píxeles cerebrales permanezcan visibles, para dar contexto a la ubicación espacial del tumor dentro del cerebro.

viewPnlTruth = uipanel(figure,'Title','Ground-Truth Labeled Volume'); hTruth = labelvolshow(groundTruthLabels{volId},vol3d,'Parent',viewPnlTruth, ...     'LabelColor',[0 0 0;1 0 0],'VolumeThreshold',0.68); hTruth.LabelVisibility(1) = 0;

Para el mismo volumen, muestre las etiquetas predichas.

viewPnlPred = uipanel(figure,'Title','Predicted Labeled Volume'); hPred = labelvolshow(predictedLabels{volId},vol3d,'Parent',viewPnlPred, ...     'LabelColor',[0 0 0;1 0 0],'VolumeThreshold',0.68); hPred.LabelVisibility(1) = 0;

Esta imagen muestra el resultado de mostrar los sectores secuencialmente en el volumen. La verdad del suelo etiquetada está a la izquierda y la predicción de la red está a la derecha.

Cuantificar la precisión de la segmentación

Mida la precisión de la segmentación utilizando la función.dice Esta función calcula el coeficiente de similitud de dados entre las segmentaciones de verdad previstas y de tierra.

diceResult = zeros(length(voldsTest.Files),2);  for j = 1:length(vol)     diceResult(j,:) = dice(groundTruthLabels{j},predictedLabels{j}); end

Calcule la puntuación media de los dados en el conjunto de volúmenes de prueba.

meanDiceBackground = mean(diceResult(:,1)); disp(['Average Dice score of background across ',num2str(j), ...     ' test volumes = ',num2str(meanDiceBackground)])
Average Dice score of background across 5 test volumes = 0.9993 
meanDiceTumor = mean(diceResult(:,2)); disp(['Average Dice score of tumor across ',num2str(j), ...     ' test volumes = ',num2str(meanDiceTumor)])
Average Dice score of tumor across 5 test volumes = 0.9585 

La figura muestra un que visualiza las estadísticas sobre las puntuaciones de los dados en el conjunto de cinco volúmenes de prueba de muestra.boxplot (Statistics and Machine Learning Toolbox) Las líneas rojas de la gráfica muestran el valor medio de dados para las clases. Los límites superior e inferior de la caja azul indican los percentiles 25 y 75, respectivamente. Los bigotes negros se extienden a los puntos de datos más extremos que no se consideran valores atípicos.

Si tiene Statistics and Machine Learning Toolbox™, puede usar la función para visualizar estadísticas sobre las puntuaciones de dados en todos los volúmenes de prueba.boxplot Para crear un , establezca la variable en el código siguiente en .boxplotcreateBoxplottrue

createBoxplot = false; if createBoxplot     figure     boxplot(diceResult)     title('Test Set Dice Accuracy')     xticklabels(classNames)     ylabel('Dice Coefficient') end

Referencias

[1] A. Abdulkadir, S. S. Lienkamp, T. Brox y O. Ronneberger. "3D U-Net: Aprendizaje de la segmentación volumétrica densa a partir de la anotación dispersa." En.Proceedings of the International Conference on Medical Image Computing and Computer-Assisted Intervention - MICCAI 2016 Atenas, Grecia, octubre de 2016, págs. 424-432.

[2] Isensee, F., P. Kickingereder, W. Wick, M. Bendszus y K. H. Maier-Hein. "Segmentación de tumores cerebrales y predicción de supervivencia radiotérmica: Contribución al Desafío BRATS 2017." En.Proceedings of BrainLes: International MICCAI Brainlesion Workshop Quebec, Canadá, septiembre de 2017, págs. 287-297.

[3] "Brain Tumours". http://medicaldecathlon.com/Medical Segmentation Decathalon.

El conjunto de datos de BraTS es proporcionado por Medical Decathlon bajo todas las garantías y representaciones se renuncian; ver la licencia para más detalles.Licencia CC-BY-SA 4.0. MathWorks® ha modificado el conjunto de datos vinculado en la sección de este ejemplo.Descargar red preentrenada y conjunto de pruebas de muestra El conjunto de datos de muestra modificado se ha recortado a una región que contiene principalmente el cerebro y el tumor y cada canal se ha normalizado de forma independiente restando la media y dividiendo por la desviación estándar de la región cerebral recortada.

[4] Sudre, C. H., W. Li, T. Vercauteren, S. Ourselin y M. J. Cardoso. "Los dados generalizados se superponen como una función de pérdida de aprendizaje profundo para segmentaciones altamente desequilibradas." .Deep Learning in Medical Image Analysis and Multimodal Learning for Clinical Decision Support: Third International Workshop Quebec, Canadá, septiembre de 2017, págs. 240-248.

[5] Ronneberger, O., P. Fischer y T. Brox. "U-Net:Redes convolucionales para segmentación de imágenes biomédicas." En.Proceedings of the International Conference on Medical Image Computing and Computer-Assisted Intervention - MICCAI 2015 Múnich, Alemania, octubre de 2015, págs. 234-241. Disponible en arXiv:1505.04597.

Consulte también

| | | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox)

Temas relacionados