我需要实现一个自定义层(在 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) 的输入张量,我如何实现一个为每个样本输出相应结果的层?
最佳答案
我想出了一个答案,我不确定它的效果如何: 您可以制作一个二维常量网格图像和地标的列表,并同时将它们作为输入传递,那么调用函数将是:
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
关于python - 实现自定义层来生成二维指数图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067542/