mAP計算目標檢測精確度實現(xiàn)源碼
好多人都想算一下目標檢測的精確度,mAP的概念雖然不好理解,但是理解了就很懂。
GITHUB代碼下載
1、IOU的概念
IOU的概念應該比較簡單,就是衡量預測框和真實框的重合程度。下圖是一個示例:圖中綠色框為實際框(好像不是很綠……),紅色框為預測框,當我們需要判斷兩個框之間的關系時,主要就是判斷兩個框的重合程度。
計算IOU的公式為:
可以看到IOU是一個比值,即交并比。
在分子部分,值為預測框和實際框之間的重疊區(qū)域;
在分母部分,值為預測框和實際框所占有的總區(qū)域。
交區(qū)域和并區(qū)域的比值,就是IOU。
2、TP TN FP FN的概念
TP TN FP FN里面一共出現(xiàn)了4個字母,分別是T F P N。
T是True;
F是False;
P是Positive;
N是Negative。
T或者F代表的是該樣本 是否被正確分類。
P或者N代表的是該樣本 被預測成了正樣本還是負樣本。
TP(True Positives)意思就是被分為了正樣本,而且分對了。
TN(True Negatives)意思就是被分為了負樣本,而且分對了,
FP(False Positives)意思就是被分為了正樣本,但是分錯了(事實上這個樣本是負樣本)。
FN(False Negatives)意思就是被分為了負樣本,但是分錯了(事實上這個樣本是這樣本)。
在mAP計算的過程中主要用到了,TP、FP、FN這三個概念。
3、precision(精確度)和recall(召回率)
TP是分類器認為是正樣本而且確實是正樣本的例子,F(xiàn)P是分類器認為是正樣本但實際上不是正樣本的例子,Precision翻譯成中文就是“分類器認為是正類并且確實是正類的部分占所有分類器認為是正類的比例”。
TP是分類器認為是正樣本而且確實是正樣本的例子,F(xiàn)N是分類器認為是負樣本但實際上不是負樣本的例子,Recall翻譯成中文就是“分類器認為是正類并且確實是正類的部分占所有確實是正類的比例”。
4、概念舉例
如圖所示,藍色的框是 真實框。綠色和紅色的框是 預測框,綠色的框是正樣本,紅色的框是負樣本。一般來講,當預測框和真實框IOU>=0.5時,被認為是正樣本。
因此對于這幅圖來講。
真實框一共有3個,正樣本一共有2個,負樣本一共有2個。
此時
5、單個指標的局限性
在目標檢測算法里面有一個非常重要的概念是置信度,如果置信度設置的高的話,預測的結果和實際情況就很符合,如果置信度低的話,就會有很多誤檢測。
假設一幅圖里面總共有3個正樣本,目標檢測對這幅圖的預測結果有10個,其中3個實際上是正樣本,7個實際上是負樣本。對應置信度如下。
如果我們將可以接受的置信度設置為0.95的話,那么目標檢測算法就會將序號為1的樣本作為正樣本,其它的都是負樣本。此時TP = 1,F(xiàn)P = 0,F(xiàn)N = 2。
此時Precision非常高,但是事實上我們只檢測出一個正樣本,還有兩個沒有檢測出來,因此只用Precision就不合適。
這個時候如果我們將可以接受的置信度設置為0.35的話,那么目標檢測算法就會將序號為1的樣本作為正樣本,其它的都是負樣本。此時TP = 3,F(xiàn)P = 3,F(xiàn)N = 0。
此時Recall非常高,但是事實上目標檢測算法認為是正樣本的樣本里面,有3個樣本確實是正樣本,但有三個是負樣本,存在非常嚴重的誤檢測,因此只用Recall就不合適。
二者進行結合才是評價的正確方法。
什么是AP
AP事實上指的是,利用不同的Precision和Recall的點的組合,畫出來的曲線下面的面積。如下面這幅圖所示。
當我們取不同的置信度,可以獲得不同的Precision和不同的Recall,當我們取得置信度夠密集的時候,就可以獲得非常多的Precision和Recall。
此時Precision和Recall可以在圖片上畫出一條線,這條線下部分的面積就是某個類的AP值。
mAP就是所有的類的AP值求平均。
繪制mAP
我們首先在下載繪制mAP所需的代碼。
在這個代碼中,如果想要繪制mAP則需要三個內容。分別是:
detection-results:指的是預測結果的txt。
ground-truth:指的是真實框的txt。
image-optional:指的是圖片,有這個可以可視化,但是這個可以沒有。
我們需要生成這三個內容,此時下載第二個庫,這個是我拿我制作的ssd代碼寫的一個可以生成對應txt的例子。
我們首先將整個VOC的數(shù)據(jù)集放到VOCdevikit中
然后修改voc2ssd.py里面的trainval_percent,一般用數(shù)據(jù)集的10%或者更少用于測試。如果大家放進VOCdevikit的數(shù)據(jù)集不是全部數(shù)據(jù),而是已經篩選好的測試數(shù)據(jù)集的話,那么就把trainval_percent設置成0,表示全部的數(shù)據(jù)都用于測試。
然后運行voc2ssd.py。此時會生成test.txt,存放用于測試的圖片的名字。
然后依次運行主目錄下的get_dr_txt.py和get_gt_txt.py獲得預測框對應的txt和真實框對應的txt。get_dr_txt.py是用來檢測測試集里面的圖片的,然后會生成每一個圖片的檢測結果,我重寫了detect_image代碼,用于生成預測框的txt。利用for循環(huán)檢測所有的圖片。
get_dr_txt.py是用來獲取測試集中的xml,然后根據(jù)每個xml的結果生成真實框的txt。利用for循環(huán)檢測所有的xml。
完成后我們會在input獲得三個文件夾。
此時把input內部的文件夾復制到mAP的代碼中的input文件夾內部就可以了,然后我們運行mAP的代碼中的main.py,運行結束后,會生成mAP相關的文件。
結果生成在Result里面。
以上就是mAP計算目標檢測精確度實現(xiàn)源碼的詳細內容,更多關于mAP目標檢測的資料請關注腳本之家其它相關文章!
相關文章
Python數(shù)據(jù)結構與算法之使用隊列解決小貓釣魚問題
這篇文章主要介紹了Python數(shù)據(jù)結構與算法之使用隊列解決小貓釣魚問題,結合實例形式分析了Python使用隊列實現(xiàn)小貓釣魚游戲的算法操作技巧,代碼中備有較為詳盡的注釋便于讀者理解,需要的朋友可以參考下2017-12-12pd.to_datetime中時間object轉換datetime實例
本文主要介紹了pd.to_datetime中時間object轉換datetime實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06如何利用AJAX獲取Django后端數(shù)據(jù)詳解
ajax一個前后臺配合的技術,它可以讓javascript發(fā)送http請求,與后臺通信,獲取數(shù)據(jù)和信息。下面這篇文章主要介紹了如何利用AJAX獲取Django后端數(shù)據(jù)的相關資料,需要的朋友可以參考下2021-06-06在Django中動態(tài)地過濾查詢集的實現(xiàn)
本文主要介紹了Django中動態(tài)地過濾查詢集的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03django配置DJANGO_SETTINGS_MODULE的實現(xiàn)
本文主要介紹了django配置DJANGO_SETTINGS_MODULE,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03終于搞懂了Python中super(XXXX,?self).__init__()的作用了
本文主要介紹了終于搞懂了Python中super(XXXX,?self).__init__()的作用了,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08pycharm 2021.3最新激活碼有效期至2100年(親測可用)
這篇文章主要介紹了pycharm 2021.3最新激活碼有效期至2100年(親測可用)2021-02-02