Krypton Solid

La última tecnología en raciones de 5 minutos

Un patrón de diseño básico para el reconocimiento de imágenes.

Antes de 2017, la mayoría de las versiones de modelos de redes neuronales se codificaban en un estilo de secuencia de comandos por lotes. A medida que los investigadores de IA y los ingenieros de software experimentados se involucraron cada vez más en la investigación y el diseño, comenzamos a ver un cambio en la codificación de modelos que reflejaba los principios de ingeniería de software para la reutilización y los patrones de diseño.

Un patrón de diseño implica que existe una «mejor práctica» para construir y codificar un modelo que se puede volver a aplicar en una amplia gama de casos, como clasificación de imágenes, detección y seguimiento de objetos, reconocimiento facial, segmentación de imágenes, superresolución y transferencia de estilo. .

La introducción de patrones de diseño también ayudó a promover las redes neuronales convolucionales (así como otras arquitecturas de red) al ayudar a otros investigadores a comprender y reproducir la arquitectura de un modelo.

Un estilo de procedimiento para la reutilización fue una de las primeras versiones del uso de patrones de diseño para modelos de redes neuronales. Comprender la arquitectura del patrón de diseño de reutilización de procedimientos es crucial si lo va a aplicar a cualquier modelo que esté construyendo. Una vez que vea cómo funcionan las partes, individualmente y juntas, puede comenzar a trabajar con el código que construye estas partes, código que está disponible para su descarga gratuita. En mi nuevo libro Patrones de diseño de aprendizaje profundo, Muestro cómo el patrón de diseño de reutilización procedimental facilita la reproducción de componentes del modelo aplicándolo a varios modelos anteriormente de última generación, incluidos VGG, ResNet, ResNeXt, Inception, DenseNet y SqueezeNet. Esto ofrece tanto una comprensión más profunda de cómo funcionan estos modelos como una experiencia práctica para reproducirlos.

En este artículo, le presentaré un patrón de diseño de reutilización de procedimientos basado en el patrón de diseño idiomático para redes neuronales convolucionales (CNN). Luego veremos cómo el patrón de diseño se puede adaptar a un modelo de CNN de última generación para el reconocimiento de imágenes: el generador de gráficos visuales (VGG).

Arquitectura macro de CNN

Comencemos con una descripción general rápida de la estructura de una CNN, para ayudarlo a comprender dónde pueden encajar los patrones de diseño en el proceso.

La macroarquitectura de una CNN sigue la convención de tres componentes que consta de una raíz, un alumno y una tarea, como se muestra en la siguiente figura.

Arquitectura macro de CNN
La macroarquitectura de CNN se compone de tres componentes: la raíz, el alumno y la tarea.

El madre toma la entrada (una imagen, por ejemplo) y realiza la extracción inicial de características de nivel grueso. Esta extracción luego se convierte en la entrada del componente del alumno. A veces podemos agregar un preprocesamiento para realizar funciones en el modelo que se realizaron previamente en sentido ascendente, como el preprocesamiento y el aumento de imágenes.

El aprendiz utiliza una secuencia de grupos convolucionales para realizar una extracción detallada de características, así como el aprendizaje representacional de esas características generales extraídas. El resultado del componente del alumno se conoce como el espacio latente.

Portada del libro Deep Learning Design PatternsHaga clic en la imagen para aprender

más sobre
Aprendizaje profundo

Patrones de diseño desde

Publicaciones Manning.

Obtén un 35% de descuento en cualquier formato

por entrar
ttferlitsch en

el cuadro del código de descuento

en caja.

El tarea El componente utiliza la representación de la entrada en el espacio latente para aprender la tarea del modelo. En nuestro ejemplo, la tarea consiste en clasificar la imagen, por ejemplo, como un gato o un perro.

Mientras mi libro se centra en convolucional Redes neuronales, esta macroarquitectura de componentes troncales, de aprendizaje y de tareas se puede aplicar a otras arquitecturas de redes neuronales, como las redes transformadoras con mecanismos de atención utilizados en el procesamiento del lenguaje natural.

Ahora veamos la arquitectura básica en código con una plantilla de esqueleto usando la API funcional de TensorFlow Keras. En el siguiente ejemplo de código, obtiene una vista de alto nivel del flujo de datos entre los tres componentes. El esqueleto consta de dos partes principales: la función o las definiciones de entrada / salida de procedimiento de los componentes principales (raíz, alumno y tarea); y la entrada, que es una tensor que fluye hacia el vástago y el ensamblaje de los componentes.

def stem(input_shape):    #A 
    ''' stem layers 
        Input_shape : the shape of the input tensor
    '''
    return outputs
def learner(inputs):    #B
    ''' leaner layers 
        inputs : the input tensors (feature maps)
    '''
    return outputs
def task(inputs, n_classes): #C
    ''' classifier layers 
        inputs    : the input tensors (feature maps)
        n_classes : the number of output classes
    '''
    return outputs
inputs = Input(input_shape=(224, 224, 3)) #D
x = stem(inputs)
x = learner(x)
outputs = task(x, n_classes=1000)
model = Model(inputs, outputs) #E

#A construye el componente de la raíz.
#B construye el componente de aprendizaje.
#C construye el componente de la tarea.
#D define el tensor de entrada.
#E ensambla el modelo.

TensorFlow Keras

Si no está familiarizado con las construcciones de TensorFlow Keras, como la clase Input y Model, le recomiendo leer sobre ellas. My Deep Learning Primer, que cubre los pasos y componentes más básicos del aprendizaje profundo, es un recurso para consultar; está disponible de forma gratuita en línea.

En este ejemplo de código, la clase Entrada define el tensor de entrada del modelo. En el caso de una CNN, ese tensor consiste en la forma de la imagen. La tupla (224, 224, 3) se refiere a una imagen 224×224 RGB (3 canales). El modelo de clase es el paso final al codificar la red neuronal con la API funcional TensorFlow.Keras. Este es el último paso de compilación y se denomina método compile (). Los parámetros de la clase Model son el (los) tensor (es) de entrada del modelo y el (los) tensor (es) de salida. En nuestro ejemplo, tenemos un tensor de entrada y salida única.

El componente del tallo

El madre componente es el punto de entrada a la red neuronal. Su propósito principal es realizar la primera extracción de características de nivel grueso mientras se reducen los mapas de características a un tamaño diseñado para la componente de aprendizaje. Más específicamente, el número de mapas de características y los tamaños de los mapas de características generados por el componente de vástago se diseñan equilibrando dos criterios críticos. Necesitamos que:

  • Maximice la extracción de funciones para funciones de nivel básico, de manera que el modelo tenga suficiente información para aprender características de nivel más fino dentro de la capacidad del modelo; y
  • Minimizar el número de parámetros en los componentes de aprendizaje posteriorest, de manera que el tamaño y el tiempo para entrenar el modelo se minimizan sin afectar el rendimiento del modelo.

Esta tarea inicial la realiza el grupo convolucional de tallo. Varios modelos de CNN bien conocidos utilizan diferentes enfoques en el grupo de tallos para realizar este acto de equilibrio. Aquí, veamos una versión anterior, VGG, que se considera el padre de las CNN modernas.

Patrón de diseño VGG

La arquitectura VGG ganó el concurso de reconocimiento visual a gran escala ImageNet 2014 para la clasificación de imágenes. El VGG formalizó el concepto de construir una CNN en componentes y grupos usando un patrón. Antes de VGG, las CNN se construían como ConvNets, cuya utilidad no iba más allá de las novedades académicas. Es decir, los VGG fueron los primeros en tener aplicaciones prácticas en producción. Durante varios años, los investigadores continuaron comparando desarrollos de arquitectura más modernos con el VGG en sus estudios de ablación y utilizando VGG para la columna vertebral de clasificación de los modelos tempranos de detección de objetos.

Junto con Inception, VGG formalizó el concepto de tener un primer grupo convolucional que hiciera una extracción de características de nivel grueso; ahora nos referimos a este grupo como el componente de la raíz. Los grupos convolucionales posteriores realizaron niveles más finos de extracción de características. Estos grupos también presentaron aprendizaje, que ahora llamamos aprendizaje representacional. De ahí el término «aprendiz» para este componente.

El componente de vástago para un VGG, como se muestra en la siguiente figura, fue diseñado para tomar una imagen de 224x224x3 como entrada y luego generar 64 mapas de características, cada uno a 224×224. El grupo de tallos VGG no redujo el tamaño de los mapas de características. La convención de generar 64 mapas de características de nivel aproximado continúa en la actualidad, y la raíz de las CNN modernas generalmente genera 32 o 64 mapas de características.

Grupo de vástagos VGG
El grupo de vástagos VGG utiliza un filtro de 3×3 para la extracción de características de nivel grueso.

A continuación se muestra una muestra para codificar el componente del vástago VGG en el patrón de diseño idiomático, que consta de una sola capa convolucional. En TensorFlow Keras, es la capa Conv2D. Esta capa utiliza un filtro de 3×3 para la extracción de características de nivel grueso para 64 filtros. No reduce el tamaño de los mapas de características. Con una entrada de imagen (224, 224, 3) (estándar para imágenes del conjunto de datos ImageNet), la salida de este grupo de raíces será (224, 224, 64).

def stem(inputs):
    """ Construct the Stem Convolutional Group
        inputs : the input tensor
    """
    outputs = Conv2D(64, (3, 3), strides=(1, 1), padding="same",   
                     activation="relu")(inputs)
    return outputs

Github proporciona una reproducción de código completa utilizando el patrón de diseño de reutilización de procedimientos idiomáticos para VGG.

Finalmente, los investigadores descubrieron el inconveniente de un vástago VGG. Al retener el tamaño de la entrada (224×224) en los mapas de características gruesos extraídos, resultó en un número innecesario de parámetros que ingresaron al alumno. Esto, a su vez, aumentó la huella de memoria y redujo el rendimiento para el entrenamiento y la predicción. Los modelos posteriores de última generación agregaron la agrupación en el componente del vástago, lo que disminuyó la huella de memoria y aumentó el rendimiento sin pérdida de precisión.

Deja un comentario

También te puede interesar...

Registro de Skype: cómo registrarse en Skype

Un amigo tuyo se ha mudado al extranjero para hacer un Erasmus y has accedido a seguir en contacto por skype: Una gran solución, excepto que realmente no entiendes de tecnología y no tienes idea

Compruebe el número de TIM | Krypton Solid

¿Te has suscrito a un plan de telefonía que te permite llamar y/o intercambiar mensajes gratis con números TIM? Así que apuesto a que a menudo quiere llamar a sus amigos, pero no sabe si

Definición de tasa de desempleo

¿Cuál es la tasa de desempleo? La tasa de desempleo es el porcentaje de la población activa desempleada. Es un indicador retrasado, lo que significa que generalmente aumenta o disminuye como resultado de las condiciones

Turnbull busca arreglar el espectro NBN

El ministro de Comunicaciones, Malcolm Turnbull, emitió un borrador de dirección que permitiría a NBN Co obtener acceso al espectro tan necesario en la banda de 3.5 GHz para su red inalámbrica fija. Un análisis

Venezuela se basa en mainframes IBM Linux

El venezolano Banco Mercantil está comprando la estrategia de IBM para usar Linux en una computadora mainframe. El banco, uno de los más grandes de Venezuela, trasladará las tareas que actualmente se ejecutan en 30

Aprenda a contar con CSS

Aprenda a contar con CSS Escondidos en las profundidades de la especificación CSS, encontrará contadores CSS. Como sugiere el nombre, te permiten contar algo en tu página con CSS incrementando el valor cada vez que

COVID-19 ha acelerado proyectos digitales

Cuando se produjo la pandemia de COVID-19, las prioridades de los proyectos digitales para el CIO del Departamento de Asuntos de Veteranos de EE. UU. Cambiaron rápidamente, al igual que para los CIO de los