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

时间:2018-06-03 16:11:21

标签: python tensorflow machine-learning neural-network overlap

TensorFlow新手在这里。

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

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

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

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

这是可能的还是我最好只是后处理数据并分离重叠的矩形?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用Intersection over Union(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提供。

答案 1 :(得分:0)

您可以使用最小和最大运营商支持广播这一事实来实现。

重塑此输出$elem.ChildNodes.NodeType -notcontains 'Element' 以使其具有形状$elem.ChildNodes.NodeType -notcontains 'Element' -and $elem.InnerText -ne '' ,其中-ne ''是批量大小,coords是矩形数。重叠的区域可以计算为

(B, N, 2, 2)

从那里你可以计算成本,而不是忘记处理对角线元素(对应于矩形的区域)。例如,简单地对区域求和,

B

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

这个成本当然可以通过tensorflow自动区分。