『目标检测』目标检测 — 基础知识

文章目录

  • 一、目标检测方法分类
  • 二、经典前背景分离目标检测方法
    • 2.1 背景差分法
    • 2.2 帧差分法
    • 2.3 光流场法
  • 三、深度学习检测小目标的常用方法
  • 四、目标检测器的选择


一、目标检测方法分类

第一,已知目标的先验知识

在这种情况下检测目标有两类方法:
(1)用目标的先验知识训练一堆弱分类器,然后这些弱分类器一起投票来检测目标;
(2)根据先验知识找到目标和非目标的最佳划分线

第二,未知目标的先验知识

此时不知道要检测的目标是什么,于是什么是目标就有了不同的定义。
(1)检测场景中的显著目标,如通过一些特征表达出场景中每个像素的显著性概率,然后找到显著目标。
(2)检测场景当中的运动目标。

二、经典前背景分离目标检测方法

2.1 背景差分法

在检测运动目标时,如果背景是静止的,利用当前图像与预存的背景图像作差分,再利用阈值来检测运动区域的一种动态目标识别技术。

背景差分算法适用于背景已知的情况,但难点是如何自动获得长久的静态背景模型。

2.2 帧差分法

利用视频序列中连续的两帧或几帧图像的差来进行目标检测和提取。(较适合于动态变化场景)

在运动的检测过程中,该方法利用时间信息,通过比较图像中若干连续帧获得对应像素点的灰度差值,如果均大于一定的阈值T2,则可以判断该位置存在运动的目标。

2.3 光流场法

利用相邻两帧中对应像素的灰度保持原理来评估二维图像的变化。

能够较好的从背景中检测到相关前景目标,甚至是运动中的部分运动目标,适用于摄像机运动过程中相对运动目标的检测。

缺点: 开口问题、光流场约束方程的解的不唯一性问题。不能正确的表示实际的运动场。

三、深度学习检测小目标的常用方法

1. 传统的图像金字塔和多尺度滑动窗口检测

  • 在深度学习方法流行之前,对于不同尺度的目标,普遍使用将原图 build 出不同分辨率的图像金字塔,再对每层金字塔用固定输入分辨率的分类器在该层滑动来检测目标,以求在金字塔底部检测出小目标;或者只用一个原图,在原图上用不同分辨率的分类器来检测目标,以求在比较小的窗口分类器中检测到小目标。
  • 评价: 不过这种方式速度慢(虽然通常 build 图像金字塔可以使用卷积核分离加速或者直接简单粗暴地resize,但是还是需要做多次的特征提取),后面有人借鉴它的思想搞出了特征金字塔网络 FPN,它在不同层取特征进行融合,只需要一次前向计算,不需要缩放图片,也在小目标检测中得到了应用

2. 简单粗暴又可靠的Data Augmentation

  • 复制小目标到一张图的多个地方可以增加小目标匹配的 Anchor 框的个数,增加小目标的训练权重,减少网络对大目标的 bias。

3. 特征融合的FPN

  • 不同阶段的特征图对应的感受野不同,它们表达的信息抽象程度也不一样。
  • 浅层的特征图感受野小,比较适合检测小目标(要检测大目标,则其只“看”到了大目标的一部分,有效信息不够);
  • 深层的特征图感受野大,适合检测大目标(要检测小目标,则其”看“到了太多的背景噪音,冗余噪音太多)。
  • 特征金字塔网络 FPN:将不同阶段的特征图,都融合起来,来提升目标检测的性能。

4. 合适的训练方法 SNIP,SNIPER,SAN

  • 模型预训练的分布要尽可能地接近测试输入的分布。

5. 更稠密的 Anchor 采样和匹配策略 S3FD,FaceBoxes

  • 如果在数据集已经确定的情况下,也可以增加负责小目标的 Anchor 的设置策略来让训练时对小目标的学习更加充分。
  • 另外,对小目标的 Anchor 使用比较宽松的匹配策略(比如 IoU > 0.4)也是一个比较常用的手段。

6. 先生成放大特征再检测的 GAN

7. 利用 Context 信息的 Relation Network 和 PyramidBox

四、目标检测器的选择

  1. 如果需要检测的是小物体并且速度方面不作要求,倾向于使用 Faster R-CNN 算法;
  2. 如果速度是最重要的,倾向于使用 YOLO 算法;
  3. 如果需要一个平衡的表现,倾向于使用 SSD 算法;

你可能感兴趣的:(目标检测笔记)