在TensorFlow中可以计算矩形之间的重叠吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (360)

正在开发一个神经网络,它输出N个矩形的两个斜面角的(x,y)坐标。

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

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

注意,我想检查矩形1和矩形2到N之间的重叠,以及矩形2和矩形3到N之间的重叠等等。

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

提问于
用户回答回答于

可以通过使用最低和最大运营商支持广播的事实来实现这一点。

重塑此输出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)

在那里,可以计算成本,但不要忘记处理对角线元素(对应于矩形的面积)。例如,简单地把面积之和,

cost = tf.reduce_sum(areas) - tf.reduce_sum(tf.trace(areas))

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

这个成本当然是由TensorFlow自动区分的。

用户回答回答于

可以使用经过修改的交集超过联合(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

扫码关注云+社区

领取腾讯云代金券