Principio del modelo ResNet

La principal diferencia entre ResNet y Vgg:

1. ResNet tiene una estructura de red más profunda que Vgg

2. En comparación con Vgg, ResNet introduce la estructura de conexión residual

3. ResNet presenta la capa BatchNorm, lo que permite a ResNet entrenar una estructura de red más profunda.

4. ResNet usa la capa convolucional con zancada = 2 en lugar de la capa de agrupación en Vgg para reducir la resolución

5. La gran diferencia entre el diseño de ResNet y Vgg es que cuando el tamaño del mapa de características de ResNet se reduce a la mitad, el número de canales de la capa convolucional se duplica.

VGG

 

La red ResNet fue propuesta por He Kaiming y otros grandes maestros en Microsoft Labs en 2015. Obtuvo el primer lugar en la tarea de clasificación y el primer lugar en la detección de objetivos en la competencia ImageNet de ese año. Obtuvo el primer lugar en detección de objetos y segmentación de imágenes en el conjunto de datos COCO.

ResNet se transforma sobre la base de VGG. Se introduce la conexión de omisión de capa de conexión para evitar la desaparición y explosión del gradiente y otros fenómenos.

1. ¿Qué es Saltar Conexión?

Skip Connection es un método para conectar nodos entre diferentes capas en una red neuronal profunda. En una red neuronal tradicional, la señal se transmite desde la capa de entrada a la capa de salida, y la salida de cada capa oculta debe ser procesada por la función de activación antes de transmitirse a la siguiente capa, mientras que Skip Connection transmitirá la señal simultáneamente. de la capa actual de regreso a la siguiente capa en un nivel más profundo, es decir, "salta" la capa intermedia. Y esta conexión entre capas puede acelerar la transmisión de información, evitar la desaparición del gradiente y retener más información.

Dos, las ventajas de Skip Connection

Para redes neuronales profundas, las ventajas de Skip Connection son las siguientes:

1. Resolver el problema de la desaparición del gradiente
Con el aumento del número de capas de la red neuronal, el problema de la desaparición del gradiente se vuelve más grave, lo que dificulta la actualización efectiva de los nodos profundos e incluso el proceso de entrenamiento se estancará por completo. Skip Connection puede retener más información , de modo que el gradiente se pueda propagar entre diferentes capas a través de conexiones entre capas, resolviendo así eficazmente el problema de la desaparición del gradiente.

2. Acelerar el entrenamiento del modelo
Dado que Skip Connection permite que la señal se transmita directamente a la siguiente capa en un nivel más profundo sin tener que pasar por la capa intermedia, puede acortar la ruta de transmisión de la red neuronal, acelerar la velocidad de transmisión de información y la velocidad de entrenamiento de toda la red neuronal .

3. Mejorar la capacidad de generalización del modelo
En el entrenamiento de algunas redes neuronales profundas, debido a la diferencia entre el conjunto de entrenamiento y el conjunto de prueba, se produce el fenómeno de sobreajuste. Al agregar Skip Connection, se puede retener más información, mejorando así la capacidad de generalización del modelo y reduciendo el riesgo de sobreajuste.

La red residual se construye sobre BN y la diferencia se ajusta con un polinomio. La ventaja es que la respuesta del peso cerca de la solución es más sensible y es más fácil aprender cuál es la solución óptima.

Resnet

¿Por qué es importante la profundidad de la red?

Debido a que CNN puede extraer características de nivel bajo/medio/alto, cuantas más capas haya en la red, más ricas serán las características que se pueden extraer en diferentes niveles. Además, las características extraídas por la red más profunda son más abstractas y tienen más información semántica.

¿Por qué no podemos simplemente aumentar el número de capas de red?

对于原来的网络,如果简单地增加深度,会导致梯度弥散或梯度爆炸。

La solución a este problema es regularizar la inicialización y la capa de regularización intermedia (normalización por lotes), de modo que se puedan entrenar decenas de capas de redes.

虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题,网络层数增加,但是在训练集上的准确率却饱和甚至下降了。这个不能解释为overfitting,因为overfit应该表现为在训练集上表现更好才对。
退化问题说明了深度网络不能很简单地被很好地优化。
作者通过实验:通过浅层网络+ y=x 等同映射构造深层模型,结果深层模型并没有比浅层网络有等同或更低的错误率,推断退化问题可能是因为深层的网络并不是那么好训练,也就是求解器很难去利用多层网络拟合同等函数。

¿Cómo solucionar el problema de la degradación?

Redes residuales profundas. Si las capas posteriores de la red profunda son mapas de identidad, entonces el modelo degenera en una red superficial. Entonces lo que tenemos que resolver ahora es aprender la función de mapeo de identidad. Sin embargo, es difícil permitir que algunas capas se ajusten directamente a una función de mapeo de identidad potencial H (x) = x, lo que puede ser la razón por la cual las redes profundas son difíciles de entrenar. Sin embargo, si la red está diseñada como H(x) = F(x) + x, como se muestra a continuación. Podemos pasar a aprender una función residual F(x) = H(x) - x. Siempre que F(x)=0, constituye un mapa de identidad H(x) = x. Además, el residual de ajuste debe ser mucho más fácil.

Principio del modelo ResNet

La red VGG tiene grandes ventajas en la representación de características, pero es muy difícil entrenar una red profunda . Para solucionar este problema, los investigadores han propuesto una serie de técnicas de entrenamiento, como el abandono y la normalización (Batch Normalization ).

En 2015, He Kaiming propuso la Red Residual (ResNet) para reducir la dificultad del entrenamiento de la red y resolver el problema de la desaparición del gradiente .

imagen

Figura 1 Degradado que desaparece

ResNet permite a CNN aprender el mapeo residual mediante la introducción de una conexión de omisión. La estructura residual (cuello de botella) se muestra en la Figura 2.

imagen

Figura 2 estructura residual

En la estructura residual de la Figura 2, la entrada x es primero un núcleo de convolución de 1 x 1, 64 capas de convolución y, finalmente, un núcleo de convolución de 1 x 1, 256 capas de convolución, y la dimensión primero se vuelve más pequeña y luego más grande. La salida de la red es H (x). Si no se introduce ninguna rama de estructura de salto, H (x) = F (x). De acuerdo con la regla de la cadena, el gradiente se vuelve cada vez más pequeño al derivar x. Después de introducir la rama, H (x) = F (x) + x, derivando x, el gradiente local obtenido es 1, y cuando el gradiente se propaga hacia atrás, el gradiente no desaparecerá.

La Figura 3 es la estructura de ResNet, que muestra los detalles del marco de 18 capas, 34 capas, 50 capas, 101 capas y 152 capas. "x 2" y "x 23" en la figura indican que la capa convolucional se repite 2 veces o 23 veces. Podemos encontrar que todas las redes se dividen en 5 partes, a saber, conv1, conv2_x, conv3_x, conv4_x, conv5_x.

imagen

Figura 3 Estructura ResNet

Conv1 en la Figura 3 usa un núcleo de convolución de 7  7. Cuando el número de canales es el mismo, la cantidad de cálculo de los parámetros de convolución es que el núcleo de convolución de 7 x 7 es mayor que el núcleo de convolución de 3 x 3; cuando el número de canales es inconsistente, si el número de canales es pequeño , se puede utilizar un núcleo de convolución grande.

Cuando el número de canales de la primera capa convolucional es 3, tres núcleos de convolución de 3 x 3 tienen el mismo efecto de campo receptivo que un núcleo de convolución de 7 x 7, pero un núcleo de convolución de 7 x 7 es mejor que tres de 3 x 3. Hay muchos parámetros. En la capa 19 de VGG y la capa 34 de ResNet, la cantidad de cálculo de los parámetros se muestra en la Figura 4. La cantidad de cálculo de la capa 34 de ResNet que utiliza un núcleo de convolución de 7 x 7 es mucho menor que la de la capa 19 de VGG. usando tres convoluciones de 3 x 3. nuclear.

imagen

Figura 4 Cálculos de parámetros.

Los tamaños de salida de las capas convolucionales conv2_x y conv3_x en la Figura 3 son 56 x 56 y 28 x 28 respectivamente. Si la capa convolucional conv2_x adopta una estructura de salto para conv3_x, debido a las dimensiones inconsistentes de los mapas de características, no se pueden agregar directamente En este momento, la estructura de salto puede usar convolución para garantizar que las dimensiones de los mapas de características sean consistentes y se puedan agregar los mapas de características.

Los FLOP (operaciones de punto flotante) en la última fila de la Figura 3 se refieren al número de operaciones de punto flotante, que pueden medir la complejidad del marco. La complejidad del marco está relacionada con ponderaciones y sesgos. La altura, el ancho y el número de canales de la imagen de entrada están representados por H_in, W_in y D_in, respectivamente; la altura, el ancho y el número de canales del mapa de características de salida están representados por H_out, W_out y D_out, respectivamente. ; el ancho y la altura del núcleo de convolución están representados por F_w, F_h, respectivamente Representa; N_p representa la cantidad de cálculo de un punto en el mapa de características, y su fórmula de cálculo es la siguiente:

imagen

La fórmula para calcular los FLOP de una convolución es la siguiente:

imagen

Para la capa completamente conectada, el mapa de características de entrada se ampliará en un vector de 1 x N_in y la dimensión del vector de salida será 1 x N_out. La fórmula para calcular los FLOP de una capa completamente conectada es la siguiente:

imagen

La complejidad de una red se puede calcular en PyTorch utilizando el kit de herramientas Flops.

imagen

Figura 5 FLOP de las redes ResNet 34 y VGG 16

Reproducción de código ResNet

La red ResNet se refiere a la red VGG 19 y se ha modificado en base a ella. Los cambios se reflejan principalmente en el hecho de que ResNet utiliza directamente la convolución de stride = 2 para reducir la resolución y reemplaza la capa completamente conectada con Global. Capa de piscina promedio.

ResNet utiliza dos estructuras residuales, como se muestra en la Figura 5 a continuación. La imagen de la izquierda corresponde a una red poco profunda. Cuando las dimensiones de entrada y salida son consistentes, la entrada se puede agregar directamente a la salida. La imagen de la derecha corresponde a la red profunda. Cuando las dimensiones son inconsistentes (correspondiente a la duplicación de la dimensión), se utiliza una convolución de 1 x 1 para reducir primero la dimensión y luego aumentarla.

imagen

Figura 5 estructura residual

La implementación del código de las dos estructuras residuales es la siguiente, la clase BasicBlock (nn.Module) se refiere a la unidad residual de la red poco profunda ResNet 18/34:

imagen

clase Bottleneck (nn.Module) se refiere a la unidad residual de la red profunda ResNet 50/101/152:

imagen

La estructura general de ResNet es la siguiente:

imagen

La función forward() en la clase ResNet especifica el flujo de datos de la red:

(1) Después de que los datos ingresan a la red, primero se somete a una convolución (conv1) y luego se realiza una reducción de resolución del grupo (f1);

(2) Luego ingrese la parte de convolución intermedia (conv2_x, conv3_x, conv4_x, conv5_x);

(3) Finalmente, los datos se generan a través de una agrupación promedio (avgpool) y una capa completamente conectada (fc) para obtener el resultado;

La parte de convolución media es principalmente la parte del cuadro azul en la figura siguiente, y [2, 2, 2, 2] y [3, 4, 6, 3] en la parte del cuadro rojo representan el número de repeticiones de bolck.

imagen

La diferencia entre ResNet18 y otras redes de la serie Res es principalmente  conv2_x  ~ conv5_x, y otros componentes son similares.

imagen

Supongo que te gusta

Origin blog.csdn.net/qq_38998213/article/details/132502386
Recomendado
Clasificación