这个问题是根据这个问题构建的:(tensorflow remember the index after calculating getting the maximum box)。我发现丢弃的盒子全部为零特别难,所以我发布了一个新的。
完整说明:
假设我有两个盒子阵列,每个盒子的形状分别为(?, b1, 4)
和(?, b2, 4)
(将?
视为未知的批量大小):
box1: [[[1,2,3,4], [2,3,4,5], [3,4,5,6], [0,0,0,0], [0,0,0,0]...]...]
box2: [[[4,3,2,1], [3,2,5,4], [4,3,5,6]...]...]
(以上数字是任意设定的)
请注意,box1
可能会或可能不会最后有假方框([0,0,0,0]
)。
我想:
在每个批次中,对于box1
中的每个非假冒框 A (即不包含全零的框),在box2
框中找到 B ,其中包含 A 的最大IOU(与工会交叉)(当然在同一批次中),然后附加元组(A,B)到列表 list_max 。
附加到 list_nonmax box2
中box1
中没有最大IOU的所有方框iou_single_box(box1, box2)
中的任何方框(当然是按批次分隔)
您可以认为:
b1 和 b2 都是python变量,而不是张量流量张量。
计算单个框之间或一批框之间的IOU的方法已经存在,可以直接使用:
(4,)
: box1 和 box2 的形状为iou_multiple_boxes(bbox1, bbox2)
。
(b1, 4)
: bbox1 和 bbox2 的形状分别为(b2, 4)
和iou_batch_boxes(bbbox1, bbbox2)
。
(?, b1, 4)
: bbbox1 和 bbbox2 的形状分别为(?, b2, 4)
和?
(将box1
视为未知的批量大小。)
您可以查看我之前发布的问题(tensorflow remember the index after calculating getting the maximum box)。我只添加一个约束:
box2
中的任何假框与b1
中的任何框匹配。获取 list_max 和 list_nonmax 请注意,未设置假方箱的数量。
****:我知道这个问题很复杂。我这样做是因为Tensorflow无法处理动态长度数组(在运行时必须为box1
确定[0, 0, 0, 0]
。因此,我在box1
的末尾填充"Name | Address | Phone | Twitterlink | Facebooklink"
以使长度固定。
答案 0 :(得分:1)
我相信这很容易使用tf.boolean_mask()
这样的代码(已测试):
System.Data.SqlClient.SqlException (0x80131904): Cannot open server "organisation.com" requested by the login. The login failed
将输出
输入框:
[[[0. 1. 2. 3.]
[4. 5. 6. 7.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]][[8. 9. 10. 11.]
[12。 13. 14. 15.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]]
========================================
[[[2. 3. 4. 5.]
[6. 7. 8. 9.]
[10。 11. 12. 13.]][[14。 15. 16. 17.]
[18。 19. 20. 21.]
[22。 23. 24. 25.]]]
========================================
列表最大值:
[[[0. 1. 2. 3.]
[2. 3. 4. 5.]][[4. 5. 6. 7.]
[10。 11. 12. 13.]][[8. 9. 10. 11.]
[22。 23. 24. 25.]][[12。 13. 14. 15.]
[18。 19. 20. 21.]]]
========================================
列出nonmax:
[[6. 7. 8. 9.]
[14。 15. 16. 17.]]
========================================