欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析目標檢測之IoU

 更新時間:2021年06月26日 14:47:59   作者:黑暗星球  
Intersection over Union(IoU)是一種測量在特定數(shù)據(jù)集中檢測相應物體準確度的一個標準。IoU是一個簡單的測量標準,只要是在輸出中得出一個預測范圍(bounding boxes)的任務都可以用IoU來進行測量

一、IoU的簡介及原理解析

IoU 的全稱為交并比(Intersection over Union),通過這個名稱我們大概可以猜到 IoU 的計算方法。IoU 計算的是 “預測的邊框” 和 “真實的邊框” 的交集和并集的比值。

在這里插入圖片描述

開始計算之前,我們首先進行分析下交集和并集到底應該怎么計算:我們首先需要計算交集,然后并集通過兩個邊框的面積的和減去交集部分即為并集,因此 IoU 的計算的難點在于交集的計算。

為了計算交集,你腦子里首先想到的方法應該是:考慮兩個邊框的相對位置,然后按照相對位置(左上,左下,右上,右下,包含,互不相交)分情況討論,來計算交集。

在這里插入圖片描述

上圖就是你的直覺,這樣想沒有錯。但計算一個交集,就要分多種情況討論,要是程序真的按照這邏輯編寫就太搞笑了。因此對這個問題進行進一步地研究顯得十分有必要。

讓我們重新思考一下兩個框交集的計算。兩個框交集的計算的實質是兩個集合交集的計算,因此我們可以將兩個框的交集的計算簡化為:

在這里插入圖片描述

通過簡化,我們可以清晰地看到,交集計算的關鍵是交集上下界點(圖中藍點)的計算。

我們假設集合 A 為 [x1,x2],集合 B 為 [y1,y2]。然后我們來求AB交集的上下界限。

交集計算的邏輯

  • 交集下界z1:max(x1,y1)
  • 交集上界z2:min(x2,y2)
  • 如果z2-z1小于0,則說明集合 A 和集合 B 沒有交集。

下面使用Python來實現(xiàn)兩個一維集合的 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-low<0:
        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_h<0 or in_w<0 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實現(xiàn)

上節(jié)介紹了IoU,及其的計算,下面我們給出其在 TensorFlow 上的實現(xiàn):

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簡潔優(yōu)雅的推導式示例詳解

    Python簡潔優(yōu)雅的推導式示例詳解

    這篇文章主要給大家介紹了關于Python簡潔優(yōu)雅的推導式的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 詳解python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決

    詳解python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決

    這篇文章主要介紹了python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Django REST Framework 分頁(Pagination)詳解

    Django REST Framework 分頁(Pagination)詳解

    這篇文章主要介紹了Django REST Framework 分頁(Pagination)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • python分析作業(yè)提交情況

    python分析作業(yè)提交情況

    這篇文章主要為大家詳細介紹了python分析作業(yè)提交情況,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • pycharm中執(zhí)行.sh文件的方法步驟

    pycharm中執(zhí)行.sh文件的方法步驟

    本文主要介紹了pycharm中執(zhí)行.sh文件的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Pycharm如何導入python文件及解決報錯問題

    Pycharm如何導入python文件及解決報錯問題

    這篇文章主要介紹了Pycharm如何導入python文件及解決報錯問題,本文通過示例截圖相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • matplotlib繪制兩點間連線的幾種方法實現(xiàn)

    matplotlib繪制兩點間連線的幾種方法實現(xiàn)

    本文主要介紹了matplotlib繪制兩點間連線的幾種方法實現(xiàn),主要介紹了4種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • python關于逆序輸出留空格的方法解讀

    python關于逆序輸出留空格的方法解讀

    這篇文章主要介紹了python關于逆序輸出留空格的方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python實現(xiàn)學生管理系統(tǒng)的示例代碼

    Python實現(xiàn)學生管理系統(tǒng)的示例代碼

    學生管理系統(tǒng)是一個常見的應用程序,它可以幫助學校、教育機構或教師管理學生的信息,本文將介紹如何利用Python開發(fā)一個學生管理系統(tǒng),需要的可以參考一下
    2023-07-07
  • 詳解如何用Flask中的Blueprints構建大型Web應用

    詳解如何用Flask中的Blueprints構建大型Web應用

    Blueprints是Flask中的一種模式,用于將應用程序分解為可重用的模塊,這篇文章主要為大家詳細介紹了如何使用Blueprints構建大型Web應用,需要的可以參考下
    2024-03-03

最新評論