Redes neuronales profundas preentrenadas
Se puede utilizar una red de clasificación de imágenes preentrenada que ya haya aprendido a extraer características potentes e informativas a partir de imágenes naturales y utilizarla como punto de partida para aprender una tarea nueva. La mayoría de redes preentrenadas se entrenan con un subconjunto de la base de datos ImageNet [1], que se utiliza en el ImageNet Large-Scale Visual Recognition Challenge (ILSVRC) [2]. Estas redes se han entrenado con más de un millón de imágenes y pueden clasificarlas en 1000 categorías de objetos (por ejemplo, teclado, taza de café, lápiz y muchos animales). Utilizar una red preentrenada con transferencia del aprendizaje suele ser más rápido y fácil que entrenar una red desde cero.
Puede usar redes entrenadas previamente para las siguientes tareas:
Finalidad | Descripción |
---|---|
Clasificación | Aplicar redes preentrenadas directamente a problemas de clasificación. Para clasificar una nueva imagen, utilice |
Extracción de características | Utilizar una red preentrenada como un extractor de características utilizando las activaciones de las capas como características. Puede utilizar estas activaciones como características para entrenar otro modelo de machine learning, como una máquina de vectores de soporte (SVM). Para obtener más información, consulte Extracción de características. Para ver un ejemplo, consulte Extract Image Features Using Pretrained Network. |
Transferencia del aprendizaje | Utilizar capas de una red entrenada con un conjunto de datos grande y ajustarla con un nuevo conjunto de datos. Para obtener más información, consulte Transferencia del aprendizaje. Para ver un ejemplo sencillo, consulte Introducción a la transferencia del aprendizaje. Para probar más redes preentrenadas, consulte Entrenar redes de deep learning para clasificar nuevas imágenes. |
Comparar redes preentrenadas
Las redes preentrenadas tienen diferentes características que son importantes cuando se elige una red para aplicarla a un problema. Las características más importantes son la precisión, la velocidad y el tamaño de la red. Elegir una red es, por lo general, un tradeoff entre estas características. Utilice la siguiente gráfica para comparar la precisión de validación de ImageNet con el tiempo necesario para hacer una predicción mediante la red.
Sugerencia
Para comenzar con la transferencia del aprendizaje, pruebe a seleccionar una de las redes más rápidas, como SqueezeNet o GoogLeNet. A continuación, puede iterar rápidamente y probar diferentes configuraciones, como los pasos de preprocesamiento de datos y las opciones de entrenamiento. Una vez que se haya hecho una idea de cuál es la mejor configuración, pruebe una red más precisa, como Inception-v3 o ResNet, y compruebe si los resultados han mejorado.
Nota
La gráfica anterior solo muestra una indicación de las velocidades relativas de las distintas redes. Los tiempos exactos de predicción e iteración de entrenamiento dependen del hardware y del tamaño de minilote que utilice.
Una red buena tiene una precisión alta y es rápida. La gráfica muestra la precisión de clasificación frente al tiempo de predicción cuando se utiliza una GPU moderna (una Tesla® P100 de NVIDIA®) y un tamaño de minilote de 128. El tiempo de predicción se mide en relación con la red más rápida. El área de cada marcador es proporcional al tamaño de la red en el disco.
La precisión de clasificación en el conjunto de validación de ImageNet es la forma más habitual de medir la precisión de redes entrenadas con ImageNet. Las redes que son precisas en ImageNet también son precisas a menudo cuando se aplican a otros conjuntos de datos de imágenes naturales mediante la transferencia del aprendizaje o la extracción de características. Esta generalización es posible porque las redes han aprendido a extraer características potentes e informativas a partir de imágenes naturales que se generalizan en otros conjuntos de datos similares. No obstante, la alta precisión de ImageNet no siempre se transfiere directamente a otras tareas, por lo que es recomendable probar varias redes.
Si desea realizar una predicción utilizando un hardware restringido o con redes distribuidas en Internet, considere también el tamaño de la red en el disco y en la memoria.
Precisión de red
Existen varias maneras para calcular la precisión de clasificación en el conjunto de validación de ImageNet. Además, hay distintas fuentes que utilizan distintos métodos. En unas ocasiones se utiliza un ensemble de varios modelos y, en otras, cada imagen se evalúa varias veces mediante varios recortes. En ocasiones, se tienen en cuenta las cinco precisiones principales en lugar de la precisión estándar (la principal). Debido a estas diferencias, a menudo no se pueden comparar directamente las precisiones procedentes de diferentes fuentes. Las precisiones de redes preentrenadas en Deep Learning Toolbox™ son precisiones estándar (la principal) utilizando un solo modelo y un solo recorte de imagen central.
Cargar redes preentrenadas
Para cargar la red SqueezeNet, escriba squeezenet
en la línea de comandos.
net = squeezenet;
Para otras redes, utilice funciones como googlenet
para obtener los enlaces para descargar redes preentrenadas desde Add-On Explorer.
En la siguiente tabla se enumeran las redes preentrenadas entrenadas en ImageNet y algunas de sus propiedades. La profundidad de la red se define como el mayor número de capas convolucionales secuenciales o totalmente conectadas en una ruta desde la capa de entrada hasta la capa de salida. Las entradas para todas las redes son imágenes RGB.
Network | Profundidad | Tamaño | Parámetros (millones) | Tamaño de entrada de imagen |
---|---|---|---|---|
squeezenet | 18 | 5,2 MB | 1.24 | 227 por 227 |
googlenet | 22 | 27 MB | 7.0 | 224 por 224 |
inceptionv3 | 48 | 89 MB | 23.9 | 299 por 299 |
densenet201 | 201 | 77 MB | 20.0 | 224 por 224 |
mobilenetv2 | 53 | 13 MB | 3.5 | 224 por 224 |
resnet18 | 18 | 44 MB | 11.7 | 224 por 224 |
resnet50 | 50 | 96 MB | 25.6 | 224 por 224 |
resnet101 | 101 | 167 MB | 44.6 | 224 por 224 |
xception | 71 | 85 MB | 22.9 | 299 por 299 |
inceptionresnetv2 | 164 | 209 MB | 55.9 | 299 por 299 |
shufflenet | 50 | 5,4 MB | 1.4 | 224 por 224 |
nasnetmobile | * | 20 MB | 5.3 | 224 por 224 |
nasnetlarge | * | 332 MB | 88.9 | 331 por 331 |
darknet19 | 19 | 78 MB | 20.8 | 256 por 256 |
darknet53 | 53 | 155 MB | 41.6 | 256 por 256 |
efficientnetb0 | 82 | 20 MB | 5.3 | 224 por 224 |
alexnet | 8 | 227 MB | 61.0 | 227 por 227 |
vgg16 | 16 | 515 MB | 138 | 224 por 224 |
vgg19 | 19 | 535 MB | 144 | 224 por 224 |
*Las redes NASNet-Mobile y NASNet-Large no están formadas por una secuencia lineal de módulos.
GoogLeNet entrenada en Places365
La red estándar GoogLeNet se entrena con el conjunto de datos de ImageNet, pero también puede cargar una red entrenada con un conjunto de datos de Places365 [3] [4]. La red entrenada con Places365 clasifica imágenes en 365 categorías de ubicaciones diferentes (por ejemplo, campo, parque, pista de aterrizaje y recibidor). Para cargar una red GoogLeNet preentrenada entrenada con un conjunto de datos de Places365, utilice googlenet('Weights','places365')
. Cuando se realiza la transferencia del aprendizaje para realizar una nueva tarea, el enfoque más habitual consiste en utilizar redes preentrenadas con ImageNet. Si la nueva tarea es similar a clasificar escenas, podría obtener precisiones más altas usando la red entrenada con Places365.
Para obtener información sobre redes preentrenadas adecuadas para tareas de audio, consulte Redes preentrenadas para aplicaciones de audio.
Visualizar redes preentrenadas
Puede descargar y visualizar redes preentrenadas con Deep Network Designer.
deepNetworkDesigner(squeezenet)
Para ver las propiedades de una capa y editarlas, seleccione una capa. Haga clic en el icono de ayuda situado junto al nombre de la capa para obtener información sobre las propiedades de la capa.
Para examinar otras redes preentrenadas en Deep Network Designer, haga clic en New.
Si necesita descargar una red, deténgase en la red deseada y haga clic en Install para abrir Add-On Explorer.
Extracción de características
La extracción de características es una forma fácil y rápida de utilizar la potencia de deep learning sin invertir tiempo y esfuerzos en entrenar una red completa. Como solo requiere una única pasada por las imágenes de entrenamiento, resulta especialmente útil si no tiene una GPU. Se extraen las características de las imágenes aprendidas mediante una red preentrenada y, a continuación, se utilizan esas características para entrenar un clasificador, como una máquina de vectores de soporte mediante fitcsvm
(Statistics and Machine Learning Toolbox).
Pruebe la extracción de características cuando el nuevo conjunto de datos sea muy pequeño. Dado que solo se entrena un clasificador sencillo con las características extraídas, el entrenamiento es rápido. También es improbable que ajustar capas más profundas de la red mejore la precisión, ya que hay pocos datos de los que aprender.
Si los datos son muy similares a los datos originales, puede que las características más específicas extraídas de las capas más profundas de la red resulten útiles para la nueva tarea.
Si los datos son muy diferentes a los datos originales, puede que las características extraídas de las capas más profundas de la red resulten menos útiles para la tarea. Pruebe a entrenar el clasificador final con características más generales extraídas de una capa de red anterior. Si el nuevo conjunto de datos es grande, también puede probar a entrenar una red desde cero.
Las ResNet suelen ser buenas extractoras de características. Para ver un ejemplo de cómo utilizar una red preentrenada para la extracción de características, consulte Extract Image Features Using Pretrained Network.
Transferencia del aprendizaje
Puede ajustar capas más profundas en la red entrenando la red con el nuevo conjunto de datos tomando como punto de partida la red preentrenada. Ajustar una red con la transferencia del aprendizaje suele ser un proceso más rápido y sencillo que crear y entrenar una red nueva. La red ya ha aprendido un conjunto rico de características de imagen, pero cuando ajuste la red, esta puede aprender características específicas para el nuevo conjunto de datos. Si tiene un conjunto de datos muy grande, puede que la transferencia del aprendizaje no sea más rápida que un entrenamiento desde cero.
Sugerencia
Ajustar una red suele proporcionar la precisión más alta. Para conjuntos de datos muy pequeños (menos de unas 20 imágenes por clase), pruebe la extracción de características en su lugar.
Ajustar una red es un proceso más lento y requiere más esfuerzo que una simple extracción de características, pero dado que la red puede aprender a extraer un conjunto de características diferente, la red final suele ser más precisa. El ajuste funciona normalmente mejor que la extracción de datos siempre y cuando el nuevo conjunto de datos no sea muy pequeño, porque entonces la red tiene datos de los que aprender nuevas características. Para ver ejemplos de cómo realizar la transferencia del aprendizaje, consulte Transferencia del aprendizaje con Deep Network Designer y Entrenar redes de deep learning para clasificar nuevas imágenes.
Importar y exportar redes
Puede importar redes y gráficas de capas de TensorFlow™ 2, TensorFlow-Keras, PyTorch® y del formato de modelo ONNX™ (Open Neural Network Exchange). También puede exportar redes de Deep Learning Toolbox y gráficas de capas al formato de modelos TensorFlow 2 y ONNX.
Importar funciones
Plataforma de deep learning externa y formato de modelos | Importar modelo como red | Importar modelo como gráfica de capas |
---|---|---|
Red TensorFlow en formato SavedModel | importTensorFlowNetwork | importTensorFlowLayers |
Red TensorFlow-Keras en formato HDF5 o JSON | importKerasNetwork | importKerasLayers |
Modelo PyTorch rastreado en archivo .pt | importNetworkFromPyTorch | No se aplica |
Red con formato de modelo ONNX | importONNXNetwork | importONNXLayers |
Las funciones importTensorFlowNetwork
e importTensorFlowLayers
son más recomendables que las funciones importKerasNetwork
e importKerasLayers
. Para obtener más información, consulte Recommended Functions to Import TensorFlow Models.
Las funciones importTensorFlowNetwork
, importTensorFlowLayers
, importNetworkFromPyTorch
, importONNXNetwork
e importONNXLayers
crean capas personalizadas generadas de forma automática cuando se importa un modelo con capas de TensorFlow, capas de PyTorch u operadores de ONNX que las funciones no pueden convertir en capas de MATLAB® integradas. Las funciones guardan las capas personalizadas generadas de forma automática en un paquete en la carpeta actual. Para obtener más información, consulte Autogenerated Custom Layers.
Exportar funciones
Exportar red o gráfica de capas | Plataforma de deep learning externa y formato de modelos |
---|---|
exportNetworkToTensorFlow | Modelo TensorFlow 2 en paquete de Python® |
exportONNXNetwork | Formato de modelo ONNX |
La función exportNetworkToTensorFlow
guarda una red de Deep Learning Toolbox o una gráfica de capas como un modelo TensorFlow en un paquete de Python. Para obtener más información sobre cómo descargar el modelo exportado y guardarlo en un formato estándar de TensorFlow, consulte Load Exported TensorFlow Model y Save Exported TensorFlow Model in Standard Format.
Utilizando ONNX como un formato intermedio, puede interoperar con otros marcos de trabajo de deep learning que sean compatibles con las exportaciones o las importaciones de modelos ONNX.
Redes preentrenadas para aplicaciones de audio
Audio Toolbox™ proporciona las redes preentrenadas VGGish, YAMNet, OpenL3 y CREPE. Utilice las funciones vggish
(Audio Toolbox), yamnet
(Audio Toolbox), openl3
(Audio Toolbox) y crepe
(Audio Toolbox) en MATLAB o los bloques VGGish (Audio Toolbox) y YAMNet (Audio Toolbox) en Simulink® para interactuar directamente con las redes preentrenadas. También puede importar y visualizar redes preentrenadas de audio con Deep Network Designer.
En la siguiente tabla se enumeran las redes de audio preentrenadas disponibles y algunas de sus propiedades.
Network | Profundidad | Tamaño | Parámetros (millones) | Tamaño de entrada |
---|---|---|---|---|
crepe (Audio Toolbox) | 7 | 89,1 MB | 22.2 | 1024 por 1 por 1 |
openl3 (Audio Toolbox) | 8 | 18,8 MB | 4.68 | 128 por 199 por 1 |
vggish (Audio Toolbox) | 9 | 289 MB | 72.1 | 96 por 64 por 1 |
yamnet (Audio Toolbox) | 28 | 15,5 MB | 3.75 | 96 por 64 por 1 |
Utilice VGGish y YAMNet para realizar la transferencia del aprendizaje y la extracción de características. Extraiga las incrustaciones de características de VGGish u OpenL3 para introducirlas en sistemas de machine learning y deep learning. La función classifySound
(Audio Toolbox) y el bloque Sound Classifier (Audio Toolbox) utilizan YAMNet para localizar y clasificar sonidos en una categoría de 521 disponibles. La función pitchnn
(Audio Toolbox) utiliza CREPE para estimar el tono con deep learning.
Para ver ejemplos de cómo adaptar redes de audio preentrenadas a una nueva tarea, consulte Transfer Learning with Pretrained Audio Networks (Audio Toolbox) y Transfer Learning with Pretrained Audio Networks in Deep Network Designer.
Para obtener más información sobre el uso de deep learning para aplicaciones de audio, consulte Deep Learning for Audio Applications (Audio Toolbox).
Modelos preentrenados en GitHub
Para encontrar los últimos modelos preentrenados, consulte MATLAB Deep Learning Model Hub.
Por ejemplo:
Para los modelos de transformador, como GPT-2, BERT y FinBERT, consulte el repositorio de GitHub® Transformer Models for MATLAB.
Para un modelo de detección preentrenado del objeto EfficientDet-D0, consulte el repositorio de GitHub Pretrained EfficientDet Network For Object Detection.
Referencias
[1] ImageNet. http://www.image-net.org
[2] Russakovsky, O., Deng, J., Su, H., et al. “ImageNet Large Scale Visual Recognition Challenge.” International Journal of Computer Vision (IJCV). Vol 115, Issue 3, 2015, pp. 211–252
[3] Zhou, Bolei, Aditya Khosla, Agata Lapedriza, Antonio Torralba, and Aude Oliva. "Places: An image database for deep scene understanding." arXiv preprint arXiv:1610.02055 (2016).
[4] Places. http://places2.csail.mit.edu/
Consulte también
alexnet
| googlenet
| inceptionv3
| densenet201
| darknet19
| darknet53
| resnet18
| resnet50
| resnet101
| vgg16
| vgg19
| shufflenet
| nasnetmobile
| nasnetlarge
| mobilenetv2
| xception
| inceptionresnetv2
| squeezenet
| importTensorFlowNetwork
| importTensorFlowLayers
| importNetworkFromPyTorch
| importONNXNetwork
| importONNXLayers
| exportNetworkToTensorFlow
| exportONNXNetwork
| Deep Network Designer
Temas relacionados
- Deep Learning in MATLAB
- Transferencia del aprendizaje con Deep Network Designer
- Extract Image Features Using Pretrained Network
- Clasificar una imagen con GoogLeNet
- Entrenar redes de deep learning para clasificar nuevas imágenes
- Visualize Features of a Convolutional Neural Network
- Visualize Activations of a Convolutional Neural Network
- Deep Dream Images Using GoogLeNet