目标检测-大杂烩


在这里插入图片描述

Two-stage:用相应的Region Proposal算法(可以是传统算法,也可以是神经网络)从输入图片中生成建议目标候选区域,将所有的候选区域送入分类器进行分类。

One-stage:首先将输入图片分割成NxN的image patch, 然后每个image patch有M个固定尺寸的anchor box, 输出anchor box的位置和分类标签。

两阶段(2-stage)检测模型

两阶段模型因其对图片的两阶段处理得名,也称为基于区域(Region-based)的方法

R-CNN:

R-CNN系列的开山之作
两大贡献:
1)CNN可用于基于区域的定位和分割物体;
2)监督训练样本数紧缺时,在额外的数据上预训练的模型经过fine-tuning可以取得很好的效果。

R-CNN将检测抽象为几个过程,
一、 是基于图片提出若干可能包含物体的区域(即图片的局部裁剪,被称为Region Proposal),文中使用的是Selective Search算法;创建了约 2000 个 ROI。

二、对预训练模型做fine-tuning,最后一层给替换掉,替换成N+1个输出的神经元(加1,表示还有一个背景) ,将区域被转换为固定大小的图像,并分别馈送到模型中。注意,一张图片提出了2000个区域,但只有一个真实框,所以利用IOU,将2000个区域里IOU小于阈值的设为背景,大于阈值的才是相关类别;而此阈值比较小,这是因为CNN容易过拟合,所以需要大量的训练数据。训练完成后,丢掉最后一层,获得每个区域的特征向量。

三、训练一个SVM分类器(二分类)来判断这个候选框里物体的类别:利用特征向量和更为严格的IOU的正负样本划分,训练SVM。
每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative

四、使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。
输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 训练样本:判定为本类的候选框中和真值重叠面积大于0.6的候选框。

测试阶段:

  1. 使用selective search的方法在测试图片上提取2000个region propasals ,将每个region proposals归一化到227x227,

  2. 然后再CNN中正向传播,将最后一层得到的特征提取出来。

  3. 然后对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,

  4. 再使用贪心的非极大值抑制(NMS)去除相交的多余的框。

  5. 再对这些框进行回归修正,就可以得到bounding-box(then B-BoxRegression)。

非极大值抑制(NMS)

先计算出每一个bounding box的面积,然后根据score进行排序,把score最大的bounding box作为选定的框,计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box。然后重复上面的过程,直至候选bounding box为空,然后再将score小于一定阈值的选定框删除得到这一类的结果(然后继续进行下一个分类)。

Fast R-CNN: 共享卷积运算

R-CNN耗时的原因是CNN是在每一个Proposal上单独进行的,没有共享计算,便提出将基础网络在图片整体上运行完毕后,再传入R-CNN子网络,共享了大部分计算,故有Fast之名。

Fast R-CNN 主要贡献点 :

  1. 实现大部分end-to-end训练(提proposal阶段除外): 所有的特征都暂存在显存中,就不需要额外的磁盘空。
  2. joint training (SVM分类,bbox回归 联合起来在CNN阶段训练)把最后一层的Softmax换成两个,一个是对区域的分类Softmax(包括背景),另一个是对bounding box的微调。这个网络有两个输入,一个是整张图片,另一个是候选proposals算法产生的可能proposals的坐标。(对于SVM和Softmax,论文在SVM和Softmax的对比实验中说明,SVM的优势并不明显,故直接用Softmax将整个网络整合训练更好。对于联合训练: 同时利用了分类的监督信息和回归的监督信息,使得网络训练的更加鲁棒,效果更好。这两种信息是可以有效联合的。)
  3. 提出了一个RoI层,算是SPP的变种,SPP是pooling成多个固定尺度,RoI只pooling到单个固定的尺度 (论文通过实验得到的结论是多尺度学习能提高一点点mAP,不过计算量成倍的增加,故单尺度训练的效果更好。)
  4. 指出SPP-net训练时的不足之处,并提出新的训练方式,就是把同张图片的prososals作为一批进行学习,而proposals的坐标直接映射到conv5层上,这样相当于一个batch一张图片的所以训练样本只卷积了一次。文章提出他们通过这样的训练方式或许存在不收敛的情况,不过实验发现,这种情况并没有发生。这样加快了训练速度。

在这里插入图片描述

结构:

  1. 图片经过feature extractor得到feature map,
  2. 同时在原图上运行Selective Search算法并将RoI(Region of Interset,实为坐标组,可与Region Proposal混用)映射到到feature map上,
  3. 再对每个RoI进行RoI Pooling操作便得到等长的feature vector,
  4. 将这些得到的feature vector进行正负样本的整理(保持一定的正负样本比例),分batch传入并行的R-CNN子网络,同时进行分类和回归,并将两者的损失统一起来。

回归损失
在这里插入图片描述

RoI Pooling

RoI Pooling是对输入R-CNN子网络的数据进行准备的关键操作。我们得到的区域常常有不同的大小,在映射到feature map上之后,会得到不同大小的特征张量。
RoI Pooling先将RoI等分成目标个数的网格,再在每个网格上进行max pooling,就得到等长的RoI feature vector。

Fast R-CNN的这一结构正是检测任务主流2-stage方法所采用的元结构的雏形。文章将Proposal, Feature Extractor, Object Classification&Localization统一在一个整体的结构中,并通过共享卷积计算提高特征利用效率,是最有贡献的地方。

Faster R-CNN

Fast R-CNN 依赖于外部候选区域方法,如选择性搜索。但这些算法在 CPU 上运行且速度很慢。在测试中,Fast R-CNN 需要 2.3 秒来进行预测,其中 2 秒用于生成 2000 个 ROI。

Faster R-CNN是2-stage方法的奠基性工作,提出的RPN网络取代Selective Search算法使得检测任务可以由神经网络端到端地完成。粗略的讲,Faster R-CNN = RPN + Fast R-CNN,跟RCNN共享卷积计算的特性使得RPN引入的计算量很小,使得Faster R-CNN可以在单个GPU上以5fps的速度运行

Faster RCNN其实可以分为4个主要内容:

  1. Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。

  2. Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。

  3. Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。

  4. Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

关键在RPN网络
1、

首先接收Conv Layers中最后的conv5层num_output=256,对应生成的256张特征图,所以相当于feature map每个点都是256-dimensions。

在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息,同时256-d不变

2、anchor分配

在feature map上为每个点分配3个scale,3个aspect ratio,即每个点得到9个anchor,共计 M ∗ N ∗ 9 M*N*9 MN9个anchor。

假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分positive和negative,所以每个点由256d feature转化为 c l s = 2 ∗ k cls=2*k cls=2k scores;
而每个anchor都有(x, y, w, h)对应4个偏移量,所以 r e g = 4 ∗ k reg=4*k reg=4k coordinates
补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练

对每个标定的ground true box区域,与其重叠比例最大的anchor记为 正样本 (保证每个ground true 至少对应一个正样本anchor)
对剩余的anchor,如果其与某个标定区域重叠比例大于0.7,记为正样本(每个ground true box可能会对应多个正样本anchor。但每个正样本anchor 只可能对应一个grand true box);如果其与任意一个标定的重叠比例都小于0.3,记为负样本。

3、 softmax判定positive与negative

在进入reshape与softmax之前,先做了1x1卷积
在这里插入图片描述
即利用18个1*1卷积,获得 M ∗ N ∗ 18 M*N*18 MN18的输出,通过Softmax分类

接一个reshape layer:其实只是为了便于softmax分类,至于具体原因这就要从caffe的实现形式说起了。在caffe基本数据结构blob中以如下形式保存数据:blob=[batch_size, channel,height,width]对应至上面的保存positive/negative anchors的矩阵,其在caffe blob中的存储形式为[1, 2x9, H, W]。而在softmax分类时需要进行positive/negative二分类,所以reshape layer会将其变为[1, 2, 9xH, W]大小,即单独“腾空”出来一个维度以便softmax分类,之后再reshape回复原状。

一般认为目标在positive anchors中

4、bounding box regression

在这里插入图片描述
即利用 4 ∗ k 4*k 4k个1*1卷积核,获得 M ∗ N ∗ 36 M*N*36 MN36的输出,相当于feature maps每个点都有9个anchors,每个anchors又都有4个用于回归的

5、Proposal Layer

Proposal Layer负责综合所有 [公式] 变换量和positive anchors,计算出精准的proposal,送入后续RoI Pooling Layer。

  1. 生成anchors,利用对所有的anchors做bbox regression回归,利用bounding box regression的四个值进行修正,
    在这里插入图片描述

  2. 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的positive anchors

  3. 限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界;剔除尺寸非常小的positive anchors

  4. 对剩余的positive anchors进行NMS(nonmaximum suppression)

  5. 之后输出proposal=[x1, y1, x2, y2],这里输出的proposal是对应原输入图像尺度的

整个网络使用的Loss如下
在这里插入图片描述
在这里插入图片描述
t i t_i ti 表示predict box相对于anchor box的偏移, t i ∗ t^*_i ti 表示ground true box相对于anchor box的偏移,学习目标自然就是让前者接近后者的值。
在这里插入图片描述

作者:白裳 链接:https://zhuanlan.zhihu.com/p/31426458 来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

单次目标检测器

YOLO

  1. 网格化,将图像通过CNN获得 S ∗ S ∗ c h a n n e l S*S*channel SSchannel的特征图

  2. 继续卷积,获得 S ∗ S ∗ ( 5 ∗ B + C ) S * S * (5*B+C) SS(5B+C)的特征图,
    每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置(x, y, w, h)之外,还要附带预测一个confidence值。 每个网格还要预测一个类别信息,记为C类。
    则SxS个网格的输出就是S x S x (5*B+C)的一个tensor

  3. 坐标(x, y, w, h)
    其中中心坐标的x,y用对应网格的offset归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。

  4. 损失函数包括坐标回归损失,包含目标的置信度损失,不包含目标的置信度损失,以及分类损失

  5. 推理时使用NMS非极大抑制生成预测框

快,但是性能不如two-stage,使用全图作为 Context 信息,背景错误(把背景错认为物体)比较少。
泛化能力强。

SSD

YOLO 有一些缺陷:每个网格只预测一个物体,容易造成漏检;对于物体的尺度相对比较敏感,对于尺度变化较大的物体泛化能力较差。针对 YOLO 中的这些不足,该论文提出的方法 SSD 在这两方面都有所改进,同时兼顾了 mAP 和实时性的要求。

改进:

多尺度的feature map:基于VGG的不同卷积段,输出feature map到回归器中。这一点试图提升小物体的检测精度。

更多的anchor box,每个网格点生成不同大小和长宽比例的box,并将类别预测概率基于box预测(YOLO是在网格上),得到的输出值个数为(C+4)×k×m×n,其中C为类别数,k为box个数,m×n为feature map的大小。

FPN

作者提出的FPN(Feature Pyramid Network)算法同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同。
在这里插入图片描述
(a)图像金字塔,即将图像做成不同的scale,然后不同scale的图像生成对应的不同scale的特征。这种方法的缺点在于增加了时间成本。有些算法会在测试时候采用图像金字塔。
(b)像SPP net,Fast RCNN,Faster RCNN是采用这种方式,即仅采用网络最后一层的特征。
(c)像SSD(Single Shot Detector)采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
(d)本文作者是采用这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。

center net

anchor-free

通过cnn得到feature map

制作热力图,channel为类别数加别的需要预测的值的总数,在目标的中点,标注数值。利用高斯核平滑一下,然后计算损失

Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。
在这里插入图片描述

首先在原有的基础上加了一个因子,其中gamma>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。

例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。

此外,加入平衡因子alpha,用来平衡正负样本本身的比例不均:文中alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。

指标

运行的速度,常常用FPS(Frame Per Second,每秒帧率)来表示检测模型能够在指定硬件上每秒处理图片的张数。

准确率描述了模型有多准,即在预测为正例的结果中,有多少是真正例;召回率则描述了模型有多全,即在为真的样本中,有多少被我们的模型预测为正例。不同的任务,对两类错误有不同的偏好,常常在某一类错误不多于一定阈值的情况下,努力减少另一类错误。

在检测中,mAP(mean Average Precision)作为一个统一的指标将这两种错误兼顾考虑。

具体地,对于每张图片,检测模型输出多个预测框(常常远超真实框的个数),我们使用IoU(Intersection Over Union,交并比)来标记预测框是否为预测正确。标记完成后,随着预测框的增多,召回率总会提升,在不同的召回率水平下对准确率做平均,即得到AP,最后再对所有类别按其所占比例做平均,即得到mAP。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值