Operación de convolución, operación de agrupación, función de activación de red neuronal convolucional (CNN)

Prólogo: la red neuronal convolucional es una parte importante del algoritmo de aprendizaje profundo y desempeña un papel clave en la aplicación de la tecnología de reconocimiento de imágenes de aprendizaje profundo. La red neuronal convolucional y la red neuronal recurrente (RNN) son similares a las redes neuronales tradicionales totalmente conectadas (también llamadas redes neuronales profundas, denominadas DNN). CNN pertenece a la DNN que codifica la correlación espacial y RNN pertenece a la codificación de la correlación temporal. DNN. Debido a las diferentes tareas de imagen, la capa de red de CNN también cambiará ligeramente, pero básicamente se utilizan capas convolucionales, capas de agrupación y capas no lineales. Para profundizar la comprensión del conocimiento teórico en esta área, este artículo explicará en profundidad la operación de convolución, la operación de agrupación y la función de activación en CNN desde muchos aspectos.

Tabla de contenido

1. Capa de convolución

1.1 Cálculo de convolución

1.2 Características de la capa convolucional

1.3 Operaciones de convolución de uso común

2. Capa de agrupación

2.1 El papel de la agrupación

2.2 Operaciones de agrupación de uso común

3. Capa no lineal

3.1 El papel de la función de activación.

3.2 Funciones de activación de uso común


1. Capa de convolución

        La función de la capa convolucional es extraer la información de la imagen de entrada. Esta información se denomina características de la imagen. Estas características se reflejan en cada píxel de la imagen mediante métodos combinados o independientes, como las características de textura y las características de color de la imagen. .

1.1 Cálculo de convolución

        Antes de explicar el cálculo de convolución específico, sintamos intuitivamente la operación de convolución de diferentes dimensiones a través de algunas animaciones.

La operación de convolución unidimensional se muestra en la siguiente figura:

La operación de convolución bidimensional se muestra en la siguiente figura:

La operación de convolución de tres bits se muestra en la siguiente figura:

        El núcleo de convolución realiza una operación lineal: cada valor en el núcleo se multiplica por el valor en la posición correspondiente a la que se desliza y luego se suman estos valores. Tome la convolución bidimensional como ejemplo para explicar cómo Conv2d realiza el cálculo de convolución. Antes de explicar el cálculo de convolución, debemos comprender algunos conceptos importantes, que son muy útiles para comprender la operación de convolución:

①El bidimensional en la convolución bidimensional no significa que el núcleo de convolución sea bidimensional, no tiene nada que ver con la dimensión del núcleo de convolución, pero significa que el núcleo de convolución solo se desliza en dos dimensiones. De manera similar, la convolución unidimensional y la convolución tridimensional significan que el núcleo de convolución se desliza en una o tres dimensiones, como se muestra en las tres figuras anteriores;

②El número de canales del núcleo de convolución (o el número de núcleos de convolución, hay varios núcleos de convolución en un conjunto de núcleos de convolución) = el número de canales de la capa de entrada;

③El número de canales de la capa de salida (es decir, el número de canales de mapas de características o el número de mapas de características) = ​​el número de grupos de núcleos de convolución, es decir, solo se puede obtener un mapa de características después de que se realiza un conjunto de núcleos de convolución cálculo de convolución en la entrada, y el mapa de características tiene n Un canal indica que es necesario utilizar n conjuntos de núcleos de convolución para realizar cálculos de convolución en la entrada.

        Después de comprender los conceptos anteriores, usemos ahora un ejemplo para experimentar específicamente cómo se calcula la convolución bidimensional.

        Como se muestra en la figura anterior, suponiendo que la entrada es una imagen bidimensional con canales RGB3, entonces un conjunto de núcleos de convolución contiene tres núcleos de convolución bidimensionales, es decir, los núcleos de convolución también deben tener tres canales. Estos 3 núcleos de convolución se deslizan en los 3 canales de la imagen de entrada respectivamente. Por ejemplo, en el canal R, cada vez que se desliza, los elementos correspondientes se multiplican y suman para obtener un número, y los 3 núcleos de convolución se deslizan una vez para obtener 3 número, agregue estos 3 números y agregue un sesgo para obtener un valor en el mapa de características, el conjunto de núcleos de convolución se desliza por toda la imagen de entrada, luego puede obtener un mapa de características completo, este Un mapa de características representa una característica extraída de un imagen de entrada. Generalmente, no es suficiente extraer solo una característica en la imagen de entrada, a menudo es necesario obtener más información de características en la imagen de entrada, es decir, obtener múltiples mapas de características, luego se requieren múltiples conjuntos de núcleos de convolución para realizar la convolución. en la imagen cálculo del producto. En la siguiente figura, se utilizan dos conjuntos de núcleos de convolución para calcular dos mapas de características.

La operación de convolución bidimensional se implementa en Pytorch mediante la siguiente función:

#二维卷积
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
#参数介绍:
#in_channels:输入的通道数
#out_channels:输出的通道数
#kernel_size:卷积核的大小
#stride:卷积核滑动的步长,默认是1
#padding:怎么填充输入图像,此参数的类型可以是int , tuple或str , optional 。默认padding=0,即不填充。
#dilation:设置膨胀率,即核内元素间距,默认是1。即如果kernel_size=3,dilation=1,那么卷积核大小就是3×3;如果kernel_size=3,dilation=2,那么卷积核大小为5×5
#groups:通过设置这个参数来决定分几组进行卷积,默认是1,即默认是普通卷积,此时卷积核通道数=输入通道数
#bias:是否添加偏差,默认true
#padding_mode:填充时,此参数决定用什么值来填充,默认是'zeros',即用0填充,可选参数有'zeros', 'reflect', 'replicate'或'circular'

Suponiendo que el tamaño de entrada es (N,C_{in},H_{in},W_{in})y el tamaño de salida después de la convolución es (N,C_{salida},H_{salida},W_{salida}), entonces:

H_{out}=\frac{H_{in}+2*padding[0]-dilation[0]*(kernalsize[0]-1)-1}{stride[0]}+1

W_{out}=\frac{W_{in}+2*padding[1]-dilation[1]*(kernalsize[1]-1)-1}{stride[1]}+1

1.2 Características de la capa convolucional

① Compartir peso

        Utilice el mismo conjunto de parámetros para recorrer toda la imagen y extraer información de características comunes en toda la imagen, como características de textura, etc. Se utilizan diferentes núcleos de convolución para extraer información de características que tienen características comunes en diferentes aspectos de la imagen, es decir, es decir, convolución Un mapa de características obtenido después de la operación representa una característica de la imagen extraída. El peso compartido es una idea importante en el aprendizaje profundo, que puede mantener una buena capacidad de la red al tiempo que reduce los parámetros de la red. Las redes neuronales convolucionales comparten pesos en el espacio, mientras que las redes neuronales recurrentes comparten pesos en el tiempo.

② Conexión local

        Las capas convolucionales evolucionan a partir de capas completamente conectadas, donde cada salida está conectada a todas las entradas mediante pesos. En las tareas de reconocimiento visual, las características clave de la imagen, bordes, esquinas, etc. solo ocupan una pequeña parte de toda la imagen, y es menos probable que dos píxeles que están muy separados en la imagen se afecten entre sí. Por lo tanto, en una capa convolucional, cada neurona de salida permanece completamente conectada a nivel de canal, mientras que espacialmente está conectada solo a una fracción de las neuronas de entrada en su vecindad.

1.3 Operaciones de convolución de uso común

1) convolución grupal

        La diferencia entre la convolución grupal y la convolución ordinaria es que la convolución ordinaria mantiene una conexión completa en el canal y solo está conectada localmente a una pequeña cantidad de neuronas de entrada en el vecindario en el espacio, mientras que la convolución grupal es local tanto en el canal como en el espacio. entonces no es difícil encontrar que la convolución grupal puede reducir aún más los parámetros sobre la base de la convolución ordinaria, pero el efecto puede ser peor que la convolución ordinaria. Como se muestra en la figura siguiente, puede observar intuitivamente la diferencia entre convolución grupal y convolución ordinaria.

        Por ejemplo, supongamos que la forma de entrada es (1, 12, 24, 24), el tamaño del núcleo del núcleo de convolución es 3 y se requiere que el número de canales de salida sea 64. Si se trata de una convolución ordinaria, entonces el número de los parámetros de peso son 3 × 3 × 12 × 64 = 6912; y si se usa convolución de grupo, asumiendo 4 grupos, entonces el número de parámetros de peso es 3 × 3 × 3 × 16 × 4 = 1728, y la cantidad de parámetros de convolución de grupo se reduce a convolución ordinaria Un cuarto de la cantidad de parámetros del producto. La implementación del código de convolución de grupo también es muy simple: simplemente modifique el valor del parámetro de grupos en la función torch.nn.Conv2d () y modifíquelo en varios grupos.

2) Convolución separable en profundidad

        La convolución separable en profundidad significa que el proceso de convolución se divide en convolución en profundidad y convolución puntual. La convolución en profundidad es en realidad una convolución grupal de grupos = el número de canales de entrada, lo que aísla completamente la influencia mutua de los píxeles en el canal y no utiliza de manera efectiva la información de características de diferentes canales en la misma posición espacial, por lo que se requiere convolución puntual. Estos mapas de características se combinan linealmente entre canales para generar nuevos mapas de características. Los procesos de operación de convolución en profundidad y convolución puntual se muestran en la siguiente figura.

 Convolución en profundidad

 Convolución puntual

        Una cosa a tener en cuenta es que la cantidad de canales del mapa de características después de completar la convolución en profundidad es la misma que la cantidad de canales en la capa de entrada, es decir, la convolución en profundidad no cambia la cantidad de canales y la convolución puntual no puede Solo haga que cada píxel se combine linealmente en diferentes canales; también puede cambiar el número de canales.

        En pocas palabras, la convolución separable en profundidad se puede considerar como una combinación de convolución de grupo y convolución 1 × 1, donde el número de grupos es igual al número de canales de entrada en la implementación del código. En términos generales, el efecto de la convolución separable en profundidad es mejor que la convolución grupal. El efecto es bueno y el efecto es similar al de la convolución ordinaria, porque la convolución separable en profundidad logra una conexión completa en canales como la convolución ordinaria y una conexión local en el espacio, que está más en línea con la Las características de la interacción de píxeles de la imagen, pero utilizando la convolución separable en profundidad, la cantidad de parámetros se reducirá mucho que la convolución ordinaria. Por ejemplo, supongamos que la forma de entrada es (1, 12, 24, 24), el tamaño del núcleo del núcleo de convolución es 3 y se requiere que el número de canales de salida sea 64. Si se trata de una convolución ordinaria, entonces el número de Los parámetros de peso son 3 × 3 × 12 × 64 = 6912; si se utiliza convolución separable en profundidad, entonces el número de parámetros de peso es 3 × 3 × 1 × 1 × 12 + 1 × 1 × 12 × 64 = 876.

2. Capa de agrupación

2.1 El papel de la agrupación

       La introducción de la capa de agrupación imita el sistema visual humano para reducir la dimensión y abstraer los objetos de entrada visual. Tiene principalmente las siguientes funciones:

① Invariancia de características: la operación de agrupación hace que el modelo preste más atención a si hay ciertas características en la imagen independientemente de la forma en que aparezcan, como la posición y el tamaño de las características. Entre ellos, la invariancia de características incluye principalmente la invariancia de traducción y la invariancia de escala. La invariancia de traducción significa que la traducción de la salida a la entrada permanece básicamente sin cambios. Por ejemplo, si la entrada es (4, 1, 3, 7, 2), la agrupación máxima tomará 7. Si la entrada se desplaza hacia la izquierda por un bit para obtener (1, 3, 7, 2, 0), el resultado de salida seguirá siendo 7; para la invariancia de escala, la operación de agrupación es equivalente al cambio de tamaño de la imagen, generalmente la imagen de un perro se duplica y podemos Todavía reconozco esto. Es una foto de un perro, lo que significa que las características más importantes del perro aún se conservan en esta imagen. Podemos decir que la imagen en la imagen es un perro de un vistazo. La información eliminada durante la compresión de la imagen. Solo hay información irrelevante, la información restante es la característica con invariancia de escala, que es la característica que mejor puede expresar la imagen.

②Reducción de dimensionalidad de características (reducción de resolución): sabemos que una imagen contiene mucha información y tiene muchas características, pero parte de la información no es muy útil o repetitiva para que realicemos tareas de imágenes, podemos usar este tipo de redundancia Eliminación de información, extrayendo la Las características más importantes también desempeñan un papel importante en las operaciones de agrupación.

③La capa de agrupación reducirá continuamente el tamaño del espacio de los datos, por lo que la cantidad de parámetros y la cantidad de cálculo también disminuirán, lo que también controla el sobreajuste hasta cierto punto.

④ Realizar la no linealidad (similar a relu).

⑤Amplíe el campo receptivo.

2.2 Operaciones de agrupación de uso común

1) Agrupación máxima, agrupación promedio, agrupación máxima global (GMP), agrupación promedio global (GAP)

        Agrupación máxima: seleccione el valor máximo del área del núcleo de agrupación en la imagen como valor agrupado del área.

Agrupación promedio: calcule el valor promedio         del área del núcleo agrupada en la imagen como el valor agrupado del área.

        Entonces, ¿cuál es la base para decidir si utilizar la agrupación máxima o la agrupación promedio? Antes de responder a esta pregunta, debemos comprender que el error generado por la red al extraer características de una imagen proviene principalmente de dos aspectos : ①El tamaño limitado del vecindario significa que la información de datos en esta parte del área no es lo suficientemente completa. lo que resulta en un aumento en la varianza del valor estimado. Grande ; ②El error de los parámetros de la capa convolucional aumenta la desviación del valor estimado (el artículo sobre regularización explica en detalle que el error se puede expresar como la suma de la desviación, la varianza, y ruido, es decir, error = desviación + varianza + ruido). En términos generales, la agrupación promedio puede reducir el primer error y retener más información de fondo de la imagen, mientras que la agrupación máxima puede reducir el segundo error y retener más información de textura de la imagen. Si aún no puede entender cómo elegir la agrupación máxima o la agrupación promedio, entonces otra explicación es usar la agrupación promedio cuando toda la información en el mapa de características debe contribuir a los resultados de la predicción del modelo , como el promedio global comúnmente usado en la segmentación de imágenes. se utiliza para obtener el contexto global. Por ejemplo, en la tarea de clasificación de imágenes, la agrupación promedio del mapa de características a menudo se realiza en lugar de la agrupación máxima, porque la información semántica de alto nivel en la red profunda generalmente puede ayudar al clasificador a clasificar, además, para reducir El impacto de la información inútil es utilizar la agrupación máxima . Por ejemplo, la capa superficial de la red a menudo ve la agrupación máxima, porque la capa superficial contiene más información inútil para la imagen. En resumen, la capa superficial de la red generalmente usa la agrupación máxima y la capa profunda usa principalmente la agrupación promedio .

Código:

#1、最大池化
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
#参数解释
#kernel_size:池化核的大小
#stride:池化核滑动的步长,默认大小是kernel_size
#padding:在输入图像的两边进行填充,默认是0,即不填充,另外填充值默认是0
#dilation:设置核的膨胀率,默认 dilation=1,如果kernel_size =3,那么核的大小就是3×3。如果        dilation = 2,kernel_size =3×3,那么每列数据与每列数据,每行数据与每行数据中间都再加一行或列数据,数据都用0填充,那么核的大小就变成5×5。
#return_indices:这个参数用来控制要不要返回最大值的索引位置,如果为true那么要记住最大池化后最大值的所在索引位置,后面上采样可能要用上,为false则不用记住位置。
#ceil_mode:它决定的是在计算输出结果形状的时候,是使用向上取整还是向下取整。
#2、平均池化
torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)
#参数讲解,与最大池化相同的参数代表的意思一样
#count_include_pad:为True时表示平均计算时零填充也包含在内
#divisor_override:如果指定,它将用作除数,否则将使用池化区域的大小
#3、全局最大池化
torch.nn.AdaptiveMaxPool2d(output_size, return_indices=False)
#这个函数用来自适应最大池化
#output_size:决定将输入图像分几个区域池化,如果output_size=1,就代表全局最大池化
#全局平均池化
torch.nn.AdaptiveAvgPool2d(output_size)
#这个函数代表自适应平均池化
#output_size:决定输入图像分几个区域进行平均池化,output_size=1,就代表全局平均池化

2) Agrupación superpuesta

Es decir, hay un área superpuesta entre ventanas de agrupación adyacentes . En este momento, generalmentekernel_size > stride

3) Agrupación de pirámides espaciales (SPP)

        Convierte una agrupación en una agrupación de múltiples escalas. Utilice ventanas de agrupación de diferentes tamaños para actuar en el mapa de características de la capa superior. Como se muestra en la figura siguiente, el mapa de características de entrada se agrupa tres veces con diferentes tamaños de ventana y luego se envía a la capa completamente conectada.

Un diseño estructural de este tipo puede garantizar que incluso una red convolucional con una capa completamente conectada pueda manejar imágenes de diferentes tamaños. ¿Por qué las capas completamente conectadas no pueden manejar imágenes de diferentes tamaños? Esto se debe a que la cantidad de neuronas en ambos lados de la capa completamente conectada debe ser fija y la cantidad de neuronas debe ser diferente para imágenes de entrada de diferentes tamaños. Su código se puede implementar utilizando la agrupación máxima adaptativa o la agrupación promedio adaptativa mencionada anteriormente. Se han desarrollado muchas estructuras similares a partir de SPP, como ASPP, ROI Pooling, etc., que no se enumerarán aquí.

3. Capa no lineal

3.1 El papel de la función de activación.

        La introducción de funciones de activación puede aportar capacidades no lineales a las redes neuronales, lo cual es muy importante, porque la mayoría de los datos en el mundo no son lineales y las redes lineales no pueden aprender ni simular datos no lineales como imágenes y audio. Además, si no se introduce ninguna capa no lineal en la red neuronal, entonces la red neuronal se convierte en una simple pila de capas lineales, y la pila simple de redes lineales multicapa se puede expresar esencialmente mediante una función lineal, lo que hace que la profundidad de la red neuronal pierde su significado original. Finalmente, la función de activación también puede asignar datos del espacio no lineal al espacio lineal, de modo que los datos puedan clasificarse mejor.

3.2 Funciones de activación de uso común

1) función de activación sigmoidea

sigmoide(x)=\frac{1}{1+e^{-x}}

        La función sigmoidea comprime el rango de valores a (0,1), que se ajusta justo a las características de la distribución de probabilidad y puede usarse en la capa de salida para la predicción de probabilidad. Su ventaja es que es continua y puede guiarse a todas partes. La desventaja es que cuando el valor de la función está cerca de 0 y 1, el gradiente de la función es pequeño y es fácil hacer que el gradiente desaparezca y el valor de salida de la La función siempre es positiva, no está centrada en 0, lo que hará que el peso vaya a Actualizar solo en una dirección, afectando así la tasa de convergencia.

2) Función de activación de Tanh

tanh=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

         La función de activación tanhx también se llama función de activación tangente hiperbólica. Esta función comprime el rango de valores a (-1,1). Su ventaja es que el valor de salida está centrado en 0, lo que resuelve el problema de que el peso en la función sigmoidea Solo se puede actualizar en una dirección, el problema, su desventaja es que también hará que el gradiente desaparezca y la cantidad de cálculo sea enorme.

3) Función de activación ReLU

f(x)=máx(0,x)

         La función de activación ReLU, también conocida como unidad lineal modificada o función de rectificación lineal, es una función de activación muy utilizada en redes neuronales. Su ventaja es que ReLU tiene escasez, pequeña cantidad de cálculo, velocidad de convergencia rápida y x>0no hay desaparición de gradiente en la región. La desventaja es que la salida no está centrada en 0 y x<0los pesos de esta parte de las neuronas nunca se actualizarán.

4) Función de activación de Leaky ReLU

y=máx(0,x)+\alfa *mín(0,x)

        Esta función de activación resuelve el problema de que x<0los pesos de esta parte de las neuronas en la función de activación ReLU nunca se actualizarán

 El problema.

Supongo que te gusta

Origin blog.csdn.net/Mike_honor/article/details/125999256
Recomendado
Clasificación