目标检测简介-程序员宅基地

技术标签: 计算机视觉  目标检测  深度学习  

一.简介

目标检测的任务是找出图像中所有感兴趣的物体,确定它们的类别和位置。常见的基础任务分为三类:

  • 分类:判断图片或视频里面包含什么类别的目标
  • 定位:定位目标在图片中的位置
  • 检测:分类+定位,定位出这个目标的位置并判断出类别
  • 分割:分为实例分割和场景分割,判断每一个像素属于哪个

目标定位中,通常只有一个或数量固定的目标,而目标检测中出现的目标,种类和数量都不是固定的。因此目标检测比目标定位具有更大的挑战。与图像分类相比,目标检测不仅要识别图像中物体的类别,还要找到目标的位置,用矩形边界框来框选目标。目标检测方法分为两阶段目标检测单阶段目标检测方法。

1.目标检测核心问题

目标检测不仅要识别出图像的元素,还要用矩形框把目标框出来,一个图片上往往不止一个目标,并且还存在以下一些问题:

  • 目标可能出现在图像的任意位置
  • 目标可能有各种不同的大小
  • 目标可能有不同的形状

2.目标检测任务

获取图片中物体的类别和位置,即分类与定位。

物体位置,有两种表示方式:

  • (x,y,w,h):x,y是物体的中心点位置,w,h是中心点到物体宽高边界的距离。该方法叫做Bounding Box(bbox)

  • xmin,ymin,xmax,ymax:物体位置的左上角、右下角坐标

两种Bounding Box的名称:

  • Ground-Truth bounding box:图片当中真实标记的框
  • Predicted bounding box:预测时标记的框

二.评估指标

区域是从图像上截取的有可能包含目标的像素区域集合,边界框(Bounding Box)是指包含目标的矩形框。

1.IOU交并比

IOU(Intersection Over Union)用来衡量两个区域之间的重叠度,是从目标的位置角度进行考量。IOU的值为[0, 1],值越大表示目标预测越准确。

B g t B_{gt} Bgt 表示物体在图片中的真值边界框, B p B_p Bp 为模型预测的边界框,则IOU可表示为:
I O U = a r e a ( B p ∩ B g t ) a r e a ( B p ∪ B g t ) IOU=\frac{area(B_{p}\cap B_{gt})}{area(B_{p}\cup B_{gt})} IOU=area(BpBgt)area(BpBgt)
图像化表示为:

IOU代码实现:

import cv2
import numpy as np
'''
坐标轴方向
   ------X
  |
  |
  |
  Y
点的坐标 [x0,x1,x2,x3]
x0,x1----
  |      |
  |      |
  |      |
  -----x2,x3
'''

def iou_score(A,B):
    # 获取交集部分左上角LU点和右下角RD点的坐标
    # A,B哪个框的左上角坐标大,哪个就是LU
    # A,B哪个框的右下角坐标小,哪个就是RD
    LU_x = max(A[0],B[0])
    LU_y = max(A[1],B[1])
    RD_x = min(A[2],B[2])
    RD_y = min(A[3],B[3])
    # 计算交集部分的面积
    insertArea = max(0,RD_x-LU_x+1) * max(0,RD_y-LU_y+1)
    # 计算并集部分的面积
    aArea = (A[2]-A[0]+1)*(A[3]-A[1]+1)
    bArea = (B[2]-B[0]+1)*(B[3]-B[1]+1)
    unionArea = aArea+bArea-insertArea

    iou = insertArea/unionArea/1.0
    return iou


img = (np.ones((512,512,3))*255).astype(np.uint8)


A = [50,50,300,300]
B = [60,60,310,310]

cv2.rectangle(img,(A[0],A[1]),(A[2],A[3]),(0,255,0),5)
cv2.rectangle(img,(B[0],B[1]),(B[2],B[3]),(0,0,255),5)

iou = iou_score(A,B)
font = cv2.FONT_ITALIC
font_loc = (int((max(A[0],B[0])+min(A[2],B[2]))/2),int((max(A[1],B[1])+min(A[3],B[3]))/2))
cv2.putText(img,'IOU = %.2f'%iou, font_loc, font,0.9,(0,0,0),3)

cv2.imshow('image',img)
cv2.waitKey()
cv2.destroyAllWindows()

2.分类模型评估指标

假设有一个二分类模型,分类结果如下:

真实模型
True False
预测模型 Positive TP FP
Negative FN TN

T:True F:False P:Positive N:Negative

T、F代表该样本是否被正确分类,P、N代表该样本被预测为正样本还是负样本

TP(True Positives):样本为正样本,被预测为正样本,预测对了

TN(True Negatives):样本为负样本,被预测为负样本,预测对了

FP(False Positives):样本为负样本,被预测为正样本,预测错了

FN(False Negatives):样本为正样本,被预测为负样本,预测错了

分类模型最常用评估指标有以下4个,它们的值都在0-1之间,越大越好。

(1).准确率accuracy

表示所有预测结果中预测正确的结果占比。该指标适合数据均衡的情况下使用,在数据不均衡的情况下,该指标并不合适,此时应考虑精确率和召回率。
a c c u r a c y = T P + T N T P + T N + F N + F P accuracy=\frac{TP+TN}{TP+TN+FN+FP} accuracy=TP+TN+FN+FPTP+TN

(2).召回率recall

表示模型找到正例的能力,正样本被预测为正样本的数量 与 真实所有正样本的数量 之比。
r e c a l l = T P T P + F N recall=\frac{TP}{TP+FN} recall=TP+FNTP

(3).精确率precision

表示模型对于正例的判断能力,正样本被预测为正样本的数量 与 分类器认为是正样本的数量 之比。
p r e c i s i o n = T P T P + F P precision=\frac{TP}{TP+FP} precision=TP+FPTP

(4).F值

F = ( α 2 + 1 ) ∗ P ∗ R α 2 ∗ P + R F=\frac{(\alpha^2+1)*P*R}{\alpha^2*P+R} F=α2P+R(α2+1)PR

F值综合了P和R,可用于综合评价分类结果的质量,当 α = 1 \alpha=1 α=1时,被称为F1值。

(5).ROC和AUC

ROC(Receiver Operating Characteristics)和AUC(Area Under The Curve)是检查任何分类模型的最重要的评价指标之一,也可以写成AUROC(接收器工作特性下的面积)。AUC-ROC曲线是在不同阈值下分类问题的一种性能度量。ROC是概率曲线,AUC表示可分性的程度或度量。它告诉我们模型在多大程度上能够区分类别。AUC越高越好。RPC曲线用TPR(True Positive Rate)与FPR(False Positive Rate)绘制,具体步骤如下:

  • 假设共有N个样本
  • 模型对样本进行分类预测以后,每个样本都会得到一个置信度score
  • 将样本按照score降序排列
  • 计算每个样本的TP、TN、FP、FN
  • 计算每个样本的TPR和FPR

T P R = R e c a l l = T P T P + F N TPR=Recall=\frac{TP}{TP+FN} TPR=Recall=TP+FNTP

F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP
在这里插入图片描述

说明:

  • 横轴 FPR:FPR越大,预测正类中实际负类越多。

  • 纵轴 TPR:TPR越大,预测正类中实际正类越多。

  • 理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好。

  • 曲线面积即为AUC的值,介于0.1到1之间。

AUC计算工具:
sklearn.metrics.roc_auc_score(labels,preds,multi_class='ovo')
    multi_class 表示对类别不平衡是否敏感,'ovr'比较敏感,'ovo'不敏感

3.AP值

AP(Average Percision)表示平均精度,指的是所有图片内的具体某一类的PR曲线下的面积。具体计算方式如下:

  • 假设共有N个样本,其中有M个正样本
  • 模型对样本进行分类预测以后,每个样本都会得到一个置信度score
  • 将样本按照score降序排列
  • 对于每个recall的值,取该recall阈值时top-n所对应的最大精确率precision
  • 此时获得M对(recall, precision)值,根据这些值绘制曲线,取名为PR曲线
  • PR曲线的面积即为该类的AP值

示例

假设现有10张图像来进行目标检测,每张图像都有事先标记好的GT,每张图像上类别和目标可以有多个,不过AP是指所有图像中具体的某一类PR面积。10张图片都是动物图像,现在我们只关注猫这一类,10张图像上共有12只真实的猫。经过算法预测,每张图像都会得到相应的猫的预测框和置信度。将10张图像根据置信度降序进行排列(得分为0的剔除),再计算出每张图像的TP、FP、FN,得到了如下的结果:

ImgID Score TP FP FN
2 0.9 1 0 0
10 0.8 1 0 0
5 0.8 1 0 0
9 0.7 1 0 0
7 0.7 0 1 0
4 0.7 1 0 0
3 0.6 1 0 0
1 0.6 0 1 0
8 0.5 0 1 0
2 0.4 0 1 0

(同一张图像上可能有多个猫,所以会出现同一张图像多个置信度得分的情况)

进一步计算精确率和召回率如下:

ImgID Precision Recall Max Precision for any Recall
2 1/(1+0)=1 1/12=0.083 1
10 2/(2+0)=1 2/12=0.167 1
5 3/(3+0)=1 3/12=0.250 1
9 4/(4+0)=1 4/12=0333
7 4/(4+1)=0.8 4/12=0.333 1
4 5/(5+1)=0.833 5/12=0.417 0.833
3 6/(6+1)=0.857 6/12=0.5 0.857
1 6/(6+2)=0.75 6/12=0.5
8 6/(6+3)=0.667 6/12=0.5
2 6/(6+4)=0.6 6/12=0.5

绘制PR曲线:
在这里插入图片描述

A P = ( 0.333 − 0 ) ∗ 1 + ( 0.5 − 0.333 ) ∗ 0.857 = 0.476 AP = (0.333-0)*1+(0.5-0.333)*0.857=0.476 AP=(0.3330)1+(0.50.333)0.857=0.476

4.mAP平均精确率

mAP(mean average precision)是目标检测中度量识别精度的指标,是从分类准确与否的角度进行考量。多个类别目标检测中,每一个类别都可以根据查全率(即召回率)和查准率(即精确率)绘制P-R曲线,横坐标为查全率,纵坐标为查准率,AP值就是该曲线下的面积,而mAP就是多个类别AP的平均值。假如在上面AP的示例中,除了猫,还有狗、老虎等共C类目标,那么mAP的值的公式为:
m A P = ∑ i = 1 C A P i C mAP=\frac{\sum_{i=1}^{C}AP_i}{C} mAP=Ci=1CAPi

三.算法分类

1.两阶段目标检测方法

两阶段目标检测是基于候选区域的检测方法,采用“粗检测+精修”的流程,第一步是从图像中提取深度特征并计算候选区域,第二步是对每个候选区域进行定位(包括分类和回归)。虽然该系列检测精度较高,但在速度上较差。

(1).R-CNN

  2013年以前,目标检测大都基于手工提取特征的方法,人们大多通过在低层特征表达的基础上,构建复杂的模型及多模型集成来缓慢地提升检测精度。当CNN在2012年的ILSVRC图像分类项目上大放异彩时,人们发现CNN能够学习鲁棒性非常强且具有一定表达能力的特征表示,于是在2014年,Girshick等人提出了**R-CNN:区域卷积神经网络目标检测(regions with CNN features)**模型。自此目标检测的研究速度前所未有的提升。

  R-CNN首先在图像中选取候选区域,接着将每个候选区域送入CNN来提取特征,使用SVM将得到的特征分类,最后进行边界框的回归预测。它的优点在于将深度学习引入了目标检测,并将 Pascal VOC 2007数据集上的mAP由之前最好的35.1%提升到66.0%。缺点在于当R-CNN将候选区域送入CNN时,卷积层后全连接层的输入尺寸和输出尺寸是固定的,因此CNN也需要固定的输入尺寸,这就导致输入图像的大小不能任意调节。此外,由于候选区域可能经常重叠,将每个候选区域都送了CNN的方法会造成大量的重复计算。

(2).SPP -Net

  针对R-CNN的缺点,何凯明等人在2014年提出了SPP-Net:空间金字塔池化网络(spatial pyramid pooling networks),SPP层的每个池化过滤器都会根据输入的内容调整自身的大小,而SPP层的输出尺寸是固定的,这样就解决了图像大小不能调节的问题。同时SPP-Net只对原图进行一系列卷积操作,从而得到整幅图的特征图,然后找到每个候选框在特征图上的映射区域,将此区域作为每个候选框的卷积特征并输入SPP层和之后的层,节省了大量的计算时间。

(3).Fast R-CNN

2015年,Girshick等人在R-CNN的基础上提出了进阶版的Fast R-CNN,它使用与SPP层类似的感兴趣区域RoI池化层,通过将提取特征之后的分类步骤和边界框回归步骤添加到深度网络中进行同步训练。

与R-CNN的多阶段训练相比,Fast R-CNN的训练更加简洁、省时、省空间。Fast R-CNN的训练速度是R-CNN的9倍,检测速度是R-CNN 的200倍,并将 Pascal VOC 2007数据集上的mAP由之前的66.0%提升至70.0%。虽然Fast R-CNN在速度和精度上都有显著提升,但它需要事先使用外部算法来提取目标候选框。

(4).Faster R-CNN

在Fast R-CNN被提出不久后,Shaoqing Ren等人很快提出了Faster R-CNN模型,将提取目标候选框的步骤整合到深度网络中,Faster R-CNN是第一个真正意义上的端到端的深度学习目标检测算法,也是第一个准实时的深度学习目标检测算法,并将 Pascal VOC 2007数据集上的mAP由之前的70.0%提升至78.8%。

Faster R-CNN最大的创新在于设计了RPN:区域候选网络(region proposal network)。在2016年,Jifeng Dai等人提出了R-FCN:基于区域的全卷积网络(region based fully convolutional networks)模型,引入位置敏感的RoI池化,从而进一步提高检测的精度。

2.单阶段目标检测方法

为了使目标检测满足实时性要求,人们提出了单阶段目标检测方法,在该种方法中,不再采用“粗检测+精修”的流程,而采用“锚点+修正”的方法。这类方法只进行一次前馈网络计算,速度非常快,能达到实时效果。

(1).YOLO

2015年,Joseph和Girshick等人提出了一个仅通过一次前向传导的目标检测**YOLO(you only look once)**模型。它的优点是速度达到了45帧每秒,但缺点是网络能够检测的目标数量固定、小目标检测效果较差。

(2).SSD

Wei Liu等人在2015提出了SSD方法,该方法吸收了YOLO的快速检测思想,结合力Faster R-CNN的优点,并改善了多尺寸目标的处理方式。由于不同卷积层所包含特征的尺寸不同,SSD可以通过综合多个卷积层的检测结果来检测不同尺寸的目标。SSD使用3x3的卷积取代YOLO中的全连接层,对不同尺寸和长宽比的 default box 进行目标分类与边界框回归。SSD速度达到了58帧每秒,以及接近Faster R-CNN 的检测性能。

(3).FPN

2016年年底,Tsung-Yi Lin等人提出了FPN:特征金字塔(feature pyramid networks),FPN既可以和单阶段目标检测方法融合,也可以和两阶段目标检测方法融合。之前的特征检测方法大都是取语义信息丰富的高层卷积特征来做预测,但高层特征会导致损失一些细节信息,而且目标位置不够明确。FPN融合多层特征,综合高层、低分辨率、强语义信息及低层、高分辨率、弱语义信息,提高了网络对小目标检测的处理能力。FPN与SSD一样可以在不同的层中独立进行预测, 但多了一个上采样的过程,这使得高层特征能与低层特征融合。

(4).YOLO v2

同样在2016年年底,YOLO推出了升级版YOLO v2。在YOLO v2中,每个卷积层后添加了批标准化,提高了收敛速度,同时去掉了网络中的全连接层。

(5).RetinaNet

虽然单阶段目标检测方法在检测速度上明显高于两阶段目标检测方法,但在检测精度上,单阶段方法一直略逊于两阶段方法。Tsung-Yi Lin等人认为其原因是,单阶段方法会面临极端不平衡的目标–背景数据分布,两阶段方法可以通过候选区域过滤掉大部分背景区域,但单阶段方法需要直接面对类别的不平衡。Tsung-Yi Lin等人在2017年提出了RetianNet检测模型,通过改进经典的交叉熵损失函数,提出了聚焦损失(focal loss)函数,降低了网络训练过程中简单背景样本的学习权重。该模型可以实现对困难样本的“聚焦”和对网络学习能力的重新分配,从而使简单单阶段目标检测模型的检测速度和精度全面超过了两阶段目标检测模型。

(6).RefineDet

2017年年底,Shifeng Zhang等人提出了RefineDet模型。该模型针对SSD中存在的不平衡目标–背景数据分布问题,结合两阶段目标检测方法中过滤背景区域的优点,提出了ARM:锚框改进模型(anchor refinement module)和目标检测模块ODM:目标检测模块(object detection module)以及同于串联二者的TCB:转换连接模块(transfer connection block)

(7).YOLO v3

2018年年初,YOLO v3版本出现,用多个独立的分类器代替softmax函数,用类似金字塔网络的方法进行多尺寸预测。在此之前,各中目标检测算法都被一个问题困扰–如何检测两个距离很近的物体。绝大多数模型会将传入的数据调整到一个更低的分辨率,对这种情况给出一个目标框。YOLO v3用sigmoid函数代替softmax函数主要考虑的因素就是 softmax函数给每个边界框分配一个类别,而使用多个独立的分类器可以针对同一个边界框预测多个类别。

(8).更多YOLO版本

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_63462829/article/details/128719792

智能推荐

配置WAMP的虚拟主机_options +indexes +includes +followsymlinks +multiv-程序员宅基地

文章浏览阅读411次。1. 修改httpd.conf去掉#Include conf/extra/httpd-vhosts.conf前面的#,启用虚拟主机功能2.修改httpd-vhost.conf在原有的 ## ServerName localhost# DocumentRoot d:/wamp64/www# # Options +Indexes +Includes +FollowS_options +indexes +includes +followsymlinks +multiviews allowoverride all

小程序如何设置资源的防盗链 — 随笔小记-程序员宅基地

文章浏览阅读828次,点赞2次,收藏2次。做过前端,或对小程序有些了解的同学都知道,小程序是没有域名访问概念的,访问的路径都是以:“/pages/index”、“/pages/my”这种方式进行页面跳转的。域的概念从何而来?事情是这样的,前段时间突然冒出个想法,大家上下班,有些人离公司比较远,回家路上/地铁上,可能都会比较无聊,看看新闻、听听音乐啥的。但是对于IT行业的程序员们来说,入了IT领域就意味着,永远有学不完的东西,经常就有看..._微信小程序防盗链image设置白名单

英语-托福英语学习(单词一)-程序员宅基地

文章浏览阅读36次。sole adj.唯一的;独有的;单独的; n.脚底, 鞋底; 袜底; v.装鞋底;solely adv.单独;  along 强调一种孤独感  solely强调独自consequently adv.所以, 因此, 结果;  thus, therefore都是”所以“的意思, consequently虽然也是“所以”但使用时前面没必要加since, 只需给出原因就行  co...

MATLAB 成绩排序_某班同学成绩已经存放在矩阵a中,每行为某一位同学的数据,第1列为学号,第2列至第4-程序员宅基地

文章浏览阅读2.2k次。题目描述已知成绩表形成一个矩阵A,第1列为学号,第2列~第4列分别为数学、语文、英语成绩现要求完成统计,按指定的排列方式进行输出。输入1,对应数学降序输出输入2,对应语文降序输出输入3,对应英语降序输出输入4,对应总分降序输出A矩阵为:1700201 98 86 831700202 85 90 781700203 92 78 951700204 88 88 851700205 78 95 88输入一行整数,表述_某班同学成绩已经存放在矩阵a中,每行为某一位同学的数据,第1列为学号,第2列至第4

EnvironmentNotWritableError: The current user does not have write permissions to the target environm_pycharmenvironmentnotwritableerror: the current us-程序员宅基地

文章浏览阅读2.5w次,点赞21次,收藏32次。EnvironmentNotWritableError: The current user does not have write permissions to the target environment. environment location: C:\ProgramData\Anaconda3\envs\pythonProjectEnvironmentNotWritableError: The current user does not have write permissions to ._pycharmenvironmentnotwritableerror: the current user does not have write per

Python模块导入出现ModuleNotFoundError: No module named ‘***’解决方法_python导入no module named 'fastbot-程序员宅基地

文章浏览阅读873次。Python模块导入出现ModuleNotFoundError: No module named ‘***’解决方法_python导入no module named 'fastbot

随便推点

记SQL server安装后无法连接127.0.0.1解决方法_sqlserver 127 0 01 无法连接-程序员宅基地

文章浏览阅读6.3k次,点赞4次,收藏9次。实训时需要安装SQL server2008 R所以我上网上找了一个.exe 的安装包链接:https://pan.baidu.com/s/1_FkhB8XJy3Js_rFADhdtmA提取码:ztki注:解压后1.04G安装时Microsoft需下载.NET,更新安装后会自动安装如下:点击第一个傻瓜式安装,唯一注意的是在修改路径的时候如下不可修改:到安装实例的时候就可以修改啦数据..._sqlserver 127 0 01 无法连接

js 获取对象的所有key值,用来遍历_js 遍历对象的key-程序员宅基地

文章浏览阅读7.4k次。1. Object.keys(item); 获取到了key之后就可以遍历的时候直接使用这个进行遍历所有的key跟valuevar infoItem={ name:'xiaowu', age:'18',}//的出来的keys就是[name,age]var keys=Object.keys(infoItem);2. 通常用于以下实力中 <div *ngFor="let item of keys"> <div>{{item}}.._js 遍历对象的key

粒子群算法(PSO)求解路径规划_粒子群算法路径规划-程序员宅基地

文章浏览阅读2.2w次,点赞51次,收藏310次。粒子群算法求解路径规划路径规划问题描述    给定环境信息,如果该环境内有障碍物,寻求起始点到目标点的最短路径, 并且路径不能与障碍物相交,如图 1.1.1 所示。1.2 粒子群算法求解1.2.1 求解思路    粒子群优化算法(PSO),粒子群中的每一个粒子都代表一个问题的可能解, 通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。    在路径规划中,我们将每一条路径规划为一个粒子,每个粒子群群有 n 个粒 子,即有 n 条路径,同时,每个粒子又有 m 个染色体,即中间过渡点的_粒子群算法路径规划

量化评价:稳健的业绩评价指标_rar 海龟-程序员宅基地

文章浏览阅读353次。所谓稳健的评估指标,是指在评估的过程中数据的轻微变化并不会显著的影响一个统计指标。而不稳健的评估指标则相反,在对交易系统进行回测时,参数值的轻微变化会带来不稳健指标的大幅变化。对于不稳健的评估指标,任何对数据有影响的因素都会对测试结果产生过大的影响,这很容易导致数据过拟合。_rar 海龟

IAP在ARM Cortex-M3微控制器实现原理_value line devices connectivity line devices-程序员宅基地

文章浏览阅读607次,点赞2次,收藏7次。–基于STM32F103ZET6的UART通讯实现一、什么是IAP,为什么要IAPIAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给_value line devices connectivity line devices

alsa buffer原理_音视频 | alsa的使用-程序员宅基地

文章浏览阅读834次。概述ALSA(Advanced Linux Sound Architecture )高级Linux声音体系结构,是linux主流的音频体系结构,为 Linux 系统提供了统一的音频和MIDI功能和驱动,提供一个称为libasound的API库供开发者使用。参考网址:http://www.alsa-project.org术语声音是由变化的气压组成,被麦克风这样的转换器转换成电子连续模拟量,...