目标检测(Object Detection)
本文为课程研讨需要,对目标检测算法进行理论学习,无实战内容,欢迎交流探讨
一、目标检测的基本概念
(一)什么是目标检测
目标检测(Object Detection) 的任务是找出图像中所有感兴趣的目标(物体),不同于分类和回归问题,目标检测还需要确定目标在图像中的位置 (定位),而确定识别目标的类别和位置 (分类和定位),是计算机视觉领域的核心问题之一。
(二)目标检测的任务
计算机视觉中关于图像识别有四大类任务:
(1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
(2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。
(3)检测-Detection:解决“在哪里?是什么?”的问题,即定位出这个目标的位置并且知道目标物是什么。
(4)分割-Segmentation:解决“每一个像素属于哪个目标物或场景”的问题。从像素级别回答了“在哪里?是什么”的问题
(如下图)
(三)目标检测算法分类
1、传统目标检测算法
具体参考:常见经典目标检测算法
不同于现在的卷积神经网络可以自动提取高效特征进行图像表示,以往的传统目标检测算法主要基于手工提取特征。
传统检测算法流程可概括如下:
1)选取感兴趣区域,选取可能包含物体的区域
2)对可能包含物体的区域进行特征提取
3)对提取的特征进行检测分类
传统检测算法局限性:
基于手工提取特征的传统目标检测算法主要有以下三个缺点:
1)识别效果不够好,准确率不高
2)计算量较大,运算速度慢
3)可能产生多个正确识别的结果
(1) Viola Jones Detector
VJ (Viola Jones)检测器采用滑动窗口的方式以检查目标是否存在窗口之中,该检测器看起来似乎很简单稳定,但由于计算量庞大导致时间复杂度极高,为了解决该项问题,检测器通过合并三项技术极大提高了检测速度,这三项技术分别是:
1)特征的快速计算方法——积分图;
2)有效的分类器学习方法——AdaBoost;
3)高效的分类策略——级联结构的设计。
(2)HOG Detector
HOG(Histogram of Oriented Gradients)检测器于2005年提出,是当时尺度特征不变性(Scale Invariant Feature Transform)和形状上下文(Shape Contexts)的重要改进,为了平衡特征不变性(包括平移,尺度,光照等)和非线性(区分不同的对象类别),通过在均匀间隔单元的密集网格上计算重叠的局部对比度归一化来提高检测准确性,因此检测器是基于本地像素块进行特征直方图提取的一种算法,它在目标局部变形和受光照影响下都有很好的稳定性。为后期很多检测方法奠定了重要基础,相关技术被广泛应用于计算机视觉各大应用。
(3)DPM Detector
作为VOC 2007-2009目标检测挑战赛的冠军,DPM(Deformable Parts Model)是目标检测传统算法中当之无愧的SOTA(State Of The Art)算法。于2008年提出,作了很多改进,因此该算法可以看作的延申算法。算法由一个主过滤器(Root-filter)和多个辅过滤器(Part-filters)组成,通过硬负挖掘(Hard negative mining),边框回归(Bounding box regression)和上下文启动(Context priming)技术改进检测精度。作为传统目标检测算法的SOTA,方法运算速度快,能够适应物体形变,但它无法适应大幅度的旋转,因此稳定性差。
2、基于深度学习的目标检测算法
基于手工提取特征的传统目标检测算法进展缓慢,性能低下。直到2012年卷积神经网络(Convolutional Neural Networks, CNNs)的兴起将目标检测领域推向了新的台阶。基于CNNs的目标检测算法主要有两条技术发展路线:Anchor-Based和Anchor-Free方法,其区别是是否使用Anchor进行训练和预测;Anchor-based方法则包括一阶段和二阶段检测算法,二阶段目标检测算法一般比一阶段精度要高,但一阶段检测算法速度会更快,Anchor-Free算法近几年逐步完善。
(1)Two Stage
先进行区域生成,该区域称之为region proposal(简称RP,一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。
任务流程:特征提取 --> 生成RP --> 分类/定位回归。
常见two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。
(2)One Stage
不用RP,直接在网络中提取特征来预测物体分类和位置。
任务流程:特征提取–> 分类/定位回归。
常见的one stage目标检测算法有:OverFeat、YOLO系列、SSD和RetinaNet等。