¿Cómo entrenar imágenes, cuando tienen diferente tamaño?


Estoy tratando de entrenar a mi modelo que clasifica las imágenes. El problema que tengo es que tienen diferentes tamaños. ¿Hay alguna posibilidad de entrenar esas imágenes sin redimensionarlas?

Author: Asif Mohammed, 2017-01-28

2 answers

No dijiste de qué arquitectura estás hablando. Ya que dijiste que querías clasificar imágenes, asumo que es una red en parte convolucional, en parte totalmente conectada como AlexNet, GoogLeNet, etc. En general, la respuesta a su pregunta depende del tipo de red con el que esté trabajando.

Si, por ejemplo, su red solo contiene unidades convolucionales, es decir, no contiene capas completamente conectadas, puede ser invariante al tamaño de la imagen de entrada. Tal network podría procesar las imágenes de entrada y a su vez devolver otra imagen ("convolucional hasta el final"); tendría que asegurarse de que la salida coincida con lo que espera, ya que tiene que determinar la pérdida de alguna manera, por supuesto.

Sin embargo, si está utilizando unidades completamente conectadas, está en problemas: Aquí tiene un número fijo de pesos aprendidos con los que su red tiene que trabajar, por lo que las entradas variables requerirían un número variable de pesos, y eso no es posible.

Si ese es tu problema, aquí hay algunas cosas que puedes hacer:

  • No me importa aplastar las imágenes. Una red podría aprender a darle sentido al contenido de todos modos; ¿la escala y la perspectiva significan algo para el contenido de todos modos?
  • Center-recorte las imágenes a un tamaño específico. Si teme perder datos, haga varios cultivos y use estos para aumentar sus datos de entrada, de modo que la imagen original se dividirá en N diferentes imágenes de correct Tamaño.
  • Rellene las imágenes con un color sólido a un tamaño cuadrado, luego cambie el tamaño.
  • Haz una combinación de eso.

La opción de relleno podría introducir una fuente de error adicional a la predicción de la red, ya que la red podría (léase: probablemente lo hará) estar sesgada a imágenes que contengan tal borde acolchado. Si necesita algunas ideas, eche un vistazo a la sección Images de la documentación de TensorFlow, hay piezas como resize_image_with_crop_or_pad que quitan lo más grande trabajo.

En cuanto a simplemente no me importa aplastar, aquí está una parte de la tubería de preprocesamiento de la famosa red Inception:

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

Son totalmente conscientes de ello y lo hacen de todos modos.

Dependiendo de lo lejos que quieras o necesites ir, en realidad hay un documento aquí llamado Spatial Pyramid Pooling en Redes de Convolución Profunda para Reconocimiento Visual que maneja entradas de tamaños arbitrarios procesándolas de una manera muy especial.

 76
Author: sunside,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-29 13:02:57

Intente hacer una capa de agrupación de pirámides espaciales. Luego póngalo después de su última capa de convolución para que las capas FC siempre obtengan vectores dimensionales constantes como entrada . Durante el entrenamiento , entrene las imágenes de todo el conjunto de datos utilizando un tamaño de imagen particular para una época . Luego , para la próxima época, cambie a un tamaño de imagen diferente y continúe con el entrenamiento .

 3
Author: Pranay Mukherjee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-04 14:27:48