¿Cuál es la arquitectura de un autoencoder convolucional apilado?

23

Así que estoy tratando de hacer un entrenamiento previo en imágenes de humanos usando redes convolucionales. Leí los documentos ( Paper1 y Paper2 ) y este enlace de stackoverflow , pero no estoy seguro de entender la estructura de las redes (no está bien definido en los documentos).

Preguntas:

  • Puedo tener mi entrada seguida de una capa de ruido seguida de una capa conv, seguida de una capa de agrupación, después de eso, ¿desagrupo antes de dar mi salida (que es la misma que mi imagen de entrada)?

    Digamos que tengo varias (135,240) imágenes. Si uso 32, (12,21) núcleos, seguido de (2,2) agrupación, terminaré con 32 (62, 110) mapas de características. ¿Ahora desagrupo para obtener 32 (124, 220) mapas de características y luego los aplanaré? antes de dar mi (135,240) capa de salida?

  • Si tengo varias capas de conv-pool, ¿debo entrenarlas una por una, como en los autoencoders de ruido sin apilar? O bien, ¿puedo tener algo como input-conv-pool-conv-pool-conv-pool-output (la salida es la misma que la entrada)? En ese caso, ¿cómo se gestiona la agrupación y la descompresión? ¿Debería desagrupar solo en la última capa de agrupación antes de la salida? Y de nuevo, ¿cuál debería ser el factor de cambio de tamaño de ese desagrupamiento? ¿Es la intención de devolver los mapas de características a la forma de la entrada?

  • ¿Debo introducir capas de ruido después de cada capa conv-pool-depool?

  • Y luego, cuando realice un ajuste fino, ¿se supone que debo eliminar las capas de desagrupación y dejar el resto igual? ¿O debería eliminar tanto las capas de ruido como las capas de desagrupación?

  • ¿Alguien puede señalarme una url / papel que ha detallado la arquitectura de un codificador automático convolucional tan apilado para hacer un entrenamiento previo en las imágenes?

Run2
fuente

Respuestas:

12

Actualmente estoy explorando autoencoders convolucionales apilados.

Intentaré responder algunas de sus preguntas a mi leal saber y entender. Eso sí, podría estar equivocado, así que tómalo con un grano de sal.

  1. Sí, debe "invertir" el grupo y luego convolucionarse con un conjunto de filtros para recuperar su imagen de salida. Una red neuronal estándar (considerando los datos MNIST como entrada, es decir, dimensiones de entrada 28x28) sería:

        28x28(input) -- convolve with 5 filters, each filter 5x5 -->  5 @ 28 x 28 maps -- maxPooling --> 5 @ 14 x 14 (Hidden layer) -- reverse-maxPool --> 5 @ 28 x 28 -- convolve with 5 filters, each filter 5x5 --> 28x28 (output)
    
  2. Tengo entendido que, convencionalmente, eso es lo que se debe hacer, es decir, entrenar cada capa por separado. Después de eso, apila las capas y entrena a toda la red una vez más usando los pesos previamente entrenados. Sin embargo, Yohsua Bengio tiene algunas investigaciones (la referencia escapa a mi memoria) que muestran que uno podría construir una red totalmente apilada y entrenar desde cero.

  3. Tengo entendido que la "capa de ruido" está ahí para introducir robustez / variabilidad en la entrada para que el entrenamiento no se ajuste demasiado.

  4. Mientras usted todavía esté "entrenando" antes del entrenamiento o el ajuste, creo que la parte de reconstrucción (es decir, agrupación inversa, desconvolución, etc.) es necesaria. De lo contrario, ¿cómo se debe realizar la propagación de retroceso de error para ajustar los pesos?

  5. He intentado navegar a través de numerosos documentos, pero la arquitectura nunca se explica por completo. Si encuentra alguno por favor hágamelo saber.

usuario2979010
fuente
Si ha terminado el entrenamiento previo, ya no necesita la parte del decodificador, y el ajuste fino seguirá ajustando el codificador, esta vez para una mejor clasificación.
jwalker
2
¿Cómo es posible "reverse-maxPool"? ¿Nunca puedes reconstruir un conjunto de números dado solo el máximo ...?
Fequish
1
@Fequish, es un reverso máximo aproximado, por ejemplo: si pool = 2x2, conservo la posición del máximo e inserto el máximo en esa posición particular en 2x2, el resto es 0
usuario2979010
1
@jwalker, mi objetivo final no era la clasificación, por lo tanto, ajustar con una red desenrollada
usuario 2979010
@Fequish, con el propósito de decodificar el reverso, es solo el vecino más exclusivo.
jwalker
2

También he estado buscando un modelo completamente explicado de codificadores automáticos convolucionales apilados.

Encontré tres arquitecturas diferentes. Todavía los estoy estudiando y pensé que podrían ayudar a otros que también están comenzando a explorar los CAE. Cualquier otra referencia a documentos o implementaciones sería de gran ayuda.

  1. La mencionada por usted usando la agrupación - desagrupación.
  2. Las capas de (convolver) __ x_times -> (deconvolve) __ x_times,

    y obtener el mismo tamaño que la entrada.

  3. (convolucionar -> grupo) __ x_times -> (deconvolución estriada) __ y_times
    • el relleno y los pasos se seleccionan de modo que el tamaño final de la imagen sea el mismo que la imagen original.
    • Referencia
Ankitp
fuente
2
Bienvenido al sitio. ¿Fue esto una respuesta a la pregunta del OP, un comentario solicitando una aclaración del OP o uno de los que respondieron, o una nueva pregunta propia? Utilice solo el campo "Su respuesta" para proporcionar respuestas a la pregunta original. Podrás comentar en cualquier lugar cuando tu reputación sea> 50. Si tiene una nueva pregunta, haga clic en el gris ASK QUESTION en la parte superior de la página y pregunte allí, entonces podemos ayudarlo adecuadamente. Como eres nuevo aquí, es posible que quieras hacer nuestro recorrido , que tiene información para nuevos usuarios.
gung - Restablece a Monica
1
Fue pensado como una respuesta a la pregunta del OP, aunque puede no calificar para ser una respuesta completa. Estaba respondiendo a la última parte 'He intentado navegar a través de numerosos documentos, pero la arquitectura nunca se explica por completo. Si encuentra alguno, hágamelo saber.
Ankitp
Vale gracias. La forma en que sale es ambigua. Por ejemplo, "También he estado buscando ..." y "Cualquier referencia adicional a documentos o implementaciones sería de gran ayuda". Tenga en cuenta que CV es un sitio puro de preguntas y respuestas, no un foro de discusión. ¿Por qué no hacer nuestro recorrido y aprender más sobre el sitio?
gung - Restablece a Monica
-1

No creo que el método de entrenamiento basado en capas sea correcto. Por ejemplo, la arquitectura del codificador automático convolucional es:

input-> conv-> max_poo-> de_max_pool-> de_conv-> output.

Este es un codificador automático, y debe ser entrenado con toda la arquitectura. Además, no existe un criterio estricto sobre si un codificador automático convolucional necesita pool y un_pool. generalmente, un grupo pero sin un_pool. Aquí hay una comparación experimental con la ausencia de pool y un_pool.

https://arxiv.org/pdf/1701.04949.pdf

Kevin Sun
fuente