在Tensorflow中计算矩形之间的重叠是否可能?

2024-10-03 13:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是TensorFlow新手。在

我正在开发一个神经网络,它可以输出N个矩形的两个倒圆角的(x,y)坐标。在

我正在考虑实现一个成本函数,它考虑到预测矩形之间的重叠,因为它们根本就不是要重叠的,但是一个简单的带有MSE的成本函数会导致一些重叠。在

我想知道这是否可能,因为它可能是复杂的,如果张量流可以计算这些计算的梯度,以最小化成本函数。在

注意,我要检查矩形1和矩形2到N之间的重叠,以及矩形2和矩形3到N之间的重叠,依此类推。在

这是可能的,还是我最好对数据进行后处理并分离重叠的矩形?在

提前谢谢你。在


Tags: 数据函数tensorflow神经网络后处理成本梯度矩形
2条回答

您可以使用经过修改的“相交于并集”(IoU)标准。它主要用于图像检测,以检测物体在图像中的位置,并允许丢弃网络最不确定的盒子。在

在您的例子中,您希望最大化并集(当两个矩形不重叠时达到最大值)并最小化交集(理论上,您希望它为0)。因此,IoU必须最小化,在最好的情况下它等于0。在

要在TF中实现这一点,可以执行以下操作:

cost = 0
for first in range(num_rectangles):
    for second in range(first, num_rectangles)
        cost = cost + compute_IoU(rect[first], rect[second])

cost = cost / num_rectangles

IoU有几个实现。一个由TF itself提供的si。在

您可以使用这样一个事实,即最小和最大运算符支持广播。在

重塑输出coords的形状(B, N, 2, 2),其中B是批大小,N是矩形的数量。重叠面积可计算为

c1 = coords[:, None]
c2 = coords[:, :, None]
areas = tf.reduce_prod(tf.maximum(
  tf.minimum(c1[..., 1], c2[..., 1]) - tf.maximum(c1[..., 0], c2[..., 0]), 0.), axis=-1)

从那里你可以计算出一个成本,不要忘了考虑对角线元素(对应于矩形的面积)。例如简单地求面积

^{pr2}$

是的,你做了一些额外的计算对角线元素,重叠也计算了两次,但我相信这应该是微不足道的,与你的网络的其余部分相比,可能更快的东西基于一个循环。在

这个成本当然可以通过张量流自动微分。在

相关问题 更多 >