解析目標(biāo)檢測(cè)之IoU
一、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ì)位置(左上,左下,右上,右下,包含,互不相交)分情況討論,來計(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]。然后我們來求AB交集的上下界限。
交集計(jì)算的邏輯
- 交集下界z1:max(x1,y1)
- 交集上界z2:min(x2,y2)
- 如果z2-z1小于0,則說明集合 A 和集合 B 沒有交集。
下面使用Python來實(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簡(jiǎn)潔優(yōu)雅的推導(dǎo)式示例詳解
這篇文章主要給大家介紹了關(guān)于Python簡(jiǎn)潔優(yōu)雅的推導(dǎo)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04詳解python3安裝pillow后報(bào)錯(cuò)沒有pillow模塊以及沒有PIL模塊問題解決
這篇文章主要介紹了python3安裝pillow后報(bào)錯(cuò)沒有pillow模塊以及沒有PIL模塊問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Django REST Framework 分頁(yè)(Pagination)詳解
這篇文章主要介紹了Django REST Framework 分頁(yè)(Pagination)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Pycharm如何導(dǎo)入python文件及解決報(bào)錯(cuò)問題
這篇文章主要介紹了Pycharm如何導(dǎo)入python文件及解決報(bào)錯(cuò)問題,本文通過示例截圖相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05matplotlib繪制兩點(diǎn)間連線的幾種方法實(shí)現(xiàn)
本文主要介紹了matplotlib繪制兩點(diǎn)間連線的幾種方法實(shí)現(xiàn),主要介紹了4種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的示例代碼
學(xué)生管理系統(tǒng)是一個(gè)常見的應(yīng)用程序,它可以幫助學(xué)校、教育機(jī)構(gòu)或教師管理學(xué)生的信息,本文將介紹如何利用Python開發(fā)一個(gè)學(xué)生管理系統(tǒng),需要的可以參考一下2023-07-07詳解如何用Flask中的Blueprints構(gòu)建大型Web應(yīng)用
Blueprints是Flask中的一種模式,用于將應(yīng)用程序分解為可重用的模塊,這篇文章主要為大家詳細(xì)介紹了如何使用Blueprints構(gòu)建大型Web應(yīng)用,需要的可以參考下2024-03-03