目录
前言
传统目标检测
基于“Region proposal”的目标检测算法
基于深度学习的目标检测算法
OverFeat
R-CNN: R-CNN系列的开山之作
Fast R-CNN: 共享卷积运算
Faster R-CNN: 两阶段模型的深度化
图像分类,检测及分割是计算机视觉领域的三大任务。即图像理解的三个层次:
普通的深度学习监督算法主要用来做分类,分类的目标是识别出下图中左一是一只猫。而在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛以及实际的应用中,还包括目标定位和目标检测等任务。其中目标定位是不仅仅要识别出来是什么物体(即分类),而且还要预测物体的位置,位置一般用边框(bounding box)标记,如下图左二所示。而目标检测实质是多目标的定位,即要在图片中定位多个目标物体,包括分类和定位。如下图左三,得到的结果是几只不同的动物,他们的位置如下图左三中不同颜色的框所示。最后一张图即分割。
简单来说,分类、定位和检测的区别如下:
目标检测对于人类来说并不困难,通过对图片中不同颜色模块的感知很容易定位并分类出其中目标物体,但对于计算机来说,面对的是RGB像素矩阵,很难从图像中直接得到狗和猫这样的抽象概念并定位其位置,再加上有时候多个物体和杂乱的背景混杂在一起,目标检测更加困难。但这难不倒科学家们,在传统视觉领域,目标检测就是一个非常热门的研究方向,一些特定目标的检测,比如人脸检测和行人检测已经有非常成熟的技术了。普通的目标检测也有过很多的尝试,但是效果总是差强人意。
传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤:
目标检测模型的主要性能指标是检测准确度和速度,对于准确度,目标检测要考虑物体的定位准确度,而不单单是分类准确度。一般情况下,two-stage算法在准确度上有优势,而one-stage算法在速度上有优势。准确度(accuracy)和速度(speed)是一对矛盾体,如何更好地平衡它们一直是目标检测算法研究的一个重要方向。
Region Proposal(候选区域),预先找出图中目标可能出现的位置,利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口(几千甚至几百个)的情况下保持较高的召回率(IoU,Intersection-over-Union)。
物体检测需要定位出物体的bounding box,如下图所示,不仅要定位出车辆的bounding box,还要识别出bounding box里面的物体就是车辆。由于算法不可能百分百跟人工标注的数据完全匹配,故存在一个定位精度评价公式:IoU(介于0-1之间)用于评价 bounding box 的定位精度。IoU越高,预测框的位置越准确。因而,在评估预测框时,通常会设置一个IoU阈值(如0.5),只有当预测框与真实框的IoU值大于这个阈值时,该预测框才被认定为真阳性(True Positive, TP),反之就是假阳性(False Positive,FP)。
IoU定义了两个bounding box的重叠度,如下图所示:
矩形框A、B的重合度 IoU 计算公式为:
也就是矩形框A、B的重叠面积占A、B 并集的面积比例:
Region Proposal 方法比传统的滑动窗口方法获取的质量要更高。
常用的Region Proposal 方法有:Selective Search(SS,选择性搜索)、Edge Boxes(EB)。
基于Region Proposal 目标检测算法的步骤如下:
目标检测的第一步是要做区域提名(Region Proposal),也就是找出可能的感兴趣区域(Region Of Interest, ROI)。
边框回归(Bouding Box Regression):是对RegionProposal进行纠正的线性回归算法,目的是为了让Region Proposal提取到的窗口与目标窗口(Ground Truth)更加吻合。
区域提名可能的方法有:
区域提名并不只有以上所说的三种方法,实际上这块是非常灵活的,因此变种也很多。
#选择性搜索算法
输入: 一张图片
输出:候选的目标位置集合L
算法:
1: 利用过切分方法得到候选的区域集合R = {r1,r2,…,rn}
2: 初始化相似集合S = ϕ
3: foreach 邻居区域对(ri,rj) do
4: 计算相似度s(ri,rj)
5: S = S ∪ s(ri,rj)
6: while S not=ϕ do
7: 得到最大的相似度s(ri,rj)=max(S)
8: 合并对应的区域rt = ri ∪ rj
9: 移除ri对应的所有相似度:S = S\s(ri,r*)
10: 移除rj对应的所有相似度:S = S\s(r*,rj)
11: 计算rt对应的相似度集合St
12: S = S ∪ St
13: R = R ∪ rt
14: L = R中所有区域对应的边框
从算法不难看出,R中的区域都是合并后的,因此减少了不少冗余,相当于准确率提升了,但是别忘了我们还需要继续保证召回率,因此算法1中的相似度计算策略就显得非常关键了。如果简单采用一种策略很容易错误合并不相似的区域,比如只考虑轮廓时,不同颜色的区域很容易被误合并。选择性搜索采用多样性策略来增加候选区域以保证召回,比如颜色空间考虑RGB、灰度、HSV及其变种等,相似度计算时既考虑颜色相似度,又考虑纹理、大小、重叠情况等。
总体上,选择性搜索是一种比较朴素的区域提名方法,被早期的基于深度学习的目标检测方法(包括Overfeat和R-CNN等)广泛利用,但被当前的新方法弃用了。
OverFeat是用CNN统一来做分类、定位和检测的经典之作,作者是深度学习大神之一——Yann Lecun在纽约大学的团队。OverFeat也是ILSVRC 2013任务3(分类+定位)的冠军得主。
OverFeat的核心思想有三点:
OverFeat的关键步骤有四步:
Overfeat是CNN用来做目标检测的早期工作,主要思想是采用了多尺度滑动窗口来做分类、定位和检测,虽然是多个任务但重用了模型前面几层,这种模型重用的思路也是后来R-CNN系列不断沿用和改进的经典做法。当然Overfeat也是有不少缺点的,至少速度和效果都有很大改进空间,后面的R-CNN系列在这两方面做了很多提升。
深度学习的目标检测算法主要分为两类,如下图:
R-CNN的基本流程
fast R-CNN的基本流程
注意:Fast R-CNN的 Region Proposal 是在feature map之后做的,这样可以不用对所有的区域进行单独的CNN Forward步骤。
Fast R-CNN框架如下图:
Fast R-CNN框架与R-CNN有两处不同:
Fast R-CNN是端到端(end-to-end)的。
Faster R-CNN可以简单地看做“区域生成网络RPNs + Fast R-CNN”的系统,用区域生成网络代替FastR-CNN中的Selective Search方法。Faster R-CNN这篇论文着重解决了这个系统中的三个问题:
1. 如何设计区域生成网络;
2. 如何训练区域生成网络;
3. 如何让区域生成网络和Fast RCNN网络共享特征提取网络。
在整个Faster R-CNN算法中,有三种尺度:
Faster-R-CNN算法由两大模块组成:
其中,RPN是全卷积神经网络,用于提取候选框;Fast R-CNN基于RPN提取的proposal检测并识别proposal中的目标。
参考:https://mp.weixin.qq.com/s?__biz=MzU1MTk1MzU0Nw==&mid=2247483872&idx=1&sn=1cbcdbb2cf8c38351d78db9dec4640c3&chksm=fb883404ccffbd12bdced13e6540516a8061b524511a8a254c6f2d36047bb18ea094d1078ad7&mpshare=1&scene=23&srcid=1116xlSpr68G9Boj9gHwEoBP#rd
https://blog.csdn.net/xiaohu2022/article/details/79600037
https://blog.csdn.net/u012507022/article/details/52908811
拖了两天终于写完了,欢迎批评,虚心接受~以上,欢迎批斗~~~
stay hungry, stay foolish~