首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以在Tensorflow中计算矩形之间的重叠?

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

Stack Overflow用户
提问于 2018-06-04 00:11:21
回答 2查看 433关注 0票数 0

我是TensorFlow新手。

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

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

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

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

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

提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2018-06-04 01:45:40

您可以使用修改版本的并集交点(IoU)条件。它主要用于图像检测,以检测图像中对象的位置,并允许丢弃网络最不确定的盒子。

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

要在TF中实现此功能,您可以执行以下操作:

代码语言:javascript
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2018-06-04 02:29:12

您可以通过使用最小和最大运算符支持广播这一事实来实现。

调整此输出coords的形状,使其具有(B, N, 2, 2),其中B是批处理大小,N是矩形的数量。重叠的面积可以计算为

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
cost = tf.reduce_sum(areas) - tf.reduce_sum(tf.trace(areas))

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档