CAE-ADMM: optimización implícita de la tasa de bits en codificadores automáticos comprimidos mediante poda basada en ADMM

papel

papel

código

código

Descripción general

  Los autores utilizan el método del multiplicador de dirección alterna (ADMM) para optimizar el equilibrio entre distorsión y eficiencia de compresión.
  Porque los métodos tradicionales utilizan estimadores de entropía para evaluar la tasa de bits y encontrar un equilibrio entre la calidad de la imagen y la tasa de compresión.
  El ADMM (método de multiplicadores de dirección alternativa) utilizado en este artículo es un algoritmo de optimización. El propósito de ADMM es representar datos como vectores dispersos. Un vector disperso es un vector en el que la mayoría de los elementos son cero, de modo que los datos se pueden comprimir. El número de coeficientes distintos de cero en el vector disperso también se puede ajustar de forma adaptativa para obtener el mejor efecto de compresión.
  El objetivo de este artículo es minimizar:
d ( x , x ^ ) + β ⋅ R ( z ^ ) d(\mathbf{x},\hat{\mathbf{x}})+\beta\cdot\underset{ }{ R}(\mathbf{\hat{z}})re ( x ,X^ )+br(z^ )
  d es la distorsión x entre la imagen de entrada x y lax reconstruida ^ \hat{x}X^ ,β > 0 es la relación de control, R es la codificación latente después de la cuantificación de la mediciónz ^ \hat{z}z^ tasa de bits.
  Los autores reemplazan el estimador de entropía con un módulo de método multiplicador de dirección alterna, y la poda agresiva de la codificación latente fomenta la escasez y, por lo tanto, contribuye a la optimización de la tasa de bits. Los experimentos muestran que este paradigma de poda en sí mismo es capaz de producir mejores resultados que el CAE original y otros códecs tradicionales bajo métricas SSIM y MS-SSIM, al tiempo que optimiza implícitamente la tasa de entropía.
  La estructura del marco CAE-ADMM propuesta por el autor es la siguiente:
Insertar descripción de la imagen aquí
  La arquitectura del modelo se muestra en la figura, que esuna modificación del CAE propuesto porLucas TheisEl codificador y el decodificador constan de capas convolucionales. La imagen de entrada primero se reduce a través de tres bloques, cada uno de los cuales contiene una capa convolucional, una capa de normalización por lotes y una capa PReLU. Después de 15 bloques residuales, se aplican dos bloques de convolución de reducción de resolución adicionales, donde el último bloque de convolución genera z. Luego, el cuantificador Q lo cuantifica y lo introduce en el decodificador, que tiene una arquitectura similar a la del codificador.
   Entre ellos, conv_same es un núcleo de convolución con un relleno de espejo de límite de 1, un núcleo de convolución de 3 × 3 y un paso de 1. El relleno del espejo del límite conv_down es 2, el núcleo de convolución es 5 × 5 y el paso es 2. Hay un núcleo de convolución en sub_pixel con un tamaño de núcleo de convolución de 1 × 1 y un tamaño de paso de 1. PixelShuffle es una reorganización y muestreo ascendente de píxeles, similar a la deconvolución, que puede ampliar el tamaño de la imagen. Bloque residual de cuello redondo, basado en el principio de resnet.

método

  Primero está la estructura CAE típica (compuesta por el codificador E, el decodificador D y el cuantificador Q): E : R n → R m , D : R m → R n , Q : R m → Z m . \begin{aligned} E: \mathbb{R}^n \to\mathbb{R}^m, \\ D:\mathbb{R}^m \to\mathbb{R}^n, \\ Q:\mathbb{R}^ m\ a\mathbb{Z}^m.\\ & & \end{aligned}mi:RnorteRmetro ,D:RmetroRnorte ,q:Rmetrozm .
  El codificador E convierte la imagen original x∈ R n \mathbb{R}^{n}Rn se asigna a una "representación latente" (el vector de características procesado por el codificador generalmente tiene mayor abstracción y mejor capacidad expresiva, y puede reflejar mejor las características esenciales de los datos de entrada) z = E (x). El cuantificador Q asigna cada elemento de z aZ \mathbb{Z}Z , lo que da como resultado una representación comprimida de la imagenz ^ \hat{z}z^ =Q(z). Finalmente, el decodificador D intenta extraer dez ^ \hat{z}zLa información en ^ reconstruye la imagen original x ^ \hat{x}X^ =D(z ^ \sombrero{z}z^ ).
  El objetivo de este artículo se puede expresar mediante la siguiente fórmula:
argmin ⁡ E , D d ( x , D ∘ Q ∘ E ( x ) ) + β ⋅ R ∘ Q ∘ E ( x ) \underset{E,D}{ \operatorname{argmin }}d(\mathbf{x},D\circ Q\circ E(\mathbf{x}))+\beta\cdot R\circ Q\circ E(\mathbf{x})mi , reargminre ( x ,Dqmi ( x ))+bRqEn términos generales, E ( x )
  es minimizar la imagen original x y la imagen reconstruidax ^ \hat{x}X^ y minimizar la tasa de bits R.

Cuantizador

  Quantizer Q utiliza un diseño propuesto por Lucas Theis et al., que se inspira en la versión binaria aleatoria propuesta por Toderici et al.
Q ( t ) = ⌊ t ⌋ + ϵ , ϵ ∈ { 0 , 1 } , Q(t)=\lfloor t\rfloor+\epsilon,\epsilon\in\{0,1\},_{}Q ( t )=t +ϵ ,ϵ{ 0 ,1 } ,

  Los corchetes representan el operador de redondeo hacia abajo. Cuando ϵ=1, se cumple P ( ϵ = 1 ) = t − ⌊ t ⌋. El significado de esta fórmula es que si t=1,7, entonces el valor de t − ⌊ t ⌋ es 0,7, es decir, la probabilidad de ϵ = 1 es 0,7, Q(t)=2. Si t = 1,3, entonces el valor de t − ⌊ t ⌋ es 0,3, es decir, la probabilidad de ϵ = 1 es 0,3 y la probabilidad alta ϵ = 0. Q(t)=1. Es decir, la parte decimal de t mayor que 0,5 se codifica como el entero más pequeño mayor que t, y la parte decimal de t menor que 0,5 se codifica como el entero más grande menor que t.
  Es decir:
Q ( t ) = { ⌊ t ⌋ + 1 t − ⌊ t ⌋ > 0.5 ⌊ t ⌋ t − ⌊ t ⌋ < 0.5 Q(t)=\begin{cases}\lfloor t\rfloor+1&t- \ lfloor t\rfloor>0.5\\ \lfloor t\rfloor&t-\lfloor t\rfloor<0.5\end{casos}Q ( t )={ t +1ttt >0,5tt <0.5
  Sin embargo, la estructura del modelo en este artículo utiliza normalización por lotes de normalización múltiple y relu, por lo que los valores en t están entre 0-1. Entonces, la fórmula anterior se puede resumir como:
Q ( t ) = { 1 t > 0.5 0 t < 0.5 t ∈ [ 0 , 1 ] Q(t)=\left\{\begin{matrix}1&t>0.5\\ 0&t < 0.5\\ \end{matrix}\right.t\in[0,1]Q ( t )={ 10t>0,5t<0.5t[ 0 ,1 ]

  Para hacer diferenciable un cuantificador, definimos su gradiente en términos de su expectativa:
∂ ∂ t Q ( t ) = ∂ ∂ t E [ Q ( t ) ] = ∂ ∂ tt = 1 \frac{\partial}{\partial t }Q(t)=\frac{\partial}{\partial t}\mathbb{E}[Q(t)]=\frac{\partial}{\partial t}t=1∂t _Q ( t )=∂t _mi [ Q ( t )]=∂t _t=1

Soluciones a problemas de optimización.

  Los autores proporcionan un método alternativo para optimizar R sin utilizar el estimador de entropía H. Podemos reformular R de la siguiente manera:
R ( z ^ ) = tarjeta ⁡ ( z ^ ) = tarjeta ⁡ ( Q ∘ E ( x ) ) , \begin{aligned} & \\ &R({\hat{\mathbf{ z}}}& )=\nombredeloperador{tarjeta}({\hat{\mathbf{z}}})=\nombredeloperador{tarjeta}(Q\circ E(\mathbf{x})), \\ & \end {alineado}R (z^)=tarjeta (z^ )=tarjeta ( Qmi ( x )) ,
  card(·) cuenta el número de elementos distintos de cero, con la esperanza de que el número de elementos distintos de cero de z generados por el codificador sea menor que el número requerido ℓ \ell , podemos reescribir el problema enun problema que pueda resolverseADMM
: argmin E , D d ( x , x ^ ) + g ( Z ) , st ⁡ Q ∘ E ( x ) − Z = 0. \mathop{ \mathrm{ argmin}}_{E,D}d(\mathbf{x},\mathbf{\hat{x}})+g(\mathbf{Z}),\\ \operatorname{st}Q\circ E(\mathbf{x})-\mathbf{Z}=0.argminmi , rere ( x ,X^ )+gramo ( Z ) ,calleqmi ( x )z=0.
  La función indicadora g(·) se define como:
g ( Z ) = { 0 si tarjeta ⁡ ( Z ) ≤ ℓ , + ∞ en caso contrario g(\mathbf{Z})=\left\{\begin{array } {ll}0&\textrm{if}\operatorname{card}(\mathbf{Z})\le\ell,\\ +\infty&\textrm{otherwise.}\end{array}\right.gramo ( Z )={ 0+sitarjeta ( Z ),de lo contrario .
  Nota, U \mathbf{U}UZ \mathbf{Z}Z se inicializa todo a ceros yZ \mathbf{Z}ZS = { Z ∣ tarjeta ⁡ ( Z ) ≤ ℓ } \mathbf{S}=\{\mathbf{Z}|\operatorname{tarjeta}(\mathbf{Z})\leq\ell\}S={ Z tarjeta ( Z )} elementos. Introduciendo la variable dualU \mathbf{U}U y factor de regularización ρ > 0, podemos dividir el problema anterior en dos subproblemas. El primer subproblema es:
argmin ⁡ E , D d ( x , x ^ ) + ρ 2 ∥ Q ∘ E ( x ) − Z k + U k ∥ F 2 , \operatorname{argmin}_{E,D} d( \mathbf{x},\hat{\mathbf{x}})+\frac{\rho}{2}\|Q\circ E(\mathbf{x})-\mathbf{Z}^{k }+ \mathbf{U}^{k}\|_{F}^{2},argminmi , rere ( x ,X^ )+2r∥Q _mi ( x )zk+Ud.kF2,
donde k es el número actual de iteraciones,∥ ⋅ ∥ F 2 \|\cdot\|_F^2F2es la norma de Frobenius, que es la función de pérdida de la red neuronal con regularización L2 y puede resolverse mediante retropropagación y descenso de gradiente. El segundo subproblema es:
argmin ⁡ Z g ( Z ) + ρ 2 ∥ Q k + 1 ∘ E k + 1 ( x ) − Z + U k ∥ F 2 . \operatorname{argmin}_{Z}g(\ mathbf {Z})+\frac{\rho}{2}\|Q^{k+1}\circ E^{k+1}(\mathbf{x})-\mathbf{Z}+\mathbf{ U }^{k}\|_F^2.argminZgramo ( Z )+2r∥Q _k + 1mik + 1 (x)z+Ud.kF2La
solución a este problema fueobtenidaBoyd2011: Z k + 1 = Π S ( Q k + 1 ∘ E k + 1 ( x ) + U k ) , \mathbf{Z}^{ k+ 1}=\Pi_{\mathbf{S}}(Q^{k+1}\circ E^{k+1}(\mathbf{x})+\mathbf{U}^k),zk + 1=PiS( Qk + 1mik + 1 (x)+Ud.k ),
donde ΠS(·) representa la proyección euclidiana sobre el conjunto S. En general, la proyección euclidiana de conjuntos no convexos es difícil, pero Boyd y otros demostraron que la solución óptima es preservar   Q k + 1 ∘ E k + 1 ( x ) + U k \ Q^{k+ 1}\circ mi^{k+1}(\mathbf{x})+\mathbf{U}^k qk + 1mik + 1 (x)+Ud.k ℓ \ell elemento más grande y establezca los elementos restantes en cero. Finalmente, actualizaremos la variable dual U de acuerdo con la siguiente estrategia: U k + 1 = U k + Q k + 1 ∘ E k + 1 ( x ) − Z k + 1. \mathbf{U}^{k+ 1}= \mathbf{U}^k+Q^{k+1}\circ E^{k+1}(\mathbf{x})-\mathbf{Z}^{k+1}.Ud.k + 1=Ud.k+qk + 1mik + 1 (x)zk + 1. Estostres pasos juntos constituyen una iteración del método de poda ADMM.
  Aquí están los pasos completos:
Insertar descripción de la imagen aquí

resultado

  El primer subproblema se resuelve utilizando el optimizador Adam con el tamaño de lote establecido en 32. La tasa de aprendizaje se establece en 4 · 1 0 − 3 10^{-3}1 03 , cada vez que la pérdida no disminuye durante diez períodos, se reduce a la mitad. Cada 20 épocas, se aplican el segundo y tercer paso del método de poda ADMM. La proporción del número de elementos retenidos en el segundo paso se establece en 10%.
  Bpp (tasa de bits) y la proporción de elementos cero en ˆz, y el número total de elementos en ˆz antes y después de la poda.
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Partes del código y modificaciones.

  Falta parámetro después de num_resblocks. Pasamos 16
Insertar descripción de la imagen aquí
  Z y U en el algoritmo ADMM y lo cambiamos a 16, que es el mismo que el tamaño de la matriz cuantificada.
Insertar descripción de la imagen aquí
  También se han realizado los siguientes cambios.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
  Descubrí que si el tamaño del lote es demasiado grande, se producirá un error cuando se exceda la memoria de video. Puede ajustar el tamaño del lote a un tamaño más pequeño, como 2. Sin embargo, después de una ronda de entrenamiento, ocurrirá un error que explotará la memoria de video. Después de la depuración, se descubrió que el error se informó durante la fase de verificación.
  Código original:
Insertar descripción de la imagen aquí
  en la fase de verificación tamaño_batch, batch_size=testset.__len__()todas las imágenes se colocan directamente en esta parte, la tarjeta gráfica del autor original tiene suficiente memoria. Pero mi memoria de video no es suficiente, así que necesito modificarla. También cambie el tamaño del lote a 2.
  Una vez que el tamaño del lote se cambia a 2, surgirá otro problema, es decir, al guardar imágenes.
  El siguiente es el código para la parte de verificación del tren:
Insertar descripción de la imagen aquí
  El siguiente es el código para la parte de utilidades:
Insertar descripción de la imagen aquí
  Podemos ver que la parte de verificación utiliza 24 imágenes del conjunto de datos de Kodak. Sin embargo, esta estructura de red es para comprimir imágenes con una resolución de 128 × 128, y el tamaño de imagen del conjunto de datos de Kodak es 768 × 512, por lo que debemos recortarlo, recortando verticalmente 6 bloques y horizontalmente 4 bloques. Una imagen de 768×512 se recorta en 24 imágenes de tamaño 128×128.
  Guarde esta parte de la imagen a continuación. El número no puede ser mayor que el tamaño del lote. Aquí elijo guardar solo la primera imagen.
Insertar descripción de la imagen aquí

Gráfico de resultados

La siguiente es la imagen del resultado:
  La siguiente es la imagen del efecto después de usar 2286 imágenes para entrenar durante 200 rondas.
Insertar descripción de la imagen aquí
Enlace del modelo después del entrenamiento: https://pan.baidu.com/s/16WDL_JJjxVM4W9pc5I_Bbw?pwd=a2u9
Código de extracción: a2u9

Supongo que te gusta

Origin blog.csdn.net/officewords/article/details/130403114
Recomendado
Clasificación