什么是目标检测
目标检测是指从图像中找出目标,包括检测和识别两个过程,现实中由于环境的复杂性以及各类物体的形状、外观以及光照,遮挡等因素的干扰,所以目标检测一直也是计算机视觉最常见的挑战之一。目标检测的应用
目标检测与识别应用于多个领域,在实际生活中应用也越来越广泛,例如目标跟踪,视频监控,信息安全,自动驾驶,图像检索,医学图像分析,网络数据挖掘,无人机导航,遥感图像分析,国防系统等。传统目标检测方法
传统的目标检测与识别方法主要可以表示为: 区域选择->特征提取->分类器。 即首先在给定的图像上选择一些候选的区域,然后对这些区域提取特征,最后使用训练的分类器进行分类。 下面我们对这三个阶段分别进行介绍,如下图所示:区域选择
特征提取
分类器
NMS(非极大值抑制)
我们可以看到,由于滑动窗口,同一个人可能有好几个框(每一个框都带有一个分类器得分),但是我们肯定是想得到一个最优的框。
于是我们就要用到非极大值抑制,来抑制那些冗余的框: 抑制的过程是一个迭代-遍历-消除的过程。
将所有框的得分排序,选中最高分及其对应的框:
遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。
从未处理的框中继续选一个得分最高的,重复上述过程。
下面是Python代码中NMS实现
import cv2picked_boxes, picked_score = nms(bounding_boxes, confidence_score, threshold)cv2.imshow(
viola-jones(人脸检测)
viola-jones算法分为以下几个部分
Haar特征抽取
训练人脸分类器利用Adaboost算法进行训练
滑动窗口
haar特征
Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用 黑色矩形像素和 减去 白色矩形像素和来表示这个模版的特征值。例如:脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。HOG+SVM(行人检测)
HOG+SVM算法分为以下几个部分
提取HOG特征
训练SVM分类器
利用滑动窗口提取目标区域,进行分类判断
NMS
输出结果
HOG特征:
灰度化 + Gamma变换
计算梯度map
图像划分成小的cell,统计每个cell直方图
多个cell组成一个block,特征归一化
多个block串联,并归一化
SVM
支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。DMP(物体检测)
DPM是一个非常成功的目标检测算法,DPM可以看做是HOG(Histograms of Oriented Gradients)的扩展,大体思路与HOG一致。先计算梯度方向直方图,然后用SVM(Surpport Vector Machine )训练得到物体的梯度模型。
dmp算法分为以下几个部分:
计算DMP特征图
计算响应图
Latent SVM分类器训练
检测识别
深度学习目标检测方法
基于深度学习的目标检测与识别成为主流方法,主要可以表示为:图像的深度特征提取->基于深度神经网络的目标识别与定位,其中主要用到深度神经网络模型是卷积神经网络CNN。Two-stage
先进行区域建议框(Region Proposal, RP)的生成,再通过卷积神经网络进行分类。
步骤:特征提取 → 生成RP → 分类/回归。
常见的two stage目标检测算法:R-CNN、Spp-Net、Fast R-CNN、Faster R-CNN和R-FCN等。
One-stage
直接提取特征来预测物体类别和位置。
步骤:特征提取 → 分类/回归。
常见的one stage目标检测算法有:OverFeat、YOLO系列、SSD和RetinaNet。
本片文章简单的介绍了一下目标检测中常用的算法,后面会针对常用算法进行详细的介绍。