最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析目標(biāo)檢測(cè)之IoU

 更新時(shí)間:2021年06月26日 14:47:59   作者:黑暗星球  
Intersection over Union(IoU)是一種測(cè)量在特定數(shù)據(jù)集中檢測(cè)相應(yīng)物體準(zhǔn)確度的一個(gè)標(biāo)準(zhǔn)。IoU是一個(gè)簡(jiǎn)單的測(cè)量標(biāo)準(zhǔn),只要是在輸出中得出一個(gè)預(yù)測(cè)范圍(bounding boxes)的任務(wù)都可以用IoU來(lái)進(jìn)行測(cè)量

一、IoU的簡(jiǎn)介及原理解析

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

讓我們重新思考一下兩個(gè)框交集的計(jì)算。兩個(gè)框交集的計(jì)算的實(shí)質(zhì)是兩個(gè)集合交集的計(jì)算,因此我們可以將兩個(gè)框的交集的計(jì)算簡(jiǎn)化為:

在這里插入圖片描述

通過簡(jiǎn)化,我們可以清晰地看到,交集計(jì)算的關(guān)鍵是交集上下界點(diǎn)(圖中藍(lán)點(diǎn))的計(jì)算。

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

交集計(jì)算的邏輯

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

下面使用Python來(lái)實(shí)現(xiàn)兩個(gè)一維集合的 IoU 的計(jì)算:

def iou(set_a, set_b):
    '''
    一維 iou 的計(jì)算
    '''
    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

上面,我們計(jì)算了兩個(gè)一維集合的 iou,將上面的程序進(jìn)行擴(kuò)展,即可得到兩個(gè)框 IoU 計(jì)算的程序。

def iou(box1, box2):
    '''
    兩個(gè)框(二維)的 iou 計(jì)算
    
    注意:邊框以左上為原點(diǎn)
    
    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實(shí)現(xiàn)

上節(jié)介紹了IoU,及其的計(jì)算,下面我們給出其在 TensorFlow 上的實(shí)現(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

以上就是解析目標(biāo)檢測(cè)之IoU的詳細(xì)內(nèi)容,更多關(guān)于目標(biāo)檢測(cè)IoU的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python實(shí)現(xiàn)二終端網(wǎng)絡(luò)可靠度

    使用Python實(shí)現(xiàn)二終端網(wǎng)絡(luò)可靠度

    這里給大家分享的是實(shí)現(xiàn)二終端網(wǎng)絡(luò)可靠度的方法以及使用Python實(shí)現(xiàn)的代碼,有需要的小伙伴可以參考下。
    2021-05-05
  • 關(guān)于python寫入文件自動(dòng)換行的問題

    關(guān)于python寫入文件自動(dòng)換行的問題

    今天小編就為大家分享一篇關(guān)于python寫入文件自動(dòng)換行的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-06-06
  • 初學(xué)Python實(shí)用技巧兩則

    初學(xué)Python實(shí)用技巧兩則

    這篇文章主要介紹了初學(xué)Python實(shí)用技巧兩則,包括可變參數(shù)的應(yīng)用級(jí)execfile函數(shù)的用法,需要的朋友可以參考下
    2014-08-08
  • Python 將 CSV 分割成多個(gè)文件的示例代碼

    Python 將 CSV 分割成多個(gè)文件的示例代碼

    在本文中,我們討論了如何使用 Pandas 庫(kù)創(chuàng)建 CSV 文件, 此外,我們還討論了兩種常見的數(shù)據(jù)拆分技術(shù),行式數(shù)據(jù)拆分和列式數(shù)據(jù)拆分,需要的朋友可以參考下
    2023-06-06
  • Python爬蟲數(shù)據(jù)處理模塊的安裝使用教程

    Python爬蟲數(shù)據(jù)處理模塊的安裝使用教程

    這篇文章主要為大家介紹了Python爬蟲數(shù)據(jù)處理模塊的安裝使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python操作XML文件的使用指南

    Python操作XML文件的使用指南

    我們經(jīng)常需要解析用不同語(yǔ)言編寫的數(shù)據(jù),Python?提供了許多第三方庫(kù)來(lái)解析或拆分用其他語(yǔ)言編寫的數(shù)據(jù),今天我們來(lái)學(xué)習(xí)下?Python?XML?解析器的相關(guān)功能
    2022-09-09
  • Python 求向量的余弦值操作

    Python 求向量的余弦值操作

    這篇文章主要介紹了Python 求向量的余弦值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-03-03
  • python BeautifulSoup庫(kù)的常用操作

    python BeautifulSoup庫(kù)的常用操作

    Beautiful Soup 是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù),它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查詢,修改文檔的方式,本文就來(lái)給大家簡(jiǎn)單介紹一下BeautifulSoup庫(kù)的常用操作,需要的朋友可以參考下
    2023-08-08
  • python如何生成textgrid文件

    python如何生成textgrid文件

    這篇文章主要介紹了python如何生成textgrid文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Python中的閉包

    Python中的閉包

    這篇文章主要介紹了Python中的閉包,閉包在函數(shù)中提出的概念,簡(jiǎn)單來(lái)說就是一個(gè)函數(shù)定義中引用了函數(shù)外定義的變量,并且該函數(shù)可以在其定義環(huán)境外被執(zhí)行。這樣的一個(gè)函數(shù)我們稱之為閉包,下面我們一起來(lái)看看文章內(nèi)容的具體介紹
    2021-11-11

最新評(píng)論

象州县| 固始县| 原平市| 天台县| 衡水市| 湘潭县| 郓城县| 临沭县| 延吉市| 阿克陶县| 普格县| 织金县| 高邑县| 仙桃市| 宁波市| 宿迁市| 黔江区| 河北省| 喀喇沁旗| 永康市| 滕州市| 五寨县| 文山县| 财经| 张北县| 鸡东县| 鸡西市| 商都县| 南投县| 梁平县| 阿鲁科尔沁旗| 洛隆县| 磐安县| 内江市| 闽清县| 沛县| 江安县| 奉化市| 珠海市| 凤翔县| 珲春市|