【计算机视觉】计算机视觉与深度学习-07-目标检测-北邮鲁鹏老师课程笔记

目标检测定义

单目标检测:分类+定位

深度学习对目标检测的作用

在这里插入图片描述

单目标检测

在这里插入图片描述

多任务框架

一个任务是:分类。
另一个任务是:定位。
在这里插入图片描述

多任务损失

网络训练的目标是降低总损失,所以 softmax loss 和 L2 loss 将同时减小,也可以为 softmax loss 和 L2 loss 分别设置一个权重,通过改变权重,调整 softmax loss 和 L2 loss 在总损失中所占的比重。

预训练模型

目标检测中,一般不从头开始训练网络,而是使用ImageNet上预训练的模型。

一般分三个阶段,先训练分类(一般是拿现成已经训练好的模型),再训练定位,再一起训练分类+定位。
在这里插入图片描述

姿态估计

单目标检测的思路,还应用于单人体姿态估计,与box coordinates不同的是,在人体上标注关键点,然后通过训练,与标答进行对比。

多目标检测

问题

神经网络的标答是预先建立好的,因为多目标检测中目标数量并不确定,输出的维度不确定,就无法建立Correct box标答,如果使用单目标检测的训练方法,无法建立多目标检测的表达,训练将不能进行。
在这里插入图片描述

滑动窗口

将图像中所有可能的区域都给到分类器进行分类,只留下能正确分类的窗口。
在这里插入图片描述

滑动窗口缺点

穷举图像中成千上万的区域进行分类,对于神经网络,计算量很大。

针对这个问题,提出了一种新的思想,先从图像中产生一些候选区域再进行分类,而不是穷举图像中所有区域。例如:selective search

adaboost

区域建议 selective search 思想

针对穷举图像所有区域神经网络分类计算量大这个问题,提出了一种新的思想,先从图像中产生一些候选区域再进行分类,而不是穷举图像中所有区域。例如:selective search。

selective search思想是在R-CNN的论文中提出的
在这里插入图片描述

慢速R-CNN

基于区域的目标检测算法。

慢速R-CNN思路

1 利用区域建议产生感兴趣的区域。(存入硬盘)
2 对区域进行缩放。
3 将图像区域送入卷积网络进行特征提取。(存入硬盘)
4 使用支持向量机对区域进行分类,同时进行边界框回归(修正学习)。

边界框回归

区域建议生成的区域,可能有损失,效果不好,进行边界框回归,就是为了修正区域建议生成的区域与真实区域的偏差。
在这里插入图片描述

参考:Bounding Box Regression超详解 – 迪菲赫尔曼
参考:边界框回归(Bounding-Box Regression)-- 沁心风雨

慢速R-CNN缺点

问题:计算效率低下,每张图像大约有2k个区域需要卷积网络进行特征提取,重叠区域反复计算。
在这里插入图片描述

Fast R-CNN

在这里插入图片描述

改进一:先提取特征后区域建议

如果先进行区域建议后进行特征提取,计算量比较大。

改进二:全连接神经网络

改进三:裁剪+缩放特征(RoI Pool)

为什么需要RoI Pool?

先来看一个问题:对于传统的CNN(如AlexNet和VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。有2种解决办法:

从图像中crop一部分传入网络。
将图像warp成需要的大小后传入网络。
在这里插入图片描述
两种办法的示意图如图,可以看到无论采取那种办法都不好,要么crop后破坏了图像的完整结构,要么warp破坏了图像原始形状信息。

回忆RPN网络生成的proposals的方法:对positive anchors进行bounding box regression,那么这样获得的proposals也是大小形状各不相同,即也存在上述问题。所以Faster R-CNN中提出了RoI Pooling解决这个问题。不过RoI Pooling确实是从Spatial Pyramid Pooling发展而来。

通过RoI Pooling,即使大小不同的proposal输出结果都是固定大小,实现了固定长度输出。

参考:一文读懂Faster RCNN – 白裳

区域裁剪 Rol Pool

在这里插入图片描述

区域顶点规整到网格交点上(有偏移)

在这里插入图片描述

区域裁剪 Rol Align
区域顶点不规整到网格交点上(无偏移)

在每个区域中选择几个关键点,关键点个数是可自定义的,是超参数
在这里插入图片描述在这里插入图片描述在这里插入图片描述

R-CNN vs Fast R-CNN

在这里插入图片描述

Faster R-CNN

Fast R-CNN的问题

selective search 区域建议 耗时过高,几乎等于单张图片的检测时间
在这里插入图片描述

Faster R-CNN改进

在这里插入图片描述在这里插入图片描述在这里插入图片描述

区域建议 Region Proposal Network

不在原图,而在特征图上,使用卷积神经网络进行区域建议。

经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;或如R-CNN使用SS(Selective Search)方法生成检测框。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。

在这里插入图片描述
上图4展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

anchor

在这里插入图片描述

提到RPN网络,就不能不说anchors。所谓anchors,实际上就是一组由rpn/generate_anchors.py生成的矩形。直接运行作者demo中的generate_anchors.py可以得到以下输出:

[[ -84.  -40.   99.   55.]
 [-176.  -88.  191.  103.]
 [-360. -184.  375.  199.]
 [ -56.  -56.   71.   71.]
 [-120. -120.  135.  135.]
 [-248. -248.  263.  263.]
 [ -36.  -80.   51.   95.]
 [ -80. -168.   95.  183.]
 [-168. -344.  183.  359.]]

在这里插入图片描述
注:关于上面的anchors size,其实是根据检测图像设置的。在python demo中,会把任意大小的输入图像reshape成800x600(即图2中的M=800,N=600)。再回头来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。

那么这9个anchors是做什么的呢?借用Faster RCNN论文中的原图,如图7,遍历Conv layers计算获得的feature maps,为每一个点都配备这9种anchors作为初始的检测框。这样做获得检测框很不准确,不用担心,后面还有2次bounding box regression可以修正检测框位置。

在这里插入图片描述
解释一下上面这张图的数字。

在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions

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

假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分positive和negative,所以每个点由256d feature转化为cls=2•k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4•k coordinates

补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。

其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已!

那么Anchor一共有多少个?原图800x600,VGG下采样16倍,feature map每个点设置9个Anchor,所以:

c e i l ( 800 / 16 ) × c e i l ( 600 / 16 ) × 9 = 50 × 38 × 9 = 17100 ceil(800/16) \times ceil(600/16) \times 9=50 \times 38 \times 9 = 17100 ceil(800/16)×ceil(600/16)×9=50×38×9=17100

其中ceil()表示向上取整,是因为VGG输出的feature map size= 50*38。
在这里插入图片描述

softmax判定positive与negative
对proposals进行bounding box regression
Proposal Layer生成proposals

一阶段目标检测:YOLO/SSD/RetinaNet

在这里插入图片描述

目标检测:影响进度的因素

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值