当前位置: 首页 > article >正文

目标检测初始

图像处理之目标检测

目标检测认知

  • Object Detection,是指在给定的图像或视频中检测出目标物体在图像中的位置大小,并进行分类或识别等相关任务。
  • 目标检测主要是将目标的分割和识别合二为一。
  • 目标检测的核心关键:What(是什么)、Where(在哪里)

使用场景

目标检测用于以下场景:

  • 图像处理;
  • 自动驾驶:检测周围的车辆、行人、交通灯、道路标志等;
  • 安防监控:监控公共场,发现异常行为,保障公共安全;
  • 人脸检测;
  • 医学影像分析:在医学影像方面可以识别肿瘤、组织变异等,用于医疗辅助;
  • 无人机应用:识别特定目标,引导无人机飞行,比如监测天气、线路检测、搜寻救援、军事等;
  • 缺陷检测:工业;

目标识别与标注

  • 目标识别包含了分类 + 坐标位置(x, y, w, h):What、where

目标检测网络基础

目标检测方法

Detection主要分为以下三个支系:

one-stage系two-stage系multi-stage系
主要算法YOLO系列、SSD、RetinaNetFast R-CNN、Faster R-CNNR-CNN、SPPNet
检测精度较低(随着网络的改进,精度也不低)较高极高
检测速度较快(达到实时视频流级别)较慢,5 fps极慢
鼻祖YOLOv1Fast R-CNNR-CNN

two-stage(包含全连接层)

1.双阶段,两部到位,特点如下:

  • 候选区域生成:第一阶段生成候选区域(Region Proposals);
  • 区域分类和回归:第二阶段对候选区域进行分类和回归,即对每个候选区域进行目标分类和位置精修。
  • 代表算法:R-CNN(Region-CNN)系列,包括Fast R-CNN、Faster R-CNN、Mask R-CNN等。

2.基本流程:

one-stage(不包含全连接层,依赖不同卷积实现不同功能)

1.单阶段,一步到位,特点如下:

  • 端到端训练:直接从图像中提取特征并进行分类和回归,即同时进行目标分类和位置回归。
  • 实时性高:由于仅有一个阶段,计算速度快,适合实时应用。
  • 代表算法:YOLO(You Only Look Once)系列、SSD等。

2.基本流程:

目标检测指标

目标框指标

  • 在目标检测中,每个检测出的目标物体通常都会标注一个框(Bounding Box),用于表示目标的位置和大小,这个框叫目标框。
IoU(预测框与真实框的重合率)
  • 基础英文单词:【交集】Intersection 【并集】Union
  • 前景目标交并比:𝐼𝑜𝑈=A∩BA∪B
  • loU(Intersection over Union),预选框正确性的度量指标。

Confidence

1.在目标检测中,目标框会标注一个置信度(Confidence Score),通常指的是模型对于预测结果的置信程度。

2.置信度通常是一个0到1之间的实数,是由神经网络模型预测出来的,代表着模型对该预选框的信心(可靠程度)。

3.置信度一般分为两部分:

  • 目标存在置信度(Objectness score):一个标量,表示预选框中存在(任何)目标的概率。
  • 类别置信度(Class confidence):多个标量(每个类别一个),预选框中目标属于每一个类别的概率。

3.置信度是通过神经网络模型在训练过中学习得到的:

  • 分类损失(Classification loss):用于计算类别置信度的误差。
  • 定位损失(Localization loss):用于计算预选框与实际标注框之间的位置误差。
  • 目标存在的损失(Objectness loss):用于计算目标存在置信度的误差。

4.综合置信度

在某些目标检测算法(如YOLO)中,综合置信度通常表示为:

  • 综合置信度目标存在的置信度类别置信度综合置信度=目标存在的置信度×类别置信度
  • 置信度的预测机制使得目标检测算法能够在复杂的图像中准确地定位和识别目标物体。

精度和召回率(与目标检测精度相关,指标之一)

  • 精度和召回率的计算是基于置信度阈值来计算的,即IOU的最小值;
混淆矩阵

Precision和Recall

mAP的计算

mAP(Mean Average Precision)是评估模型效果的综合指标,是根据recallPrecision计算出来的

计算步骤

1.根据IoU划分TPFP

2.按置信度从大到小进行排序,计算从Top-1Top-N对应的Precision值和Recall值;

3.绘制P-R曲线,进行AP(面积)计算;

  • 设置目标框置信度阈值常用阈值,小于该值的框会被过滤掉设置目标框置信度阈值阈值设置为,小于该值的框会被过滤掉设置目标框置信度阈值阈值设置为、针对每个阈值分布求之后,在求平均值
  • 𝐴𝑃50:设置目标框置信度阈值(𝐼𝑂𝑈),常用阈值0.5,小于该值的框会被过滤掉
  • 𝐴𝑃75:设置目标框置信度阈值(𝐼𝑂𝑈),阈值设置为0.75,小于该值的框会被过滤掉
  • 𝐴𝑃50−95:设置目标框置信度阈值(𝐼𝑂𝑈),阈值设置为0.50、0.55....0.95,针对每个阈值分布求𝐴𝑃之后,在求平均值
案例分析

1.场景假设:假如有8个目标,检索出来20个目标框(ID)

①目标框的置信度(Confidence Score)以及正负样本预测结果如下表(并按照置信度降序排序):

IDConfidenceLabel
40.911
20.761
130.650
190.460
60.450
90.381
160.241
10.230
180.230
50.130
70.121
150.120
100.110
170.100
120.090
200.081
140.070
80.030
110.030
30.010

②TOP-N概念理解:以返回的前N个框计算指标

  • 如果N=5,则可计算出:TP = 2 , FP = 3,共有目标8个
  • Precision = 2/5 = 40%
  • Recall = 2/8 = 25%
  • 随着N的增大,召回率必然不会变小,但是精度也是很难评。
IDScoreLabel混淆矩阵
40.911True Positives
20.761True Positives
130.650False Positives
190.460False Positives
60.450False Positives

③mAp计算

  • PASCAL VOC 2010以前:设置11个recall阈值[0, 0.1, 0.2, …, 1],计算Recall大于等于每一个阈值时的最大Precision,AP即平均值
  • 表示处于阈值和下一级阈值之间的值相同的阈值可能对应不同的精度\mathrm{AP}=\frac{1}{11}\sum_{r\in\{0,0.1,...,1\}}p_{interp(r)}\quad p_{interp(r)}=\max_{\tilde{r}:\tilde{r}\geq r}p(\tilde{r}) \\\tilde{r}表示处于阈值𝑟和下一级阈值之间的𝑟𝑒𝑐𝑎𝑙𝑙值(相同的阈值可能对应不同的精度)
IDScoreLabelRecallPrecision
40.9111/8(0.125)1/1
20.7612/8(0.25)2/2
130.6502/8(0.25)2/3
190.4602/8(0.25)2/4
60.4502/8(0.25)2/5
90.3813/8(0.375)3/6
160.2414/8(0.5)4/7
10.2304/8(0.5)4/8
180.2304/8(0.5)4/9
50.1304/8(0.5)4/10
70.1215/8(0.625)5/11
150.1205/8(0.625)5/12
100.1105/8(0.625)5/13
170.1005/8(0.625)5/14
120.0905/8(0.625)5/15
200.0816/8(0.75)6/16
140.0706/8(0.75)6/17
80.0306/8(0.75)6/18
110.0306/8(0.75)6/19
30.0106/8(0.75)6/20

于是就有了下面的数据:

R00.10.20.30.40.50.60.70.80.91.0
P1.01.01.00.50.5710.5710.4550.375000
  • 于是可以计算出mAP值:

AP=111(1+1+1+0.5+0.571+0.571+0.455+0.375+0+0+0)=49.75%

  • PASCAL VOC 2010以后采用面积法: 假设真实目标数为M,recall取样间隔为[0, 1/M, …, M/M]=[0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]

  • 把各块面积加起来就是mAP值了:

mAP=0.125⋆1+(0.25−0.125)⋆1+(0.375−0.25)⋆0.5+(0.5−0.375)⋆0.571+(0.625−0.5)⋆0.455+(0.75−0.675)⋆0.375+(0.875−0.75)⋆0=48.7%

后处理方法NMS

1.目标检测的后处理方法主要用于优化检测结果,比如检测出来的各个目标有多个目标框怎么搞?

2.非极大值抑制(Non-maximum suppression, NMS)是目标框后处理方法,是非常重要的一个环节。

pred = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45, classes, agnostic_nms, max_det=max_det)

3.上图最终输出的目标框计算过程如下(按照类别各自分开处理):

  • 设定目标框置信度阈值,常用阈值0.5,小于该值的框会被过滤掉(conf_thres=0.25
  • 根据置信度降序排列候选框;
  • 选取置信度最高的框A添到输出列表,并将其从候选框列表中删除;
  • 候选框列表中所有框依次与A计算loU,删除大于IoU阈值的框( iou_thres=0.45)(找出不同类别的框);
  • 重复上述过程,直到候选框列表为空;
  • 输出列表就是最后留下的目标框;

检测速度

前传耗时

  • 单位ms,从输入图像到输出最终结果所消耗时间,包括前处理耗时(如图像归一化)、网络前传耗时、后处理耗时(如非极大值抑制)

FPS

  • Frames Per Second,每秒钟能处理的图像数量。

FLOPS

  • 浮点运算量,处理一张图像所需要的浮点运算数量,跟具体软硬件没有关系,可以公平地比较不同算法之间的检测速。

整体网络结构

  • 目标检测网络主要由Backbone、Neck、Head三块组成。

网络结构图

结构图内部展开:

  • Backbone network,即主干网络,是目标检测网络最为核心的部分;
  • Neck network,即颈部网络,主要对backbone输出的特征进行整合,常见的整合方式FPN(Feature Pyramid Network);
  • Detection head,即检测头,在特征之上进行预测,包括物体的类别和位置。

YOLO网络结构

ModelBackboneNeckHeadPrediction Loss
v1GoogLeNetNoneFC → 7×7×(5+5+20)MSE Loss
v2Darknet19Passthrough13×13×5×(5+20)MSE Loss
v3Darknet53FPN13×13×3×(5+80), 26×26×3×(5+80), 52×52×3×(5+80)MSE Loss
v4Darknet53_CSPSPP、FPN、PAN13×13×3×(5+80), 26×26×3×(5+80), 52×52×3×(5+80)CIoU Loss
v5Darknet53_CSPSPP, cspFPN, cspPAN13×13×3×(5+80), 26×26×3×(5+80), 52×52×3×(5+80)GIoU Loss

目标检测数据集

PASCAL VOC

共20类,主要用于目标检测。

VOC2007: 9963张图,24640个标注目标。

VOC2012: 23080图片,54900目标

https://www.kaggle.com/datasets/zaraks/pascal-voc-2007icon-default.png?t=O83Ahttps://www.kaggle.com/datasets/zaraks/pascal-voc-2007

  • 分类结构

可做项目 

  • 目标检测

  • 图像分割

  • 行为识别

  • 人体布局

MS COCO

MS COCO数据集,全称是Microsoft Common Objects in Context.

  • 80分类、20万个图像、超过50万目标标注。
  • 可用来图像识别、目标检测和分割等任务。
  • 数据集分为训练集、验证集和测试集。

http://www.kler.cn/a/465545.html

相关文章:

  • 【QED】kouki与阶乘之间的那些事?
  • 用python编写一个放烟花的小程序
  • 网络安全之高防IP的实时监控精准防护
  • 电商项目-基于ElasticSearch实现商品搜索功能(一)
  • python进阶06:MySQL
  • Mac M2基于MySQL 8.4.3搭建(伪)主从集群
  • 写好Prompt的一些原则总结
  • 【pytorch】现代循环神经网络-2
  • flutter 专题二十七 Flutter自动路由插件auto_route详解
  • 如何在 VSCode 中配置 C++ 开发环境:详细教程
  • Flutter Android修改应用名称、应用图片、应用启动画面
  • Redis Cluster集群模式
  • Java Web开发基础——Java Web项目的结构与组织
  • MCU+可编程逻辑:从Microchip、TI C2000到AG32
  • 使用 Docker 安装 Redis
  • 【C++笔记】红黑树(RBTree)深度剖析和AVL树的对比分析
  • 大数据-267 实时数仓 - ODS Lambda架构 Kappa架构 核心思想
  • cesium小知识:Geocoder 详解示例
  • Predicting Human Scanpaths in Visual Question Answering
  • JMeter + Grafana +InfluxDB性能监控 (一)
  • Servlet解析
  • Spring Boot + Redis + Sa-Token
  • 学英语学压测:01开源压测工具jmeter能干什么
  • GO:复用对象和协程资源
  • GPT与MBR之间的差异是什么?
  • Node Exporter常用Prometheus指标