实现自定义图层以生成2d指数图像

时间:2019-07-17 01:59:20

标签: python tensorflow keras neural-network deep-learning

我需要实现一个自定义层(在Tensorflow或Keras中),该层将生成具有可学习参数(方差)的2d高斯热图。我希望该层将每个样本的中心作为地面真实地标坐标,作为它们的输入和输出2d高斯图像。 但是,我不确定如何实现它,因为我必须遍历样本数量,而在样本数量为“无”的情况下,在使用“调用”方法进行编译时是不可能的。 更具体地说,如果只有一个样本,这就是我生成热图的方式:

def call(self,landmark):

    x, y = tf.meshgrid(tf.linspace(-100.0,100.0,128), tf.linspace(-100.0,100.0,128))
    d = tf.sqrt((x-landmark[0])**2+(y-landmark[1])**2)

    g=tf.exp(-tf.square(d)/(2*self.sigma**2))/(2*np.pi*self.sigma)
    return g

但是,假设界标最初是形状为(None,2)的输入张量,那么我该如何实现一个为每个样本输出对应结果的层?

1 个答案:

答案 0 :(得分:0)

我想出了一个答案,我不确定它的效果如何: 您可以列出二维恒定网格图像和地标的列表,然后同时将它们作为输入传递,那么调用函数将是:

def call(self, x):
    image, landmark = x
    sub = image - landmark

    sigma = self.kernel

    d = KB.sqrt((sub[:, :, :, 0]) ** 2 + (sub[:, :, :, 1]) ** 2)

    g = tf.exp(-tf.square(d) / (2 * sigma ** 2)) / (2 * np.pi * sigma)

    return g