es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Keras: Pérdida para rotación e traslación de imágenes (registro de errores objetivo)

Mi modelo devuelve 3 coordenadas [x, y, ángulo]. Quiero calcular la similitud TRE entre 2 imágenes. Mi pérdida personalizada es:

def loss(y_true, y_pred):
    s = tfa.image.rotate(images=y_true[0], angles=y_pred[0][0])
    s = tfa.image.translate(images=s, translations=y_pred[0][1:])
    s = tf.reduce_sum(tf.sqrt(tf.square(s - y_true[1])))

y_pred=(1, 3)->tensor con [ángulo, x, y]

`y_true=(2, 128, 128)-> en y_true[0] e y_true[1]: imagen.

Procedimiento:
– s = Rotar y trasladar y_true[0],
– Comparar s e y_true[1], con MSE`

No puedo usar tfa.image.translate porque no es diferenciable. ¿Cómo puedo rotar una imagen en una función de pérdida personalizada? ¿Hay algún problema con el gradiente?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para rotar una imagen en una función de pérdida personalizada, puedes usar la función integrada de TensorFlow tf.contrib.image.rotate(). Esta función es diferenciable y se puede utilizar en la retropropagación para calcular gradientes. Así es como puedes modificar el código dado para rotar una imagen usando tf.contrib.image.rotate():

    import tensorflow.contrib.image as tfi
    
    def loss(y_true, y_pred):
    
          rotated = tfi.rotate(y_true[0], angles=y_pred[0][0])
          translated = tfi.translate(rotated, translations=y_pred[0][1:3])
          mse_loss = tf.reduce_mean(tf.squared_difference(translated, y_true[1]))
    
          return mse_loss
    

    En el fragmento de código anterior, hemos reemplazado la función tfa.image.rotate() por tf.contrib.image.rotate() y tfa.image.translate() por tfi.translate(). La función tf.contrib.image.rotate() rotará la imagen y_true[0] según un ángulo especificado en y_pred[0][0]. La imagen rotada luego se traducirá por los valores especificados en y_pred[0][1] y y_pred[0][2] utilizando la función tfi.translate(). Finalmente, calcularemos la pérdida del error cuadrático medio (MSE) entre la imagen traducida y y_true[1].

    Ten en cuenta que la función tf.contrib.image.rotate() devuelve una imagen del mismo tamaño que la imagen de entrada. Si deseas recortar la imagen después de la rotación, puedes usar la función tf.image.crop_to_bounding_box().

    En general, el uso de tf.contrib.image.rotate() y tfi.translate() debería solucionar el problema de realizar rotación y traducción en la función de pérdida personalizada, al tiempo que garantiza que sea diferenciable.

Comments are closed.