tf.image.non_max_suppression()会扩充数据

    tf.image.non_max_suppression(
        boxes,
        scores,
        max_output_size,
        iou_threshold=0.5,
        score_threshold=float('-inf'),
        name=None
    )

tf.image.non_max_suppression()

很多文章都有提到:按照参数scores的降序贪婪的选择边界框的子集。删除掉那些与之前的选择的边框具有很高的IOU的边框。

因此大部分实例中,保留的边框数目要小于进行nms的总边框数目,并没有提到保留的边框数目要大于进行nms的总边框数目的情况。

例1:一共有四个边框被放进去进行nms,只保留2个边框的情况 即保留边框小于总边框的情况

def test3():
    boxs = np.array([[1,2,3,4],[2,4,2,1],
                     [1,1,3,4],[1,4,4,1]],dtype=np.float)
    socres = np.array([0.5,0.6,0.7,0.8],dtype=np.float)
    #一共有四个边框被放进去进行nms,只保留2个边框的情况 即保留边框小于总边框的情况
    nms = tf.image.non_max_suppression(boxs,socres,iou_threshold=0.5,max_output_size=2)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        nms_run = sess.run(nms)
        print(nms_run)

if __name__ == '__main__':
    test3()

输出[3,1]

例2:一共有四个边框被放进去进行nms,保留10个边框的情况 即保留边框大于总边框的情况

def test3():
    boxs = np.array([[1,2,3,4],[2,4,2,1],
                     [1,1,3,4],[1,4,4,1]],dtype=np.float)
    socres = np.array([0.5,0.6,0.7,0.8],dtype=np.float)
    #一共有四个边框被放进去进行nms,保留10个边框的情况 即保留边框大于总边框的情况
    nms = tf.image.non_max_suppression(boxs,socres,iou_threshold=0.5,max_output_size=10)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        nms_run = sess.run(nms)
        print(nms_run)

if __name__ == '__main__':
    test3()

输出[3 1 1 1 1 1 1 1 1 1]

由此可见 tf.image.non_max_suppression()会填充输出结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值