【CV 目標檢測】①——目標檢測概述

一、目標檢測概述

1.目標檢測

  • 目標檢測(Object Detection)的任務是找出圖像中所有感興趣的目標,并確定它們的類別(分類任務)和位置(回歸任務)

  • 目標檢測中能檢測出來的物體取決于當前任務(數據集)需要檢測的物體有哪些

  • 目標檢測的位置信息一般有兩種格式(以圖片左上角為原點(0,0))

    • 極坐標表示:xmin, ymin, xmax, ymax分別代表x, y坐標的最小值,最大值(左上角坐標<右下角坐標)

      圖像坐標系原點在左上角,把圖像看作ndarray,行對應著y,列對應著x

    • 中心點坐標:x_center, y_center, w, h分別表示目標檢測框的中心點坐標和目標檢測框的寬,高

2.開源數據集

經典的目標檢測數據集有兩種,PASCAL VOC數據集MS COCO數據集

(1)PASCAL VOC數據集

PASCAL VOC是目標檢測領域的經典數據集。PASCAL VOC包含約10000張帶有邊界框的圖片用于訓練和驗證。PASCAL VOC數據集是目標檢測問題的一個基準數據集,很多模型都是在此數據集上得到的,常用的是VOC2007和VOC2012兩個版本的數據集,共20個類別,分別是:

  1. Person:person
  2. Animal:bird,cat,cow,horse,sheep
  3. Vehicle:aeroplane,bicycle,boat,bus,car,motorbike,train
  4. Indoor:bottle,chair,dining table,potted plant,soft,tv/monitor

下載地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/

目標位置信息 解釋:

  • 0 不可用于分割
  • Frontal 物體在圖片中的位置是 前面
  • Unspecified 正常拍攝 Right 物體位于右側
  • 1 物體是截斷的
  • 0 不是 難以識別的物體(若為1,則是人難以識別的物體)

(2)MS COCO數據集

  • 全稱是Microsoft Common Objects in Context。COCO數據集是一個大型的豐富的物體檢測,分割和字幕數據集。這個數據集以場景理解為目標,主要從復雜的日常場景中截取,圖像中的目標通過精確的分割進行位置的標定,圖像包括91類目標,328000影像和2500000個label。目前為止目標檢測的最大數據集,提供的類別有80類,超過33萬張圖片,其中20萬張有標注,整個數據集中個體的數目超過150萬個。
  • COCO數據集的標簽文件標記了每個segmentation+bounding box的精確坐標。其精度均為小數點后兩位,一個目標的標簽示意如下:
  • COCO數據集的目標個數相對VOC數據集來說 要小一點
  • COCO數據集使用json文件標注目標
  • COCO數據集精細標注,即先 分割,然后再進行框選標注,總共標注了80個類別的目標

3.常用的評價指標

(1)IOU

在目標檢測算法中,IOU(intersection over union,交并比)是目標檢測算法中用來評價2個矩形框之間相似度的指標

IOU=兩個矩形框相交的面積兩個矩形框相并的面積IOU = \frac{兩個矩形框相交的面積}{兩個矩形框相并的面積}IOU=兩個矩形框相并的面積兩個矩形框相交的面積?

  • IOU—>1,兩個矩形框越相似;IOU—>0,兩個矩形框越不相似。
  • 當IOU達到0.5,則檢測效果還可以;當IOU達到0.7,則檢測效果還不錯。

實現方法:

def Iou(box1, box2, wh = False):if wh = False: # 使用極坐標表示xmin1, ymin1, xmax1, ymax1 = box1xmin2, ymin2, xmax2, ymax2 = box2else: # 使用中心點表示# 第一個框左上角坐標xmin1, ymin1 = int(box1[0] - box1[2]/2.0), int(box1[1] - box1[3]/2.0)# 第一個框右下角坐標xmax1, ymax1 = int(box1[0] + box1[2]/2.0), int(box1[1] + box1[3]/2.0)# 第二個框左上角坐標xmin2, ymin2 = int(box2[0] - box2[2]/2.0), int(box2[1] - box2[3]/2.0)# 第二個框右下角坐標xmax2, ymax2 = int(box2[0] + box2[2]/2.0), int(box2[1] + box2[3]/2.0)# 獲取矩形框交集對應的左上角和右下角的坐標(intersection)xx1 = np.max([xmin1, xmin2])yy1 = np.max([ymin1, ymax2])xx2 = np.min([xmax1, xmax2])yy2 = np.min([ymax1, ymax2])# 計算兩個矩形框的面積area1 = (xmax1 - xmin1)*(ymax1 - ymin1)area2 = (xmax2 - xmin2)*(ymax2 - ymin2)# 計算交集面積inter_area = (np.max([0, xx2 - xx1]))*(np.max([0, yy2 - yy1])) # 若xx2 - xx1小于0,則使最終結果等于0# 計算交并比iou = inter_area / (area1 + area2 - inter_area + 1e-6)return iou

示例:

import matplotlib.pyplot as plt
import matplotlib.patches as patches # 繪制矩形框
# 真實框和預測框
True_bbox, predict_bbox = [100, 35, 398, 400], [40, 150, 355, 398]
# bbox是bounding box的縮寫
img = plt.imread('dog.jepg')
fig = plt.imshow(img)
# 將邊界框(左上x,左上y,右下x,右下y)格式轉換成為matplotlib格式:((左上x,左上y),寬,高)
# 真實框繪制
fig.axes.add_patch(plt.Rectangle(xy = (True_bbox[0], True_bbox[1]), width = True_bbox[2] - True_bbox[0], height = True_bbox[3] - True_bbox[1], fill = False, edgecolor = 'blue',linewidth = 2)
)
# 預測框繪制
fig.axes.add_patch(plt.Rectangle(xy = (predict_bbox[0], predict_bbox[1]), width = predict_bbox[2] - predict_bbox[0], height = predict_bbox[3] - predict_bbox[1], fill = False, edgecolor = 'red',linewidth = 2)
)# 計算iou
Iou(True_bbox, predict_bbox)

(2)mAP(Mean Average Precision)

目標檢測問題中的每個圖片都可能包含一些不同類別的物體,需要評估模型的物體分類和定位性能(只有物體分類:準確率;只有定位性能:IOU)。因此,用于圖像分類問題的標準指標precision不能直接應用于此

A、mAP計算方法

TP,FP,FN,TN

  • True Positive(TP):IOUIOUIOUIOUthresholdIOU_{threshold}IOUthreshold?一般取0.5)的檢測框數量(同一Ground Truth 只計算一次)
  • False Positive(FP):IOU≤IOUthresholdIOU \le IOU_{threshold}IOUIOUthreshold?的檢測框的數量,或者檢測到同一個GT的多余檢測框的數量
  • False Negative(FN):沒有檢測到的GT數量
  • True Negative(TN):在MAP評價指標中不會使用到

查準率,查全率

  • 查準率(Precision):TPTP+FP\frac{TP}{TP+FP}TP+FPTP?
  • 查全率(Recall):TPTP+FN\frac{TP}{TP+FN}TP+FNTP?

P-R曲線

查準率和查全率兩者繪制的曲線即為P-R曲線

AP(average precision)

AP是PR曲線下的面積

mAP

mAP是多個分類任務的AP的平均值

B、mAP計算示例

其中all detections代表所有預測框的數量,all ground truths代表所有GT的數量

Precision=TPTP+FP=TPalldetectionsPrecision = \frac{TP}{TP+FP}=\frac{TP}{all\,detections}Precision=TP+FPTP?=alldetectionsTP?

Recall=TPTP+FN=TPallgroundtruthsRecall = \frac{TP}{TP+FN} = \frac{TP}{all\,ground\,truths}Recall=TP+FNTP?=allgroundtruthsTP?

AP是計算某一類P-R曲線下的面積,mAP則是計算所有類別P-R曲線下面積的平均值

解釋:

  • 當一個GT有多個預測邊框時,則認為其中IOU最大的并且IOU≥0.3IOU \ge 0.3IOU0.3的標記為TP,其余的均標記為FP
  • IOU—>1,則預測邊框與GT越相似;反之,則越不相似

先計算出P-R曲線上各個點的坐標(注意:需要根據置信度從大到小排序所有的預測框)

  • ACC TP:從第一個檢測結果到當前行的所有 TP 的總和,用于計算累積的精確率(Precision)和召回率(Recall)
  • ACC FP:從第一個檢測結果到當前行的所有 FP 的總和,同樣用于計算累積的精確率和召回率

然后就可以繪制出P-R曲線

得到P-R曲線之后就可以計算AP(P-R曲線下的面積),有兩種方法:

  • 在VOC2010以前,只需要選取當Recall≥0,0.1,0.2,…,1Recall \ge 0, 0.1, 0.2,\dots,1Recall0,0.1,0.2,,1共11個點時的Precision最大值,然后AP就是這11個Precision的平均值,取11個點[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1][0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1][0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]的插值所得

得到一個類別的AP結果如下:

AP=111∑r∈0,0.1,0.2,?,1ρinterp(r)AP = \frac{1}{11}\sum_{r \in 0, 0.1,0.2, \cdots, 1} \rho_{interp}(r)AP=111?r0,0.1,0.2,?,1?ρinterp?(r)

AP=111(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)AP = \frac{1}{11}(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)AP=111?(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)
AP=26.84%AP = 26.84\%AP=26.84%

要計算mAP,就把所有類別的mAP計算出來,然后取平均即可

  • 在VOC2010及以后,需要針對每一個不同的Recall值(包括0和1),選取大于等于這些Recall值時對應的Precision最大值,如下圖所示:

然后就可以計算PR曲線下面積作為AP值:

AP=A1+A2+A3+A4AP = A_1+A_2+A_3+A_4AP=A1?+A2?+A3?+A4?

A1=(0.0666?0)×1=0.0666A_1 = (0.0666-0)\times1= 0.0666A1?=(0.0666?0)×1=0.0666

A2=(0.1333?0.0666)×0.6666=0.04446222A_2 =(0.1333-0.0666)\times0.6666 = 0.04446222A2?=(0.1333?0.0666)×0.6666=0.04446222

A3=(0.4?0.1333)×0.4285=0.11428095A_3 = (0.4-0.1333)\times0.4285 = 0.11428095A3?=(0.4?0.1333)×0.4285=0.11428095

A4=(0.4666?0.4)×0.3043=0.02026638A_4 = (0.4666-0.4)\times0.3043=0.02026638A4?=(0.4666?0.4)×0.3043=0.02026638

AP=0.0666+0.04446222+0.11428095+0.02026638AP = 0.0666+0.04446222+0.11428095+0.02026638AP=0.0666+0.04446222+0.11428095+0.02026638

AP=0.24560955AP = 0.24560955AP=0.24560955

AP=24.56%AP = 24.56\%AP=24.56%

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92971.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92971.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92971.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#圖形庫SciChart與ScottPlot及LiveCharts2對比

一.概述 1.SciChart SciChart 是一個專為企業級應用設計的高性能數據可視化庫&#xff0c;提供跨平臺的圖表解決方案&#xff0c;支持 .NET、JavaScript、iOS 和 Android 等多個平臺。它以卓越的渲染性能、豐富的專業圖表類型和強大的交互功能著稱&#xff0c; 廣泛應用于金…

Win10電腦密碼忘記如何進入操作系統

http://xq128.com/zj.htmlhttps://share.feijipan.com/s/LbFdbUKl下載后&#xff0c;準備一個空的U盤&#xff0c;大于4G。將U盤制作為PE盤。之后將制作好的PE盤插入到電腦中&#xff0c;啟動待去除密碼的電腦臺式機&#xff0c;啟動后一直按住F12&#xff0c;進入BIOS。選擇下…

[免費]基于Python的網易云音樂熱門歌單可視化大屏項目(flask+pandas+echarts+request庫)【論文+源碼+SQL腳本】

大家好&#xff0c;我是python222_小鋒老師&#xff0c;看到一個不錯的基于Python的網易云音樂熱門歌單可視化大屏項目(flaskpandasechartsrequest庫)&#xff0c;分享下哈。 項目視頻演示 【免費】基于Python的網易云音樂熱門歌單可視化大屏項目(flaskpandasecharts爬蟲) Py…

AR 智能眼鏡:從入門到未來

從零看懂 AR 智能眼鏡:未來 10 年技術演進與新手入門指南 在這個數字技術飛速迭代的時代,AR 智能眼鏡正從科幻電影走進現實。從 2025 年重量不足 35 克的消費級產品,到 2030 年成為 “第二大腦” 的生活剛需,再到 2040 年進化為神經接口終端,AR 智能眼鏡的發展將重塑人類…

初識Vue2及MVVM理解

1、什么是Vue Vue是一款用于構建用戶界面的JavaScript框架。它基于標準HTML、CSS和JavaScript構建&#xff0c;并提供了一套聲明式的、組件化的編程模型&#xff0c;可以高效地開發用戶界面。 Vue.js是一套構建用戶界面的漸進式框架&#xff0c;采用自底向上增量開發的設計&…

Rust:專業級錯誤處理工具 thiserror 詳解

Rust&#xff1a;專業級錯誤處理工具 thiserror 詳解 thiserror 是 Rust 中用于高效定義自定義錯誤類型的庫&#xff0c;特別適合庫開發。相比 anyhow 的應用級錯誤處理&#xff0c;thiserror 提供更精確的錯誤控制&#xff0c;讓庫用戶能模式匹配具體錯誤。 &#x1f4e6; 基…

Python網絡爬蟲(一) - 爬取靜態網頁

文章目錄一、靜態網頁概述1. 靜態網頁介紹2. 靜態網頁爬取技術Requests介紹二、安裝 Requests 庫三、發送請求并獲取響應1. 發送 GET 請求1.1 get() 方法介紹1.2 get() 方法簽名介紹1.3 get() 方法參數介紹1.4 示例&#xff1a;發送get請求2. 發送 POST 請求2.1 post() 方法介紹…

.NET/C# webapi框架下給swagger的api文檔中顯示注釋(可下載源碼)

bg&#xff1a;.NET/C#真的是越來越涼了。用的是.net9&#xff0c;創建完自帶一個天氣預報api拿來測試就行 1、在Controllers中弄多幾個&#xff0c;并寫上注釋 /// <summary> /// Post注釋 /// </summary> /// <returns></returns> [HttpPost] publ…

2508C++,檢測S模式

原文 可用Windows.System.Profile.WindowsIntegrityPolicy類檢測S模式. //C# using Windows.System.Profile; if (WindowsIntegrityPolicy.IsEnabled) {//系統在S模式if (WindowsIntegrityPolicy.CanDisable) {//系統在S模式,但可退出S模式suggestCompanion true;} else {//系…

Coding Exercising Day 9 of “Code Ideas Record“:StackQueue part 01

文章目錄1. Theoretical basisThe C standard library has multiple versions. To understand the implementation principles of stack and queue, we must know which STL version we are using.The stack and queue discussed next are data structures in *SGI STL*. Only …

Mysql數據倉庫備份腳本

Mysql數據倉庫備份腳本 #!/bin/bash# MySQL數據庫完整備份腳本 # 功能: 查詢所有數據庫 -> 分別導出 -> 壓縮打包# 配置區域 # MySQL連接信息 MYSQL_USER"root" MYSQL_PASSWORD"root" MYSQL_HOST"localhost" MYSQL_PORT"3306"…

基于嵌入式Linux RK3568 qt 車機系統開發

嵌入式系統、Qt/QML 與車機系統的發展趨勢分析 1. RK3568 開發板與 OpenGL ES 3 支持&#xff0c;為圖形應用打下堅實基礎 RK3568 是瑞芯微&#xff08;Rockchip&#xff09;推出的一款高性能、低功耗的64位處理器&#xff0c;廣泛用于工業控制、智能終端、嵌入式車載系統等領…

OceanBase架構設計

本文主要參考《大規模分布式存儲系統》 基本結構客戶端&#xff1a;發起請求。 RootServer&#xff1a;管理集群中的所有服務器&#xff0c;子表數據分布及副本管理&#xff0c;一般為一主一備&#xff0c;數據強同步。 UpdateServer&#xff1a;存儲增量變更數據&#xff0c;一…

[Element-plus]動態設置組件的語言

nuxt element-plus國際化vue element-plus國際化<template><div class"container"> <!-- <LangSwitcher />--><button click"toggle(zh-cn)">中文</button><button click"toggle(en)">English<…

【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,開發調試ARM 版的Qt應用程序?

如何在Windows 10上配置VS Code以開發和調試ARM版Qt應用程序。這需要設置一個基于Docker的Linux環境。首先&#xff0c;讓我們了解一下你的具體需求和環境&#xff1a;你有一個Qt項目&#xff08;看起來是醫學設備相關的設置程序&#xff09;目標平臺是ARM架構你希望在Windows …

linux常見故障系列文章 1-linux進程掛掉原因總結和排查思路

問題一 &#xff1a;運行時常見的進程崩潰原因 內存不足&#xff09; **0. 內存不足 內存不足&#xff08;OOM Killer&#xff09; 排查 OOM&#xff1a;free -h → dmesg → ps aux --sort-%mem 預防 OOM&#xff1a;限制關鍵進程內存、調整 OOM Killer 策略、增加 swap 長期優…

Spring Cloud Gateway 路由與過濾器實戰:轉發請求并添加自定義請求頭(最新版本)

前言 網關是什么?如果把你的系統比作一棟高端寫字樓,網關就是那位神通廣大的前臺小姐姐,笑容可掬地攔住不速之客,把貴賓引到豪華會議室,還會在你胸口貼上一枚醒目的“貴賓”標簽。它既懂禮數,又有原則,能過濾無效請求、轉發正確目標,還能在途中動點“小手腳”,比如加…

達夢數據庫慢SQL日志收集和分析

達夢數據庫慢SQL日志收集和分析 開啟SQL日志記錄 使用DMLOG工具分析SQLLOG DMLOG安裝配置 DMLOG分析日志 系統視圖V$LONG_EXEC_SQLS記錄了最近1000條執行時間超1s的sql。如果sql語句超長可能會被截斷,只能從sqllog里找完整的sql文本。 SELECT * FROM V$LONG_EXEC_SQLS ORDER …

一篇文章,帶你玩轉SparkCore

Spark Core 概念 前言 批處理&#xff08;有界數據&#xff09; ? 對靜態的、有限的數據集進行一次性處理&#xff0c;數據通常按固定周期&#xff08;如每小時、每天&#xff09;收集后統一計算。 特點&#xff1a; 高吞吐量&#xff0c;適合大規模數據。高延遲&#xff08;數…

VRRP技術

VRRP的概念及應用場景 VRRP&#xff08;虛擬路由冗余協議&#xff09;概念 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虛擬路由冗余協議&#xff09;是一種路由容錯協議&#xff0c;用于在多個路由器之間提供網關冗余&#xff0c;確保當主路由器故障時&a…