week 2021.1.04-2021.1.08

Faster R-CNN(笔记)

Faster R-CNN可以算是深度学习目标检测领域的祖师爷了,至今许多算法都是在其基础上进行延伸和改进的,它的出现,可谓是开启了目标检测的新篇章,其最为突出的贡献之一是提出了 "anchor" 这个东东,并且使用 CNN 来生成region proposal(目标候选区域),从而真正意义上完全使用CNN 来实现目标检测任务(以往的架构会使用一些传统视觉算法如Selective Search来生成目标候选框,而 CNN仅用来提取特征或最后进行分类和回归)。

Faster R-CNN 由 R-CNN 和 Fast R-CNN发展而来,R-CNN是第一次将CNN应用于目标检测任务的家伙,它使用selective search算法获取目标候选区域(region proposal),然后将每个候选区域缩放到同样尺寸,接着将它们都输入CNN提取特征后再用SVM进行分类,最后再对分类结果进行回归,整个训练过程十分繁琐,需要微调CNN+训练SVM+边框回归,无法实现端到端。

selective search:首先通过简单的区域划分算法,将图片划分成很多小区域,再通过相似度和区域大小(小的区域先聚合,这样是防止大的区域不断的聚合小区域,导致层次关系不完全)不断的聚合相邻小区域,类似于聚类的思路。

Fast R-CNN则受到 SPP-Net 的启发,将全图(而非各个候选区域)输入CNN进行特征提取得到 feature map,然后用RoI Pooling将不同尺寸的候选区域(依然由selective search算法得到)映射到统一尺寸。另外,它用Softmax替代SVM用于分类任务,除最后一层全连接层外,分类和回归任务共享了网络权重。

ROI pooling具体操作如下:

  1. 根据输入image,将ROI映射到feature map对应位置;
  2. 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
  3. 对每个sections进行max pooling操作;

这样就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。

而Faster R-CNN相对于其前辈Fast R-CNN的最大改进就是使用RPN来生成候选区域,摒弃了selective search算法,即完全使用CNN解决目标检测任务,同时整个过程都能跑在GPU上,之前selective search仅在CPU上跑,是耗时的一大瓶颈。

内容来自于:https://mp.weixin.qq.com/s/yMg_WNMQwpjcJgZYwvzXjA

对比一下R-CNN,Fast R-CNN,Faster R-CNN

week 2021.1.04-2021.1.08

 

 

 week 2021.1.04-2021.1.08

 

 

 

 Fast R-CNN的RegionProposal是在feature map之后做的,这样可以不用对所有的区域进行单独的CNN Forward步骤。

Fast R-CNN框架与R-CNN有两处不同:

① 最后一个卷积层后加了一个ROI pooling layer;

② 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。

Fast R-CNN是端到端(end-to-end)的。

week 2021.1.04-2021.1.08

 

 

 week 2021.1.04-2021.1.08

Faster-R-CNN算法由两大模块组成:

1.PRN候选框提取模块;

2.Fast R-CNN检测模块。

其中,RPN是全卷积神经网络,用于提取候选框;Fast R-CNN基于RPN提取的proposal检测并识别proposal中的目标。

fasterRCNN代码:resnet50fpn_fasterRCNN,resnet50_fasterRCNN,mobilenetv2_fasterRCNN

week 2021.1.04-2021.1.08View Code

 接着来说一哈

Backbone与Detection head

week 2021.1.04-2021.1.08

 

 一个分类器:detector=backbone+neck+head

backbone:特征提取

head:实现对物体的定位和分类

neck:这部分的作用就是更好地融合/提取backbone所给出的feature,然后再交由后续的head去检测,从而提高网络的性能

 具体参考:https://zhuanlan.zhihu.com/p/93451942

Facebook AI的DETR,一种基于Transformer的目标检测方法

week 2021.1.04-2021.1.08

DETR的体系结构

实际上,整个DETR架构很容易理解。它包含三个主要组件:

  • CNN骨干网
  • 编码器-解码器transformer
  • 一个简单的前馈网络

首先,CNN骨干网从输入图像生成特征图。

然后,将CNN骨干网的输出转换为一维特征图,并将其作为输入传递到Transformer编码器。该编码器的输出是N个固定长度的嵌入(向量),其中N是模型假设的图像中的对象数。

Transformer解码器借助自身和编码器-解码器注意机制将这些嵌入解码为边界框坐标。

最后,前馈神经网络预测边界框的标准化中心坐标,高度和宽度,而线性层使用softmax函数预测类别标签。

论文:https://arxiv.org/pdf/2005.12872.pdf

开放源代码:https://github.com/facebookresearch/detr

上一篇:LeetCode Week Contest #235


下一篇:or运算处理0,1问题