Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

resnet18

Red neuronal convolucional ResNet-18

  • ResNet-18 network architecture

Descripción

ResNet-18 es una red neuronal convolucional con 18 capas de profundidad. Puede cargar una versión preentrenada de la red entrenada en más de un millón de imágenes desde la base de datos [1] de ImageNet. La red preentrenada puede clasificar imágenes en 1000 categorías de objetos (por ejemplo, teclado, ratón, lápiz y muchos animales). Como resultado, la red ha aprendido representaciones ricas en características para una amplia gama de imágenes. El tamaño de la entrada de imagen de la red es de 224 por 224. Para ver más redes preentrenadas en MATLAB®, consulte Redes neuronales profundas preentrenadas.

Puede utilizar classify para clasificar nuevas imágenes usando el modelo ResNet-18. Siga los pasos que se muestran en Clasificar una imagen con GoogLeNet y reemplace GoogLeNet por ResNet-18.

Para volver a entrenar una red en una nueva tarea de clasificación, siga los pasos indicados en Entrenar redes de deep learning para clasificar nuevas imágenes y cargue ResNet-18 en lugar de GoogLeNet.

Sugerencia

Para crear una red residual sin entrenar que sea adecuada para realizar tareas de clasificación de imágenes, utilice resnetLayers.

ejemplo

net = resnet18 devuelve una red ResNet-18 entrenada con el conjunto de datos de ImageNet.

Esta función requiere el paquete de soporte Deep Learning Toolbox™ Model for ResNet-18 Network. Si no ha instalado el paquete de soporte, la función proporciona un enlace de descarga.

net = resnet18('Weights','imagenet') devuelve una red ResNet-18 entrenada con el conjunto de datos de ImageNet. Esta sintaxis es equivalente a net = resnet18.

lgraph = resnet18('Weights','none') devuelve la arquitectura de red ResNet-18 sin entrenar. El modelo sin entrenar no requiere ningún paquete de soporte.

Ejemplos

contraer todo

Descargue e instale el paquete de soporte Deep Learning Toolbox Model for ResNet-18 Network.

Escriba resnet18 en la línea de comandos.

resnet18

Si el paquete de soporte Deep Learning Toolbox Model for ResNet-18 Network no está instalado, la función proporciona un enlace al paquete de soporte correspondiente en Add-On Explorer. Para instalar el paquete de soporte, haga clic en el enlace y después en Install. Para comprobar que la instalación se ha realizado correctamente, escriba resnet18 en la línea de comandos. Si el paquete de soporte requerido está instalado, la función devuelve un objeto DAGNetwork.

resnet18
ans = 

  DAGNetwork with properties:

         Layers: [72×1 nnet.cnn.layer.Layer]
    Connections: [79×2 table]

Visualice la red con Deep Network Designer.

deepNetworkDesigner(resnet18)

Para examinar otras redes neuronales preentrenadas en Deep Network Designer, haga clic en New.

Deep Network Designer start page showing available pretrained neural networks

Si necesita descargar una red neuronal, deténgase en la red neuronal deseada y haga clic en Install para abrir Add-On Explorer.

Cargue un modelo ResNet-18 preentrenado.

net = resnet18;

Lea una imagen de prueba con imread.

I = imread("peppers.png");
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

El modelo preentrenado requiere que el tamaño de la imagen coincida con el tamaño de entrada de la red. Determine el tamaño de entrada de la red con la propiedad InputSize de la primera capa de la red.

sz = net.Layers(1).InputSize
sz = 1×3

   224   224     3

Cambie el tamaño de la imagen para que coincida con el tamaño de entrada de la red.

I = imresize(I,sz(1:2));

Clasifique la imagen con classify.

label = classify(net,I)
label = categorical
     bell pepper 

Muestre la imagen y el resultado de clasificación juntos.

imshow(I)
title(label)

Figure contains an axes object. The axes object with title bell pepper contains an object of type image.

En el espacio de trabajo, extraiga el conjunto de datos MathWorks Merch.

unzip("MerchData.zip");

Para ver las redes preentrenadas disponibles, abra Deep Network Designer.

deepNetworkDesigner

Seleccione ResNet-18 y haga clic en Open. Si no se ha instalado Deep Learning Toolbox™ Model for ResNet-18 Network, el software abre Add-On Explorer.

Para cargar los datos en Deep Network Designer, vaya a la pestaña Data y haga clic en Import Data > Import Image Classification Data. En la lista Data source, seleccione Folder. Haga clic en Browse y seleccione la carpeta MerchData que ha extraído.

Divida los datos en conjuntos de datos de entrenamiento y de validación. Utilice el 70% de las imágenes para el entrenamiento y el 30% para la validación. Seleccione Randomize para asignar aleatoriamente la proporción especificada de imágenes a los conjuntos de validación y entrenamiento.

Haga clic en Import para importar los datos en Deep Network Designer.

En la app se muestra un resumen de los datos importados.

Para volver a entrenar la red preentrenada para clasificar nuevas imágenes, sustituya la última capa totalmente conectada y la última capa de clasificación por otras adaptadas al nuevo conjunto de datos.

En el panel Designer, desplácese hasta el final de la red y, luego, amplíe el zoom. Arrastre una nueva capa fullyConnectedLayer al lienzo. Cambie OutputSize por el número de clases de los nuevos datos (5 en este ejemplo).

Para que el aprendizaje sea más rápido en las nuevas capas que en las capas transferidas, establezca WeightLearnRateFactor y BiasLearnRateFactor en 10. Elimine la última capa totalmente conectada ('fc1000') y conecte la capa nueva en su lugar.

Sustituya la capa de salida. Arrastre una nueva capa classificationLayer al lienzo. Elimine la capa de salida original ('ClassificationLayer_predictions') y conecte la capa nueva en su lugar.

Especificar las opciones de entrenamiento. Seleccione la pestaña Training y haga clic en Training Options. Establezca Solver en sgdm, InitialLearnRate en 0.0001, MiniBatchSize en 11, MaxEpochs en 8 y ValidationFrequency en 5.

Para entrenar la red con las opciones de entrenamiento especificadas, haga clic en OK y, luego, en Train.

Para exportar la arquitectura de red con los pesos entrenados, vaya a la pestaña Training y seleccione Export > Export Trained Network and Results. Deep Network Designer exporta la red entrenada como la variable trainedNetwork_1.

Cargue una nueva imagen para clasificarla con la red entrenada.

I = imread("MerchDataTest.jpg");

Deep Network Designer cambia el tamaño de las imágenes durante el entrenamiento de forma que coincidan con el tamaño de entrada de la red. Para ver el tamaño de entrada de la red, vaya al panel Designer y seleccione imageInputLayer (primera capa). El tamaño de entrada de la red es de 224 por 224.

Cambie el tamaño de la imagen de prueba de forma que coincida con el tamaño de entrada de la red.

I = imresize(I,[224 224]);

Clasifique la imagen de prueba con la red entrenada.

YPred = classify(trainedNetwork_1,I);
imshow(I)
title("Predicted Class: " + string(YPred));

Cargue la red neuronal ResNet-18 y encuentre el tamaño de entrada.

net = resnet18;
inputSize = net.Layers(1).InputSize;

Extraiga el conjunto de datos MathWorks Merch. Cargue las nuevas imágenes como un almacén de datos de imágenes.

unzip("MerchData.zip");
imds = imageDatastore("MerchData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

numClasses = numel(categories(imds.Labels));

Divida los datos en conjuntos de datos de entrenamiento y de validación. Especifique "randomized" para asignar aleatoriamente la proporción especificada de imágenes a los conjuntos de validación y entrenamiento.

[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,"randomized");

Utilice un almacén de datos de imágenes aumentado para cambiar automáticamente el tamaño de las imágenes de entrenamiento para que coincidan con el tamaño de la entrada de la red.

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);

Para volver a entrenar la red preentrenada para clasificar nuevas imágenes, sustituya la última capa totalmente conectada y la última capa de clasificación por otras adaptadas al nuevo conjunto de datos. En primer lugar, extraiga la gráfica de capas a partir de la red entrenada.

lgraph = layerGraph(net); 

Sustituya la capa totalmente conectada por una nueva capa totalmente conectada que tenga un número de salidas igual al número de clases. Para que el aprendizaje sea más rápido en las nuevas capas que en las capas transferidas, aumente los valores de WeightLearnRateFactor y BiasLearnRateFactor en la capa totalmente conectada.

newLearnableLayer = fullyConnectedLayer(numClasses, ...
    WeightLearnRateFactor=10, ...
    BiasLearnRateFactor=10);
    
lgraph = replaceLayer(lgraph,"fc1000",newLearnableLayer);

La capa de clasificación especifica las clases de salida de la red. Sustituya la capa de clasificación por una nueva sin etiquetas de clase. trainNetwork establece automáticamente las clases de salida de la capa en el momento del entrenamiento.

newClassLayer = classificationLayer;
lgraph = replaceLayer(lgraph,"ClassificationLayer_predictions",newClassLayer);

Especifique las opciones de entrenamiento. Para ralentizar el aprendizaje en las capas transferidas, establezca la tasa de aprendizaje inicial en un valor pequeño.

options = trainingOptions("sgdm", ...
    InitialLearnRate=0.0001, ...
    MiniBatchSize=11, ...
    MaxEpochs=8, ...
    ValidationData=augimdsValidation, ...
    ValidationFrequency=5, ...
    Verbose=false, ...
    Plots="training-progress");

Entrene la red.

trainedNetwork = trainNetwork(augimdsTrain,lgraph,options);

Figure Training Progress (03-Apr-2023 07:57:09) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 15 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 15 objects of type patch, text, line.

Cargue una nueva imagen para clasificarla con la red entrenada.

I = imread("MerchDataTest.jpg");
I = imresize(I,inputSize(1:2));

Clasifique la imagen de prueba.

YPred = classify(trainedNetwork,I);
imshow(I)
title("Predicted class: " + string(YPred));

Figure contains an axes object. The axes object with title Predicted class: MathWorks Cube contains an object of type image.

Argumentos de salida

contraer todo

Red neuronal convolucional ResNet-18 preentrenada, devuelta como un objeto DAGNetwork.

Arquitectura de red neuronal convolucional ResNet-18 sin entrenar, devuelta como un objeto LayerGraph.

Referencias

[1] ImageNet. http://www.image-net.org

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Deep residual learning for image recognition." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 770-778. 2016.

Capacidades ampliadas

Historial de versiones

Introducido en R2018a