• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    解析目标检测之IoU

    一、IoU的简介及原理解析

    IoU 的全称为交并比(Intersection over Union),通过这个名称我们大概可以猜到 IoU 的计算方法。IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。

    开始计算之前,我们首先进行分析下交集和并集到底应该怎么计算:我们首先需要计算交集,然后并集通过两个边框的面积的和减去交集部分即为并集,因此 IoU 的计算的难点在于交集的计算。

    为了计算交集,你脑子里首先想到的方法应该是:考虑两个边框的相对位置,然后按照相对位置(左上,左下,右上,右下,包含,互不相交)分情况讨论,来计算交集。

    上图就是你的直觉,这样想没有错。但计算一个交集,就要分多种情况讨论,要是程序真的按照这逻辑编写就太搞笑了。因此对这个问题进行进一步地研究显得十分有必要。

    让我们重新思考一下两个框交集的计算。两个框交集的计算的实质是两个集合交集的计算,因此我们可以将两个框的交集的计算简化为:

    通过简化,我们可以清晰地看到,交集计算的关键是交集上下界点(图中蓝点)的计算。

    我们假设集合 A 为 [x1,x2],集合 B 为 [y1,y2]。然后我们来求AB交集的上下界限。

    交集计算的逻辑

    下面使用Python来实现两个一维集合的 IoU 的计算:

    def iou(set_a, set_b):
        '''
        一维 iou 的计算
        '''
        x1, x2 = set_a # (left, right)
        y1, y2 = set_b # (left, right)
        
        low = max(x1, y1)
        high = min(x2, y2)
        # intersection
        if high-low0:
            inter = 0
        else:
            inter = high-low
        # union
        union = (x2 - x1) + (y2 - y1) - inter
        # iou
        iou = inter / union
        return iou

    上面,我们计算了两个一维集合的 iou,将上面的程序进行扩展,即可得到两个框 IoU 计算的程序。

    def iou(box1, box2):
        '''
        两个框(二维)的 iou 计算
        
        注意:边框以左上为原点
        
        box:[top, left, bottom, right]
        '''
        in_h = min(box1[2], box2[2]) - max(box1[0], box2[0])
        in_w = min(box1[3], box2[3]) - max(box1[1], box2[1])
        inter = 0 if in_h0 or in_w0 else in_h*in_w
        union = (box1[2] - box1[0]) * (box1[3] - box1[1]) + \
    
                (box2[2] - box2[0]) * (box2[3] - box2[1]) - inter
        iou = inter / union
        return iou

    二、基于TensorFlow的IoU实现

    上节介绍了IoU,及其的计算,下面我们给出其在 TensorFlow 上的实现:

    import tensorflow as tf
    
    def IoU_calculator(x, y, w, h, l_x, l_y, l_w, l_h):
        """calaulate IoU
        Args:
          x: net predicted x
          y: net predicted y
          w: net predicted width
          h: net predicted height
          l_x: label x
          l_y: label y
          l_w: label width
          l_h: label height
        
        Returns:
          IoU
        """
        
        # convert to coner
        x_max = x + w/2
        y_max = y + h/2
        x_min = x - w/2
        y_min = y - h/2
     
        l_x_max = l_x + l_w/2
        l_y_max = l_y + l_h/2
        l_x_min = l_x - l_w/2
        l_y_min = l_y - l_h/2
        # calculate the inter
        inter_x_max = tf.minimum(x_max, l_x_max)
        inter_x_min = tf.maximum(x_min, l_x_min)
     
        inter_y_max = tf.minimum(y_max, l_y_max)
        inter_y_min = tf.maximum(y_min, l_y_min)
     
        inter_w = inter_x_max - inter_x_min
        inter_h = inter_y_max - inter_y_min
        
        inter = tf.cond(tf.logical_or(tf.less_equal(inter_w,0), tf.less_equal(inter_h,0)), 
                        lambda:tf.cast(0,tf.float32), 
                        lambda:tf.multiply(inter_w,inter_h))
        # calculate the union
        union = w*h + l_w*l_h - inter
        
        IoU = inter / union
        return IoU

    以上就是解析目标检测之IoU的详细内容,更多关于目标检测IoU的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • 如何通过python实现IOU计算代码实例
    • python实现交并比IOU教程
    • python shapely.geometry.polygon任意两个四边形的IOU计算实例
    • python实现IOU计算案例
    • python:目标检测模型预测准确度计算方式(基于IoU)
    • python实现的Iou与Giou代码
    • python不使用for计算两组、多个矩形两两间的iou方式
    • 浅谈Python3实现两个矩形的交并比(IoU)
    • python计算二维矩形IOU实例
    • Python计算机视觉里的IOU计算实例
    上一篇:pycharm代码删除恢复的方法
    下一篇:浅析Python实现DFA算法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    解析目标检测之IoU 解析,目标,检测,之,IoU,解析,