Convolución (3)

Convolución separable

La convolución separable propone un fondo.

Las redes neuronales convolucionales tradicionales han logrado muy buenos resultados en el campo de la visión por computadora, pero todavía hay un problema que debe mejorarse: la cantidad de cálculo es grande.

Cuando las redes neuronales convolucionales se aplican a escenarios industriales reales, la cantidad de parámetros y la cantidad de cálculo del modelo son indicadores muy importantes. Los modelos más pequeños pueden realizar entrenamiento distribuido de manera eficiente, reducir la sobrecarga de actualización del modelo y reducir el volumen de la plataforma, el consumo de energía y el almacenamiento y la potencia informática. limitaciones para facilitar el despliegue en terminales móviles.

Por lo tanto, para cumplir mejor este requisito, los académicos han propuesto una convolución separable más eficiente basándose en la operación de convolución.

convolución espacialmente separable

La convolución espacial separable, como sugiere el nombre, divide la operación de convolución estándar en la dimensión espacial y divide el núcleo de convolución estándar en múltiples núcleos de convolución pequeños. Por ejemplo, podemos dividir el núcleo de convolución en el producto externo de dos (o más) vectores: [ 3 6 9 4 8 12 5 10 15 ] = [ 3 4 5 ] × [ 1 2 3 ] \left[\begin { matriz}{ccc} 3 y 6 y 9 \\ 4 y 8 y 12 \\ 5 y 10 y 15 \end{array}\right]=\left[\begin{array}{ccc} 3 \\ 4 \ \ 5 \end{array}\right] \times \left[\begin{array}{ccc} 1 \quad 2 \quad 3 \end{array}\right] 345681091215 = 345 ×[123] En este momento, para una imagen de entrada, primero podemos hacer una convolución con un núcleo de 3 × 1 y luego hacer una convolución con un núcleo de 1 × 3 para obtener el resultado final. La operación específica se muestra en la siguiente figura.

Insertar descripción de la imagen aquí
De esta manera, dividimos la convolución original: una operación de convolución que originalmente requería 9 operaciones de multiplicación se convierte en dos operaciones de convolución que requieren 3 operaciones de multiplicación, y el efecto final permanece sin cambios. Es concebible que con menos operaciones de multiplicación, la complejidad computacional se reduzca y la red funcione más rápido.

Sin embargo, la convolución espacialmente separable también tiene ciertos problemas, es decir, no todos los núcleos de convolución se pueden dividir en dos núcleos de convolución más pequeños. Entonces este método no se usa mucho.

Ejemplos de aplicación

La convolución espacialmente separable rara vez se usa en el aprendizaje profundo. El operador sobel que se puede usar para la detección de bordes es más famoso en el campo del procesamiento de imágenes tradicional. El método de cálculo del operador sobel separado es el siguiente: [ − 1 0 1 − 2 0 2 − 1 0 1 ] = [ 1 2 1 ] × [ − 1 0 1 ] \left[\begin{array}{ccc} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 y 1 \end{array}\right]= \left[\begin{array}{ccc} 1 \\ 2 \\ 1 \end{array}\right] \times \left[\begin{array}{ccc } -1 \quad 0 \quad 1 \end{array}\right] 12 1000121 = 121 ×[101]

Convolución separable en profundidad

La diferencia entre las convoluciones separables en profundidad es que no solo involucran la dimensión espacial, sino también la dimensión de profundidad (es decir, la dimensión del canal). Normalmente la imagen de entrada tendrá 3 canales: R, G, B. Después de una serie de operaciones de convolución, el mapa de características de entrada se convertirá en múltiples canales. Para cada canal, podemos considerarlo como una explicación de una característica específica de la imagen. Por ejemplo, en la imagen de entrada, la explicación del canal "rojo" describe las características "rojas" de la imagen, la explicación del canal "verde" describe las características "verdes" de la imagen y la explicación del canal "azul" describe el " azul" en la imagen. característica. Para otro ejemplo, un mapa de características de salida con un número de canal de 64 equivale a explicar 64 características diferentes de la imagen de entrada original.

De manera similar a la convolución espacialmente separable, la convolución separable en profundidad también divide el núcleo de convolución en dos pequeños núcleos de convolución separados y realiza dos tipos de operaciones de convolución respectivamente: operación de convolución en profundidad y operación de convolución punto por punto. Primero, veamos cómo funciona la convolución normal.

Convolución estándar

Supongamos que tenemos una imagen de entrada de 12 × 12 × 3, es decir, el tamaño de la imagen es 12 × 12, el número de canales es 3, la imagen está convolucionada con 5 × 5 sin relleno y el paso es 1. Si solo consideramos el ancho y el alto de la imagen y usamos convolución de 5 × 5 para procesar la imagen de entrada de tamaño 12 × 12, finalmente podemos obtener un mapa de características de salida de 8 × 8. Sin embargo, dado que la imagen tiene 3 canales, nuestro núcleo de convolución también necesita tener 3 canales. Esto significa que cuando el núcleo de convolución se calcula en cada posición, en realidad realizará 5 × 5 × 3 = 75 multiplicaciones. Como se muestra en la figura siguiente, utilizamos un núcleo de convolución de 5 × 5 × 3 para la operación de convolución y finalmente podemos obtener un mapa de características de salida de 8 × 8 × 1.

Insertar descripción de la imagen aquí
¿Qué pasa si queremos aumentar la cantidad de canales de salida para que la red pueda aprender más funciones? En este momento, podemos crear múltiples núcleos de convolución, como 256 núcleos de convolución para aprender 256 categorías diferentes de características. En este momento, los 256 núcleos de convolución se operarán por separado para obtener 256 mapas de características de salida de 8 × 8 × 1, que se apilarán para finalmente obtener un mapa de características de salida de 8 × 8 × 256. Como se muestra abajo.
Insertar descripción de la imagen aquí
A continuación, echemos un vistazo a cómo obtener un mapa de características de salida de 8 × 8 × 256 mediante convolución separable en profundidad.

Operación de convolución profunda

Primero, realizamos una operación de convolución profunda en la imagen de entrada. La operación de convolución profunda aquí es en realidad una operación de convolución canal por canal. Para una imagen de entrada de 12 × 12 × 3, utilizamos un núcleo de convolución de tamaño 5 × 5 para realizar la operación canal por canal. El método de cálculo se muestra en la siguiente figura.

Insertar descripción de la imagen aquí
Aquí en realidad utilizamos tres núcleos de convolución de 5 × 5 × 1 para extraer respectivamente las características de los tres canales en la imagen de entrada. Una vez completado el cálculo de cada núcleo de convolución, obtendremos tres mapas de características de salida de 8 × 8 × 1. Estos Los mapas de características se apilan para obtener el mapa de características de salida final con un tamaño de 8 × 8 × 3. Aquí podemos encontrar una deficiencia de la operación de convolución profunda: la operación de convolución profunda carece de fusión de características entre canales y el número de canales no se puede cambiar antes y después de la operación.

Por lo tanto, es necesario conectar una convolución puntual para compensar sus deficiencias.

Operación de convolución puntual

Anteriormente, utilizamos la operación de convolución de profundidad para obtener un mapa de características de salida de 8 × 8 × 3 a partir de una imagen de entrada de 12 × 12 × 3, y descubrimos que solo usando convolución de profundidad no se puede lograr la fusión de características entre diferentes canales, y tampoco es posible. Para lograr la fusión de características entre diferentes canales, es imposible obtener un mapa de características de 8 × 8 × 256 consistente con la operación de convolución estándar. Entonces, echemos un vistazo a cómo utilizar la convolución puntual para lograr estas dos tareas.

La convolución puntual es en realidad una convolución 1 × 1, porque atraviesa cada punto, por eso la llamamos convolución puntual. La convolución 1 × 1 se introdujo en detalle en el contenido anterior. Aquí veremos su función específica según el ejemplo anterior.

Utilizamos una convolución de 1 × 1 de 3 canales para operar en el mapa de características de 8 × 8 × 3 obtenido anteriormente, y podemos obtener un mapa de características de salida de 8 × 8 × 1. Como se muestra abajo. En este momento, utilizamos convolución punto por punto para implementar la función de fusionar características entre tres canales.

Insertar descripción de la imagen aquí
Además, podemos crear 256 convoluciones de 3 canales 1 × 1 para operar en el mapa de características de 8 × 8 × 3 obtenido anteriormente, de esta manera, podemos lograr un mapa de características de 8 × 8 × 256 consistente con la operación de convolución estándar. Función de mapa de características. Como se muestra abajo.

Insertar descripción de la imagen aquí

El significado de la convolución separable en profundidad.

Arriba, proporcionamos el método de cálculo específico de la convolución separable en profundidad, entonces, ¿cuál es el significado de usar convolución separable en profundidad en lugar de convolución estándar?

Aquí observamos el número de operaciones de multiplicación de convolución estándar en el ejemplo anterior. Creamos 256 núcleos de convolución de 5×5×3 para operaciones de convolución. Cada núcleo de convolución se moverá 8×8 en la imagen de entrada. veces, por lo que el número total de operaciones de multiplicación es: 256 × 3 × 5 × 5 × 8 × 8 = 1228800 256 \times 3 \times 5 \times 5 \times 8 \times 8=1228800256×3×5×5×8×8=1228800 Después de cambiar a convolución separable en profundidad, durante la operación de convolución profunda, utilizamos tres núcleos de convolución de 5 × 5 × 1 para movernos 8 × 8 veces en la imagen de entrada. En este momento, el número de operaciones de multiplicación es: 3 ×5 × 5 × 8 × 8 = 4800 3 \veces 5 \veces 5 \veces 8 \veces 8=48003×5×5×8×8=4800 En la operación de convolución punto por punto, utilizamos 256 convoluciones 1 × 1 × 3 para movernos 8 × 8 veces en el mapa de características de entrada. En este momento, el número de operaciones de multiplicación es: 256 × 1 × 1 × 3 × 8× 8 = 49152 256 \veces 1 \veces 1 \veces 3 \veces 8 \veces 8=49152256×1×1×3×8×8=49152 Sumando estas dos operaciones, podemos obtener. Después de usar convolución separable en profundidad, el número total de operaciones de multiplicación se convierte en: 53952. Se puede ver que la complejidad computacional de la convolución separable en profundidad es mucho menor que la de la convolución estándar.

Ejemplos de aplicación

La convolución separable en profundidad utilizada en MobileNetv1 se muestra en el lado derecho de la figura siguiente. En comparación con la convolución estándar de la izquierda, está dividida y se utilizan una capa BN y una función de activación RELU para intercalar la operación de convolución profunda y la operación de convolución puntual.

Insertar descripción de la imagen aquí

Convolución deformable

antecedentes actuales

Un desafío clave en el reconocimiento visual es cómo adaptarse a los cambios geométricos en la escala del objeto, la pose, el punto de vista y la deformación de la pieza o la transformación geométrica del modelo.

Sin embargo, para los módulos CNN tradicionales para el reconocimiento visual, existen inevitablemente defectos en las estructuras geométricas fijas: la unidad de convolución muestrea el mapa de características de entrada en una posición fija; la capa de agrupación reduce la resolución espacial en una proporción fija; un ROI (región de interés ) ) La capa de agrupación divide un ROI en unidades espaciales fijas; carece del mecanismo interno para manejar la transformación geométrica, etc.

Estos causarán algunos problemas obvios. Por ejemplo, el tamaño del campo receptivo de todas las unidades de activación en la misma capa CNN es el mismo, lo cual no es necesario para capas CNN avanzadas que codifican semántica en ubicaciones espaciales. Además, para problemas prácticos de reconocimiento visual con localización fina (por ejemplo, segmentación semántica utilizando redes totalmente convolucionales), dado que diferentes ubicaciones pueden corresponder a objetos con diferentes escalas o deformaciones, es deseable determinar la adaptación de la escala o el tamaño del campo receptivo.

Para resolver las limitaciones mencionadas anteriormente, nació una idea natural: el núcleo de convolución ajusta de forma adaptativa su forma. Esto da lugar al método de convolución deformable.

convolución deformable

DCN v1

Como sugiere el nombre, convolución deformable significa que la posición de la convolución es deformable y no realiza convolución en la cuadrícula tradicional N × N. La ventaja de esto es que las características que queremos se pueden extraer con mayor precisión (solo convolución tradicional). Se pueden extraer las características de la caja rectangular). Podemos entenderlo de manera más intuitiva a través de una imagen:

Insertar descripción de la imagen aquí

En la imagen de arriba, la convolución tradicional de la izquierda obviamente no extrae las características de la oveja completa, mientras que la convolución deformable de la derecha extrae las características de la oveja irregular completa.

Entonces, ¿cómo funciona realmente la convolución variable? De hecho, se agrega un desplazamiento a cada punto de muestreo de convolución , como se muestra en la siguiente figura:

Insertar descripción de la imagen aquí
(a) La regla de convolución normal que se muestra muestra 9 puntos (puntos verdes); (b)©(d) es una convolución deformable, que agrega un desplazamiento (flecha azul) a las coordenadas de muestreo normales; entre ellas, (d) es una regla especial El caso de (b), que muestra que la convolución deformable se puede utilizar como casos especiales, como transformación de escala, transformación de escala y transformación de rotación.

Convolución ordinaria, con 3 × 3 3\times33×3 convoluciones como ejemplo para cada saliday ( p 0 ) y_(\mathrm{p}_0)y(pag0) , todo desdexxMuestreando 9 posiciones en x , estas 9 posiciones están todas en la posición centralx (p 0) \mathrm{x}(p0)x ( p 0 ) se extiende,( − 1 , − 1 ) (-1,-1)( -1 , _1 ) representax ( p 0 ) \mathrm{x}(p0)La esquina superior izquierda de x ( p 0 ) ,(1, 1) (1,1)( 1 ,1 ) representax ( p 0 ) \mathrm{x}(p0)La esquina inferior derecha de x ( p 0 ) . R = { ( − 1 , − 1 ) , ( − 1 , 0 ) , . . . , ( 0 , 1 ) , ( 1 , 1 ) } \mathrm{R} = \{(-1,-1), (-1,0),...,(0,1),(1,1)\}R={( - 1 ,1 ) ,( -1 , _0 ) ,... ,( 0 ,1 ) ,( 1 ,1 )} Entonces, la salida de la convolución tradicional es (dondepn \mathrm{p}_npagnorteEstá nn en la grilla.n puntos,w ( pn ) \mathrm{w}(\mathrm{p}_n)w ( pagnorte) representa el coeficiente de peso de convolución de la posición del punto correspondiente): y ( p 0 ) = ∑ pn ∈ R w ( pn ) ⋅ x ( p 0 + pn ) y(\mathrm{p}0)=\sum{\mathrm { p}_n\in\mathrm{R}}\mathrm{w}(\mathrm{p}_n) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n)y ( p0 ) _=pagnorter w ( pnorte)x ( p0+pagnorte) Como se describió anteriormente, la convolución deformable agrega un desplazamientoΔ pn \Delta \mathrm{p}_nΔpag _norte, es este desplazamiento el que deforma la convolución en una convolución irregular. Cabe señalar aquí que este desplazamiento puede ser un decimal, por lo que los valores propios de la siguiente fórmula deben calcularse mediante interpolación bilineal. y ( p 0 ) = ∑ pn ∈ R w ( pn ) ⋅ x ( p 0 + pn + Δ pn ) y(\mathrm{p}0)=\sum{\mathrm{p}_n\in\mathrm{R }}\mathrm{w}(\mathrm{p}_n) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n+\Delta \mathrm{p}_n)y ( p0 ) _=pagnorter w ( pnorte)x ( p0+pagnorte+Δpag _norte) Entonces, ¿cómo calcular esta compensación? Vamos a ver:Insertar descripción de la imagen aquí

Para un mapa de características de entrada, suponiendo que la operación de convolución original es 3 × 3, para aprender el desplazamiento de compensación, definimos otra capa de convolución de 3 × 3 (la capa superior en la imagen) y la salida La dimensión es en realidad el tamaño del mapa de características original y el número de canales es igual a 2N (que representa el desplazamiento en las direcciones xey respectivamente). Se puede considerar que la siguiente convolución deformable realiza primero una operación de interpolación basada en el desplazamiento generado en la parte anterior y luego realiza una convolución ordinaria.

DCN v2

DCN v2 agrega el peso de cada punto de muestreo según DCN v1 (agregando compensación)

Para resolver el problema de introducir algunas áreas irrelevantes, en DCN v2 no solo sumamos el desplazamiento de cada punto de muestreo, sino que también agregamos un coeficiente de peso Δ mk \Delta m_kΔ metrok, para distinguir si el área que introducimos es el área que nos interesa. Si no estamos interesados ​​en el área de este punto de muestreo, simplemente aprendemos el peso a 0: y (p 0 ) = ∑ pn ∈ R w ( pn ) ⋅ x ( p 0 + pn + Δ pn ) ⋅ Δ mky(\mathrm{p}0)=\sum{\mathrm{p}_n\in\mathrm{R}}\mathrm{w}(\mathrm {p}_n ) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n+\Delta \mathrm{p}_n) \cdot \Delta m_ky ( p0 ) _=pagnorter w ( pnorte)x ( p0+pagnorte+Δpag _norte)Δ metrok

Supongo que te gusta

Origin blog.csdn.net/weixin_49346755/article/details/127485502
Recomendado
Clasificación