- 深度学习和传统目标检测的区别
- 1-stage 目标检测和 2-stage 目标检测
- anchor-based 和 anchor-free 目标检测
- 典型模型简介
相关论文:
Li Liu et al.: Deep Learning for Generic Object Detection: A Survey
深度学习和传统目标检测的区别
目标检测解决的是(图片)数据中有什么,在哪里的问题,也就是分类,定位,和确定范围,可以由confidence置信度,中心位置坐标 x,y和范围 w, h表示结果。
如上图所示,很难确定由哪些特征来决定结果,传统的目标检测方法会手工设定一些比如Haar-like特征:
这些基本的黑白块对于人脸很高效,但是不通用
而深度学习是由AI自己学习目标的特征。以下面的LeNet为例, 用卷积核(检测器)遍历图片,每个卷积核生成一张特征图,再在特征图上接着重复池化卷积,提取到的就是越来越高级的特征(特征图的特征),最后用全连接网络作为分类器输出10个置信度confidence(0~9)。
1-stage 目标检测和 2-stage 目标检测
虽然深度神经网络很善于从处理高维数据提取特征,但是对于五花八门的真实照片来说还是很困难。目前同时期比较精确的方法都是2-stage两步:
- 先找出可能存在目标的候选框 Regional Proposal,筛选掉了大部分背景无用的特征
- 逐个对候选框 区域内的特征 进行分类
这样做本质上就是先解决了可能在哪里的问题,然后再考虑是什么,和具体的位置范围。2-stage 确实准确率更高,但是一张图片的候选框多达上千个,所以没有这个步骤的1-stage要快很多,两种方法其实是在速度和精度上做取舍。
anchor-base 和anchor-free
另外目标检测又可以分为anchor-based 和 anchor-free的, Anchor 是锚的意思,最早出现在Faster RCNN 中,用来生成锚框,和候选区是可能存在目标的区域不同,锚框是相对锚点设置的一系列固定的,不同尺度和长宽比的框,也就是说是跟具体图片没有关系。
anchor 也是用来辅助分类的, 请想象任何一个模型,原图是海底, 上边我们层层的特征图组成海洋(不同尺寸), 从海面丢下锚,虽然我们锚和特征图上绑定在一起,但是锚框的位置信息 (mx,my,mw,mh) 是对应在原图上的,我们学习的其实是锚框和标准答案Ground Truth之间平移和缩放的关系。而多个锚框的设置使得挨得很近的多个目标也能被捕捉到。相对于让模型直接学习(x,y,w,h),学习关于锚框的offset就要更轻松一些。
可是锚框的各种参数设置又很麻烦了,有违我们一切交给AI的主旨,近两年也出现了很多很多Anchor-free的方法,比如逐个像素处理的FCOS,预测Bbox两个角的CornerNet和预测两个角加中心点的CenterNet等等。
经典检测框架
好啦!大部分目标检测就这么回事啦 ,具体方法都可以用两两组合来概述了。
在具体讲模型之前, 这里先介绍神经网络模型相关的三个词:
backbone 主干网络, 用于提取特征,
head 头,负责检测,
neck 颈, 顾名思义是衔接特征和检测的部分。
接下来长图预警!