TensorFlow新手在这里。
我正在开发一个神经网络,输出N个矩形的两个对角的(x,y)坐标。
我正在考虑实现一个考虑到预测矩形之间重叠的成本函数,因为它们根本不是重叠的,但是MSE的简单成本函数会导致一些重叠。
我想知道是否可能,因为如果Tensorflow可以计算这些计算的梯度以最小化成本函数,那么它可能很复杂。
请注意,我想检查矩形1和矩形2到N之间的重叠,以及矩形2和矩形3到N之间的重叠,依此类推。
这是可能的还是我最好只是后处理数据并分离重叠的矩形?
提前谢谢。
答案 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自动区分。