CV-目标检测总结

目标检测总结

  • 目标检测
    • 常用数据集
    • 指标
  • 目标检测器组成部分
    • backbone架构
    • 检测器
      • 传统检测方法
      • 双阶段检测器
      • 单阶段检测器
      • Anchor Free

目标检测

论文:A Survey of Modern Deep Learning based Object Detection Models
目标检测:在图像或视频中,找到目标位置并进行分类。其需要识别并定位视野中某个目标的所有实例,即目标检测目的是检测出图像中所有实例的类别,并用一个轴对齐的矩形框大致给出实例的位置。
在早期,目标检测模型是通过集成一系列手工设计的特征提取器来构造的,但这些模型速度慢、精度低、跨域性能差。近年来,基于CNNs的目标检测模型改变了视觉领域的格局。
目标检测中的挑战

  • 类内变换:自然场景中,统一对象的不同实例之间出现类内变化是常见的,例如:遮挡、光照、姿态、视角等。这些不受约束的外在因素会对目标的外观产生剧烈变换,因此,目标可能会由非刚性形变或旋转、缩放、模糊等变化,而且一些目标可能在环境中不显著,导致其提取变得困难。
  • 类别数量:可用的目标种类绝对数量过少,因此需要高质量的标注数据。利用少样本训练检测器是一个待研究的问题
  • 效率问题:模型需要大量的计算资源来生成准确的检测结果,但在移动或边缘设备上,计算效率更为关键。

常用数据集

PASCAL VOC 07/12
CV-目标检测总结_第1张图片

  • VOC2007有5K个训练图像以及超过12K的标注目标;
  • VOC2012有11K个训练图像并拥有超过27K个标注目标,目标类别也扩展到20类,同时增加了语义分割、动作识别等任务
    ILSVRC
    ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
    包含1000个类别,超过100万个图像,其中精选了200个类别、超500K个图像被用于目标检测。
    MS-COCO
    The Microsoft Common Objects in Context(MS-COCO)包含超过200万个实例,且平均每张图像中有3.5个类别、7.7个实例,也包含了多种视角的图像。
    Open Image
    谷歌的Open Image数据集由920万张图像组成,使用图像级标签、对象边界框和分割掩码等进行标注。

数据倾斜/偏差问题
在上述数据集中,除了少数类别的图片数量很多,其他类别的图片数量很少,而且极个别类别的图片数量极少,成长尾分布。这种现象是数据的倾斜问题,并且在目标检测模型训练过程中会产生一种偏差。即对于训练数据中图像数量较多的类,模型可以得到有效训练并表现出更好的检测性能;但对于训练数据中图像数量较少的类,模型无法有效训练并表现出较差的检测性能。

指标

目标检测器常用评价指标:FPS、precision、recall以及常用的mAP。
precision由IOU推导出来,IOU为预测边框和GT之间的交并比。通过设定一个IOU阈值来判断检测结果是否正确,即当IOU大于阈值时,该结果分类为TP(True Positive);当小于阈值时,该结果分类为FP(False Positive)。当模型没有检测出GT中存在的目标时,这些目标分类为FN(False Negative)。
CV-目标检测总结_第2张图片

average precision(AP)是每一类的平均精度。将所有类的AP取平均,即可得到mAP。
IOU(交并比)
IOU=两个矩形框相交的面积/两个矩形框相并的面积。
CV-目标检测总结_第3张图片

"""
param rec1: [x0, y0, x1, y1] (左上角,右下角)
param rec2: [x0, y0, x1, y1]
"""
rec1 = [x0, y0, x1, y1]
rec2 = [x0, y0, x1, y1]
# 计算各框的面积
S_rec1 = (rec1[2]-rec1[0]) * (rec1[3] - rec1[1])
S_rec2 = (rec2[2]-rec2[0]) * (rec2[3] - rec2[1])

# 计算总面积
sum_area = S_rec1 + S_rec2

# 计算相并的面积
left_line = max(rec1[0], rec2[0])
right_line = min(rec1[2], rec2[2])
top_line = max(rec1[1], rec2[1])
bottom_line = min(rec1[3],rec2[3])

# 判断是否存在相并区域
if left_line >= right_line or top_line >= bottom_line:
	intersect = 0
else:
	intersect = (right_line - left_line) * (bootom_line - top_line)
	
IOU = (intersect / (sum_area - intersect)) * 1.0 

TP TN FP FN
混淆矩阵:
CV-目标检测总结_第4张图片

  • precision 精确率
    在这里插入图片描述
    TP+FP:模型预测的全体positive,即预测的正类数目。
    TP:模型正确预测正例的数目
    即P表示预测正确图片的个数占总的正类预测个数的比例。

  • recall 查全率
    在这里插入图片描述
    TP+FN:模型预测正确的数目(包括正例和负例)
    TP:模型正确预测正例的数目
    即R表示正类被预测的数目占全体正确预测数目的比例。

  • F1-score
    CV-目标检测总结_第5张图片
    F1值是precision和recall的调和平均值,旨在尽可能提高precision和recall的同时,也希望二者之间的差异尽可能小。

  • PR曲线
    P-R曲线是精确率 VS 召回率的曲线,即以recall为横坐标,precision为纵坐标。

  • AP (average precision)
    AP是平均精准度,即对PR曲线上precision值求平均值。
    在这里插入图片描述

  • mAP
    AP值在所有类别下的均值

  • TPR FPR
    TPR:在所有实际为阳性样本中,被正确判断为阳性比率。(召回率)
    FRP:假阳性,在所有实际为阴性的样本中,被错误地判断为阳性的比率。
    CV-目标检测总结_第6张图片

  • ROC曲线
    FPR为横轴,TPR为纵轴,得到ROC曲线。

  • AUC曲线
    AUC被定义为ROC曲线下与坐标轴围成的面积(不大于1),AUC越接近1,模型性能越好。AUC代表着模型预测正例大于预测负类的概率

目标检测器组成部分

一个目标检测器包括两部分:backbone架构和检测器。

backbone架构

backbone架构是对输入图像进行特征提取,常利用图像分类网络作为backbone。
例如:AlexNet、VGG、GoogleNet、ResNet、ResNeXt、CSPNet、EfficientNet。

检测器

传统检测方法

Viola-Jones
用于人脸检测中,常用于检测人的正面脸相,对于侧脸图像效果不是很稳健。
算法步骤:

  1. 利用Haar特征描述人脸特征
  2. 建立积分图像,利用该图像快速获取几种不同的矩形特征
  3. 利用Adaboost算法进行训练
  4. 建立层级分类器
  5. 非极大值抑制

Histogram of Oriented Gradients(HOG)
HOG:方向梯度直方图特征,一种可以快速描述物体局部梯度特征的描述子。
HOG首先将窗口划分成若干个块,然后把每一块中划分若干个元胞,再统计每个元胞内部的梯度方向直方图作为该元胞的特征向量,接着把每一个元胞的特征向量相连接作为一个块的特征向量,最后把块的特征向量相连接,即为该窗口的HOG特征描述子
CV-目标检测总结_第7张图片

Deformable Parts Model(DPM)
DPM可以看作HOG的扩展,大体思路与HOG一致。
DPM采用分而治之的策略,利用目标的个别部分进行检测,即在推理阶段,目标的各个部分被单独检测,它们的一个可能的排列被标记为检测结果。利用多个模型,一个模型将被指定捕捉整个图像的一部分,并对所有这些部分重复这个过程,然后,另一个模型移除那些不可能的组合,来生成最终检测。

双阶段检测器

第一阶段网络用于候选区域提取;第二阶段对提取的候选区域进行分类和精确坐标回归。
例如:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、FPN、R-FCN、Mask R-CNN、DetectoRS

单阶段检测器

只利用一级网络来完成分类和回归这两个任务。
例如:YOLO系列、SSD、RetinaNet、CenterNet、EfficientDet、Swin Transformer。

Anchor Free

取消anchor生成机制,加快速度。
例如CenterNet、CornerNet、 Fcos

你可能感兴趣的:(CV-图像处理,c++,开发语言,后端)