¿Por qué normalizar las imágenes restando la media de la imagen del conjunto de datos, en lugar de la media de la imagen actual en el aprendizaje profundo?

88

Existen algunas variaciones sobre cómo normalizar las imágenes, pero la mayoría parece utilizar estos dos métodos:

  1. Reste la media por canal calculada sobre todas las imágenes (por ejemplo, VGG_ILSVRC_16_layers )
  2. Reste por píxel / canal calculado sobre todas las imágenes (por ejemplo , CNN_S , también vea la red de referencia de Caffe )

El enfoque natural sería en mi mente normalizar cada imagen. Una imagen tomada a plena luz del día hará que se disparen más neuronas que una imagen nocturna y, si bien puede informarnos del momento en que generalmente nos preocupamos por las características más interesantes presentes en los bordes, etc.

Pierre Sermanet se refiere en 3.3.3 a la normalización del contraste local que estaría basada en imágenes, pero no he encontrado esto en ninguno de los ejemplos / tutoriales que he visto. También he visto una pregunta interesante de Quora y la publicación de Xiu-Shen Wei, pero no parecen apoyar los dos enfoques anteriores.

¿Qué es exactamente lo que me estoy perdiendo? ¿Es este un problema de normalización del color o hay un documento que realmente explique por qué tantos usan este enfoque?

Max Gordon
fuente
No sé la respuesta, pero ¿has probado cada uno de los métodos? ¿Hay alguna diferencia en las actuaciones?
user112758
@ user112758: implementarlos es un poco doloroso (especialmente para el by-pixel) y mi experiencia es que la normalización por imagen funciona bien pero mis datos no son tan representativos. Intentaré experimentar con la normalización, pero tengo curiosidad por escuchar la motivación detrás de estos extraños procedimientos de normalización (en mi opinión).
Max Gordon
Ok, tal vez puedas preguntar esto en los problemas de GitHub de caffe Google group caffe. Supongo que habría más expertos en este tema.
user112758

Respuestas:

58

Restar la media del conjunto de datos sirve para "centrar" los datos. Además, idealmente le gustaría dividir por el sttdev de esa característica o píxel también si desea normalizar cada valor de la característica a un puntaje z.

La razón por la que hacemos ambas cosas es porque en el proceso de capacitación de nuestra red, vamos a multiplicar (pesos) y agregar (sesgar) estas entradas iniciales para provocar activaciones que luego propagamos con los gradientes para entrenar a la modelo.

En este proceso, nos gustaría que cada característica tenga un rango similar para que nuestros gradientes no se salgan de control (y que solo necesitemos un multiplicador de tasa de aprendizaje global).

Otra forma en que puede pensar es que las redes de aprendizaje profundo tradicionalmente comparten muchos parámetros, si no escalara sus entradas de una manera que resultara en valores de características de rango similar (es decir: en todo el conjunto de datos restando la media) no compartiría sucede muy fácilmente porque para una parte del peso de la imagen wes demasiado y para otra es demasiado pequeño.

Verá en algunos modelos de CNN que se utiliza el blanqueamiento por imagen, lo que está más en la línea de su pensamiento.

montaña rusa
fuente
44
Gracias por la respuesta. Estoy familiarizado con el concepto de centrar los datos y asegurarme de que el rango sea similar para obtener gradientes estables. La pregunta es más sobre por qué necesitamos hacer esto en todo el conjunto de datos y por qué esto ayudaría en contraste con el blanqueamiento por imagen. Me gustaría una referencia simple que muestre de alguna manera que esto mejora el aprendizaje antes de aceptar la respuesta. Sé que la normalización por lotes es una técnica increíblemente poderosa, pero no veo la conexión con la normalización completa del conjunto de datos.
Max Gordon
Si acepta que la normalización de lotes es buena, entonces ya está allí. La única razón por la que se normaliza por lotes es cuando no puede ajustar el conjunto de datos completo en la memoria o si está distribuyendo la capacitación (a menudo el mismo problema). Por eso tenemos lotes.
lollercoaster
Pensé que los lotes también son la base para el descenso de gradiente estocástico. Incluso si pudiera guardar todo en la memoria, quiero actualizar los parámetros con más frecuencia que después de cada época.
Max Gordon
3
Son. Y puede actualizar con la frecuencia que desee: las implicaciones analíticas son idénticas, que es lo que es tan agradable y escalable sobre el descenso de gradiente. La razón por la que usamos el descenso de gradiente estocástico (orden de entrada aleatorio + procesamiento por lotes) es para suavizar nuestra subida de la colina a través del espacio de gradiente. Dado un solo punto, no podemos estar seguros de que nuestra actualización nos empuje en la dirección de los máximos locales, sin embargo, si selecciona suficientes puntos, esta probabilidad se vuelve más alta (en expectativa).
lollercoaster
2
¿Cómo ayuda esto a obtener características en un rango similar? Si tengo dos imágenes, una que va de 0 a 255 y otra que va de 0 a 50 en valores de píxeles, digamos con una media de 50 y stdev de 15. La normalización me da la imagen 1 que va de -3.3 a 13.6 y la imagen 2 que va de -3.3 a 0. Todavía no están en la misma escala.
Daniel
9

Antes de la normalización por lotes, se usó la resta media por canal para centrar los datos alrededor de la media cero para cada canal (R, G, B). Esto generalmente ayuda a la red a aprender más rápido ya que los gradientes actúan de manera uniforme para cada canal. Sospecho que si usa la normalización por lotes, el paso de preprocesamiento de sustracción media por canal no es realmente necesario ya que de todos modos está normalizando por mini lote.

Sid M
fuente
1
"Sospecho que si usa la normalización de lotes, el paso de preprocesamiento de sustracción media por canal no es realmente necesario ya que de todos modos está normalizando por mini lote". Pero la norma del lote se refiere a normalizar los pesos en las capas de su red ... no las imágenes de entrada reales. Estas son 2 cosas diferentes.
Monica Heddneck
4

La normalización por imagen es común e incluso es la única función incorporada actualmente en Tensorflow (principalmente debido a que es muy fácil de implementar). Se usa por la razón exacta que mencionó (día VS noche para la misma imagen). Sin embargo, si imagina un escenario más ideal donde se controla la iluminación, entonces las diferencias relativas entre cada imagen serían de gran valor en el algoritmo, y no querríamos borrar eso con la normalización por imagen (y nos gustaría hacer la normalización en el contexto de todo el conjunto de datos de entrenamiento).

JPJ
fuente
4

Esto se llama preprocesamiento de datos antes de usarlo. Puede procesar de muchas maneras, pero hay una condición de que debe procesar cada dato con la misma función X_preproc = f (X) y este f (.) No debe depender de los datos en sí, por lo que si usa la imagen actual significa procesar esto imagen actual, entonces su f (X) en realidad será realmente f (X, imagen) y no quiere eso.

La normalización del contraste de la imagen de la que hablaba tiene un propósito diferente. La normalización del contraste de la imagen ayudará en la función.

Pero f (.) Anterior ayudará en la optimización al mantener todas las características numéricamente iguales entre sí (por supuesto, aproximadamente)

Hacklavya
fuente