python:目標(biāo)檢測模型預(yù)測準(zhǔn)確度計算方式(基于IoU)
訓(xùn)練完目標(biāo)檢測模型之后,需要評價其性能,在不同的閾值下的準(zhǔn)確度是多少,有沒有漏檢,在這里基于IoU(Intersection over Union)來計算。
希望能提供一些思路,如果覺得有用歡迎贊我表揚我~
IoU的值可以理解為系統(tǒng)預(yù)測出來的框與原來圖片中標(biāo)記的框的重合程度。系統(tǒng)預(yù)測出來的框是利用目標(biāo)檢測模型對測試數(shù)據(jù)集進(jìn)行識別得到的。
計算方法即檢測結(jié)果DetectionResult與GroundTruth的交集比上它們的并集,如下圖:
藍(lán)色的框是:GroundTruth
黃色的框是:DetectionResult
綠色的框是:DetectionResult ⋂GroundTruth
紅色的框是:DetectionResult ⋃GroundTruth


基本思路是先讀取原來圖中標(biāo)記的框信息,對每一張圖,把所需要的那一個類別的框拿出來,與測試集上識別出來的框進(jìn)行比較,計算IoU,選擇最大的值作為當(dāng)前框的IoU值,然后通過設(shè)定的閾值(漏檢0, 0.3, 0.5, 0.7)來進(jìn)行比較統(tǒng)計,最后得到每個閾值下的所有的判定為正確檢測(IoU值大于閾值)的框的數(shù)量,然后與原本的標(biāo)記框的數(shù)量一起計算準(zhǔn)確度。
其中計算IoU的時候是重新構(gòu)建一個背景為0的圖,設(shè)定框所在的位置為1,分別利用原本標(biāo)注的框和測試識別的框來構(gòu)建兩個這樣的圖,兩者相加就能夠讓重疊的部分變成2,于是就可以知道重疊部分的大小(交集),從而計算IoU。
構(gòu)建代碼如下:
#讀取txt-標(biāo)準(zhǔn)txt為基準(zhǔn)-分類別求閾值-閾值為0. 0.3 0.5 0.7的統(tǒng)計
import glob
import os
import numpy as np
#設(shè)定的閾值
threshold1=0.3
threshold2=0.5
threshold3=0.7
#閾值計數(shù)器
counter0=0
counter1=0
counter2=0
counter3=0
stdtxt=''#標(biāo)注txt路徑
testtxt=''#測試txt路徑
txtlist=glob.glob(r'%s\*.txt' %stdtxt)#獲取所有txt文件
for path in txtlist:#對每個txt操作
txtname=os.path.basename(path)[:-4]#獲取txt文件名
label=1
eachtxt=np.loadtxt(path) #讀取文件
for line in eachtxt:
if line[0]==label:
#構(gòu)建背景為0框為1的圖
map1=np.zeros((960,1280))
map1[line[2]:(line[2]+line[4]),line[1]:(line[1]+line[3])]=1
testfile=np.loadtxt(testtxt + txtname + '.txt')
c=0
iou_list=[]#用來存儲所有iou的集合
for tline in testfile:#對測試txt的每行進(jìn)行操作
if tline[0]==label:
c=c+1
map2=np.zeros((960,1280))
map2[tline[2]:(tline[2]+tline[4]),tline[1]:(tline[1]+tline[3])]=1
map3=map1+map2
a=0
for i in map3:
if i==2:
a=a+1
iou=a/(line[3]*line[4]+tline[3]*tline[4]-a)#計算iou
iou_list.append(iou)#添加到集合尾部
threshold=max(iou_list)#閾值取最大的
#閾值統(tǒng)計
if threshold>=threshold3:
counter3=counter3+1
elif threshold>=threshold2:
counter2=counter2+1
elif threshold>=threshold1:
counter1=counter1+1
elif threshold<threshold1:#漏檢
counter0=counter0+1
以上這篇python:目標(biāo)檢測模型預(yù)測準(zhǔn)確度計算方式(基于IoU)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入解析Python中的__builtins__內(nèi)建對象
__builtins__ 是內(nèi)建模塊__builtin__中的對象,使用Python中的內(nèi)建函數(shù)時會通過__builtins__引導(dǎo),這里我們就來深入解析Python中的__builtins__內(nèi)建對象,需要的朋友可以參考下2016-06-06
Python內(nèi)置函數(shù)int()的具體使用
這篇文章主要為大家介紹了Python內(nèi)置函數(shù)int()的具體使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Pytorch測試神經(jīng)網(wǎng)絡(luò)時出現(xiàn) RuntimeError:的解決方案
這篇文章主要介紹了Pytorch測試神經(jīng)網(wǎng)絡(luò)時出現(xiàn) RuntimeError:的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
蘋果Macbook Pro13 M1芯片安裝Pillow的方法步驟
Pillow作為python的第三方圖像處理庫,提供了廣泛的文件格式支持,本文主要介紹了蘋果Macbook Pro13 M1芯片安裝Pillow,具有一定的參考價值,感興趣的可以了解一下2021-11-11

