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?
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():
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.