tf.image.non_max_suppression 例子


tf.image.non_max_suppression
 
 
import tensorflow as tf
import numpy as np
from keras import backend as K

rects=np.asarray([[1,2,3,4],[1,3,3,4],[1,3,4,4],[1,1,4,4],[1,1,3,4]],dtype=np.float32)

scores=np.asarray([0.4,0.5,0.72,0.9,0.45],dtype=np.float32)

import datetime
with tf.Session() as sess:

    for i in range(50):
        old=datetime.datetime.now()
        nms = tf.image.non_max_suppression(rects,scores, max_output_size=5,iou_threshold=0.5)
        print("cost time",(datetime.datetime.now()-old).microseconds)
        # print('face detectd', len(nms.eval()))
        for index, value in enumerate(nms.eval()):
            rect = rects[value]
            print(rect)
        # face = img[rect[1]:rect[1] + rect[3], rect[0]:rect[0] + rect[2], :]
        # face = imresize(face, shape_raw[0:2])
        # if preview: cv2.rectangle(img, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (0, 255, 0), 2)


实现极大值抑制non max suppression,其中boxes是不同boxes的坐标,scores是不同boxes预测的分数,max_boxes是保留的最大box的个数。

iou_threshold是一个阈值,去掉大于这个阈值的所有boxes。

下面是和python对比的效果:

 
 
#!/usr/bin/env python
# _*_ coding: utf-8 _*_

import numpy as np
import tensorflow as tf
def nms(bounding_boxes, score, threshold):
    # If no bounding boxes, return empty list
    if len(bounding_boxes) == 0:
        return [], []
    # coordinates of bounding boxes
    start_x = bounding_boxes[:, 0]
    start_y = bounding_boxes[:, 1]
    end_x = bounding_boxes[:, 2]
    end_y = bounding_boxes[:, 3]

    # Picked bounding boxes
    picked_boxes = []
    picked_score = []

    # Compute areas of bounding boxes
    areas = (end_x - start_x + 1) * (end_y - start_y + 1)

    # Sort by confidence score of bounding boxes
    order = np.argsort(score)
    # Iterate bounding boxes
    while order.size > 0:
        # The index of largest confidence score
        index = order[-1]
        # Pick the bounding box with largest confidence score
        picked_boxes.append(bounding_boxes[index])
        picked_score.append(confidence_score[index])

        # Compute ordinates of intersection-over-union(IOU)
        x1 = np.maximum(start_x[index], start_x[order[:-1]])
        x2 = np.minimum(end_x[index], end_x[order[:-1]])
        y1 = np.maximum(start_y[index], start_y[order[:-1]])
        y2 = np.minimum(end_y[index], end_y[order[:-1]])

        # Compute areas of intersection-over-union
        w = np.maximum(0.0, x2 - x1 + 1)
        h = np.maximum(0.0, y2 - y1 + 1)
        intersection = w * h

        # Compute the ratio between intersection and union
        ratio = intersection / (areas[index] + areas[order[:-1]] - intersection)

        left = np.where(ratio < threshold)
        order = order[left]

    return picked_boxes, picked_score

bounding_boxes =np.asarray([[187, 82, 337, 317],[150, 67, 305, 282],[246, 121, 368, 304]],dtype=np.float32)
confidence_score = np.asarray([0.9, 0.75, 0.8],dtype=np.float32)

# Draw parameters
font_scale = 1
thickness = 2

# IoU threshold
threshold = 0.5

picked_boxes, picked_score = nms(bounding_boxes, confidence_score, threshold)

print(picked_boxes,picked_score)

import datetime
with tf.Session() as sess:

    for i in range(3):
        old=datetime.datetime.now()
        nms = tf.image.non_max_suppression(bounding_boxes,confidence_score, max_output_size=5,iou_threshold=threshold)
        print("cost time",(datetime.datetime.now()-old).microseconds)
        # print('face detectd', len(nms.eval()))
        for index, value in enumerate(nms.eval()):
            rect = bounding_boxes[value]
            print(rect)



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI视觉网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值