Es una práctica común en las redes neuronales convolucionales sobremuestrear una imagen dada durante la inferencia,

Es decir, para crear un lote a partir de diferentes transformaciones de la misma imagen (lo más común: diferentes cultivos y duplicación), transferir el lote completo a través de la red y promediar (u otro tipo de función de reducción) los resultados para obtener una sola predicción (ejemplo de caffe),

¿Cómo se puede implementar este enfoque en tensorflow?

0
mtngld 14 dic. 2016 a las 16:12

2 respuestas

La mejor respuesta

Puede echar un vistazo al tutorial TF cnn. En particular, la función entradas_distorsionadas realiza el paso de preprocesamiento de la imagen. En resumen, hay un par de funciones TF en el paquete tf.image que ayudan a distorsionar las imágenes. Puede usarlos o las funciones numpy regulares para crear una dimensión adicional para la salida, para la cual puede promediar los resultados:

Antes:

input_place = tf.placeholder(tf.float32, [None, 256, 256, 3])
prediction = some_model(input_place)  # size: [None]
sess.run(prediction, feed_dict={input_place: batch_of_images})

Después:

input_place = tf.placeholder(tf.float32, [None, NUM_OF_DISTORTIONS, 256, 256, 3])
prediction = some_model(input_place)  # make sure it is of size [None, NUM_DISTORTIONS]
new_prediction = tf.reduce_mean(prediction, axis=1)
new_batch = np.zeros(batch_size, NUM_OF_DISTORTIONS, 256, 256, 3)
for i in xrange(len(batch_of_images)):
  for f in xrange(len(distortion_functions)):
    new_batch[i, f, :, :, :] = distortion_functions[f](batch_of_images[i])

sess.run(new_prediction, feed_dict={input_place: new_batch})
0
sygi 14 dic. 2016 a las 15:08

Eche un vistazo a las funciones relacionadas con imágenes de TF. Puede aplicar esas transformaciones en el momento de la prueba a alguna imagen de entrada y apilarlas todas juntas para hacer un lote.

Me imagino que también podrías hacer esto usando OpenCV o alguna otra herramienta de procesamiento de imágenes. No veo la necesidad de hacerlo en el gráfico de cálculo. Puede crear los lotes de antemano y pasarlos en feed_dict.

0
chris 14 dic. 2016 a las 14:57