How to display custom images in TensorBoard using Keras?

前端 未结 8 1398
暗喜
暗喜 2020-12-02 12:16

I\'m working on a segmentation problem in Keras and I want to display segmentation results at the end of every training epoch.

I want something similar to Tensorflow

8条回答
  •  猫巷女王i
    2020-12-02 13:14

    Here is example how to draw landmarks on image:

    class CustomCallback(keras.callbacks.Callback):
        def __init__(self, model, generator):
            self.generator = generator
            self.model = model
    
        def tf_summary_image(self, tensor):
            import io
            from PIL import Image
    
            tensor = tensor.astype(np.uint8)
    
            height, width, channel = tensor.shape
            image = Image.fromarray(tensor)
            output = io.BytesIO()
            image.save(output, format='PNG')
            image_string = output.getvalue()
            output.close()
            return tf.Summary.Image(height=height,
                                 width=width,
                                 colorspace=channel,
                                 encoded_image_string=image_string)
    
        def on_epoch_end(self, epoch, logs={}):
            frames_arr, landmarks = next(self.generator)
    
            # Take just 1st sample from batch
            frames_arr = frames_arr[0:1,...]
    
            y_pred = self.model.predict(frames_arr)
    
            # Get last frame for which we have done predictions
            img = frames_arr[0,-1,:,:]
    
            img = img * 255
            img = img[:, :, ::-1]
            img = np.copy(img)
    
            landmarks_gt = landmarks[-1].reshape(-1,2)
            landmarks_pred = y_pred.reshape(-1,2)
    
            img = draw_landmarks(img, landmarks_gt, (0,255,0))
            img = draw_landmarks(img, landmarks_pred, (0,0,255))
    
            image = self.tf_summary_image(img)
            summary = tf.Summary(value=[tf.Summary.Value(image=image)])
            writer = tf.summary.FileWriter('./logs')
            writer.add_summary(summary, epoch)
            writer.close()
            return
    

提交回复
热议问题