目标检测ssd基本思想和网络结构以及论文补充(代码片段)

Jul7_LYY Jul7_LYY     2023-03-02     472

关键词:

论文题目:Single Shot MultiBox Detector
论文链接:论文链接

文章目录

一、SSD的引入

1.SSD的创新点

Faster-RCNN存在的问题:1.对小目标检测效果很差 2.模型大,检测速度较慢
1.SSD,YOLOV3和FasterRCNN的RPN都使用了全卷积神经网络
2.一共有6个特征预测层,不同检测层有不同大小的滑动窗口,能够检测到不同大小的目标。低层预测小目标,高层预测大目标。(多尺度检测
3.设置了多种宽高比的anchor(不同特征预测层也有所不同,看下文
4.使用了数据增强(对原图有放大缩小

2.SSD的缺点及优化

1.主要缺点:SSD对小目标的检测效果一般,作者认为小目标在高层没有足够的信息。

对小目标检测的改进可以从下面几个方面考虑:
1. 增大输入尺寸
2. 使用更低的特征图做检测(比如S3FD中使用更低的conv3_3检测)
3. FPN(已经是检测网络的标配了)

2.关于anchor的设置的优化

论文中提到的anchor设置没有对齐感受野,通常几个像素的中心位置偏移,对大目标来说IOU变化不会很大,但对小目标IOU变化剧烈,尤其感受野不够大的时候,anchor很可能偏移出感受野区域,影响性能。
关于anchor的设计,作者还提到了
In practice, one can also design a distribution of default boxes to best fit a specific dataset. How to design the optimal tiling is an open question as well
论文提到根据特定数据集设计default box,在YOLOV2中使用聚类的方式初始化anchor,能够更好的匹配到ground truth,帮助网络更好的训练

3.如何从分类网络到预测网络?

首先,要理解VGG,ResNet等最后都会使用全连接层提取特征,然后经过softmax计算每一类的概率。缺点:1.最终分类的预测是对整张图片进行预测的,如果一张图片中出现多个目标,就不能单纯使用分类网络,要把最后的全连接层换做卷积层 2.由于全连接层的存在,网络的输入大小必须是固定的
由于使用全连接层提取特征,所以提取的是全图的特征,所以一张图像中只能包含一个目标,如果有多个目标,提取出来的特征就不准确,影响最后的预测

4.如何提取多个目标的特征?

1.使用卷积层代替全连接层进行特征提取


我们将图1简化为图2的表示形式,其中图2中省略了Input到DeepID2中间的层,我们看到当DeepID2是全连接层的时候,感受野对应了全图,所以提取的是全图的特征,现在我们把DeepID2替换为卷积层,其中卷积层的输出通道数为160,这是为了能够提取160维的特征向量,图3中我们可以看到当使用卷积层的时候,DeepID2的输出特征图的每个位置的感受野不是对应了全图,而是对应了原图的某一个滑动窗口,这样DeepID2这一层就可以提取原图多个滑动窗口的特征了,图3中我们可以看到一共提取出了25个滑动窗口的160维特征向量,然后我们就可以对这25个滑动窗口做分类了。这样就使得检测成为了可能。

2.使用卷积层代替全连接层进行分类

我们知道在分类网络中softmax的前一层使用的是全连接层,且该全连接层的输出节点数为分类数,比如上文中的DeepID2的后面的fc2层。

但是现在DeepID2这一层变成了卷积层之后,fc2层就不适合采用全连接层了。下面我们将fc2层替换为卷积层,我们采用1x1卷积(也可以使用3x3卷积),同时卷积层的输出通道数为10000,对应了10000分类。

我们看到当fc2采用1x1卷积的时候,fc2层的特征图中的每个位置对应了一个滑动窗口的10000分类,这样一共得到25x10000的特征向量,表示对25个滑动窗口的10000分类。最后将这25x10000的特征向量输入softmax,就可以实现对这25个滑动窗口的分类了。

这其实就是经典的OverFeat的核心思想。
什么是OverFeat?
OverFeat说的简单一点就是特征提取算子,就相当于SIFT,HOG等这些算子一样。

简单的来说就是,在于充分利用了卷积神经网络的特征提取功能,它把分类过程中,提取到的特征,同时又用于定位检测等各种任务。只需要改变网络的最后几层,就可以实现不同的任务,而不需要从头开始训练整个网络的参数

其主要是把网络的第一层到第五层看做是特征提取层,然后不同的任务共享这个特征提取层。基本用了同一个网络架构模型(特征提取层相同,分类回归层根据不同任务稍作修改、训练)、同时共享基础特征。

注意:
这里并没有说检测网络不能使用全连接层,其实检测网络也可以使用全连接层。检测网络只是使用卷积层代替全连接层提取特征,最后对特征进行分类和回归可以使用卷积层也可以使用全连接层,YOLOV1最后就使用了全连接层对特征进行分类和回归,只是这样会有一些缺点:网络的输入大小必须是固定的,而且最后检测的效果往往没有使用卷积层做分类和回归的效果好。

3.如何确定每个滑动窗口的类别?(引入anchor)

上文中,我们将传统的分类网络一步一步的修改成了一个检测网络,知道了如何提取多个目标的特征以及使用卷积层代替全连接层进行分类,现在我们还差最后一步:要对多个目标进行分类,还需要知道他们的groundtruth,也就是他们的类别,那么如何确定类别呢?这里就要用到anchor这项技术。anchor就是用来确定类别的。

我们知道anchor的参数是可以手动设置的,上图中
anchor的大小被设置为 [x1,y1,x2,y2],这个anchor就是上文中提到的滑动窗口
groundtruth对应 [x1’,y1’,x2’,y2’]
然后通过计算anchor和groundtruth之间的IOU就可以确定这个滑动窗口的类别了(比如IOU>0.5的为正样本,IOU<0.3的为负样本)。

SSD的整体框架已经基本搭建好了。其实SSD的多个检测层就等价于多个DeepID2层,不同检测层有不同大小的滑动窗口,能够检测到不同大小的目标。每个检测层后面会接2路3x3卷积用来做分类和回归,对应了fc2层。

二、SSD框架解析

1.SSD框架与VGG16的关系


虚线方框对应下边虚线前边的一部分,conv4-3是第一个预测特征层,上述黄线标注部分代表,之前池化缩减一半,现在保持不变。conv7是第二个预测特征层。conv8-2第三个预测特征层,以此类推…

2.图像解释框架为什么使用多尺度?


较低层的匹配小目标,高层的匹配相对大点的目标。(这样能更好的吻合)

3.Default Box的引入


因为代码和原论文尺度不相符,故上述公式不做详细解释

这里的尺度为什么有两个参数呢?因为原公式中有Sk和Sk+1,后边的anchor比例要加上1:根号Sk*Sk+1这个比例

4.如何在6个预测特征层上预测?预测器如何实现?



在每个特征层上使用3*3的卷积去生成预测类别的概率和default box的坐标偏移量。


这里的c是包含背景类别的。

5.fasterrcnn和ssd边界框回归参数的不同点

在fasterrcnn生成anchor时,会生成4c个边界框,每一个anchor会去生成每一个目标类别的边界框回归参数。
在ssd当中,每一个default box只生成4个边界框回归参数,不关注每一个default box是属于哪个类别的。(dfbox和类别没有关系)

6.正负样本的选取问题

1.正样本的两种方式选取

1.取与真实预测框最大匹配的default box
2.取与真是预测框IOU大于0.5的default box

2.负样本的选取

如果把除了正样本以外的全部当成负样本来用,那么就太多了,正样本可能只有十几个,但是default box有八千多个,如果这么选取会导致样本不平衡。
对剩下的负样本计算最大置信度损失,从大到小选取,大概选取的比例是正样本:负样本=1:3

7.损失的计算




定位损失只针对正样本,因为负样本没有对应的GT

三、经常遇到的一些小问题

1.为什么anchor可以设置实际响应的区域?

这就是CNN的神奇之处,这个问题目前我还不知道如何解释,就像目前的深度学习依然是不可解释的一样,这点就当作一个结论记住就可以了。

2.为什么同一个检测层可以设置不同大小的anchor?

我们知道可以通过anchor设置每一层实际响应的区域,使得某一层对特定大小的目标响应。
是否每一层只能对理论感受野响应呢?有效感受野理论表明,每一层实际响应的区域其实是有效感受野区域,而且这个有效感受野区域在训练过程中会发生变化(比如不同数据集的影响等),正是由于有效感受野有这个特性,所以我们可以在同一个检测层设置不同大小的anchor,也就是说你既可以设置anchor大小为理论感受野大小,也可以将anchor大小设置为其他大小,最后训练出来的网络会根据你的设置对特定大小的区域响应。

3.为什么在同一个特征图上可以设置多个anchor检测到不同尺度的目标?

刚开始学SSD的朋友一定有这样的疑惑,同一层的感受野是一样的,为什么在同一层可以设置多个anchor,然后在分类和回归两个分支上只需要使用不同通道的3x3卷积核就可以实现对不同anchor的检测?虽然分类和回归使用的是同一个特征图,但是不同通道的3x3卷积核会学习到那块区域的不同的特征,所以不同通道对应的anchor可以检测到不同尺度的目标。

anchor本身不参与网络的实际训练,anchor影响的是classification和regression分支如何进行encode box(训练阶段)和decode box(测试阶段)。测试的时候,anchor就像滑动窗口一样,在图像中滑动,对每个anchor做分类和回归得到最终的结果。

深度学习目标检测算法ssd论文简介

 深度学习目标检测算法SSD论文简介  一、论文简介:  ECCV-2016Paper:https://arxiv.org/pdf/1512.02325v5.pdf   Slides:http://www.cs.unc.edu/~wliu/papers/ssd_eccv2016_slide.pdf二、代码训练测试:  https://github.com/w 查看详情

目标检测网络ssd详解(代码片段)

SSD目标检测网络  使用SSD检测网络一段时间了,研究过代码,也踩过坑,算是有能力来总结下SSD目标检测网络了。1.SSD300_Vgg16  最基础的SSD网络是以Vgg16作为backbone,输入图片尺寸为300x300,这里以其为示例,详细剖析下SSD检测... 查看详情

singleshotmultiboxdetector论文翻译修改(代码片段)

...要我们提出了一种使用单个深度神经网络来检测图像中的目标的方法。我们的方法命名为SSD,将边界框的输出空间离散化为不同长宽比的一组默认框该默认框在每个特征图位置有不同的宽高比和尺寸。在预测时,网络会在每个默... 查看详情

深度学习之目标检测常用算法原理+实践精讲yolo/fasterrcnn/ssd/文本检测/多任务网络

深度学习之目标检测常用算法原理+实践精讲YOLO/FasterRCNN/SSD/文本检测/多任务网络资源获取链接:点击这里第1章课程介绍本章节主要介绍课程的主要内容、核心知识点、课程涉及到的应用案例、深度学习算法设计通用流程、适应... 查看详情

singleshotmultiboxdetection(ssd)实战(上)

...检测和数据集。现在,我们将利用这些背景知识构建一个目标检测模型:单次多盒检测(SSD)。这种快速简便的模式已经被广泛应用。该模型的一些设计思想和实现细节也适用于其他对象检测模型。1.Model图1显示了一个SSD模型的... 查看详情

目标检测网络之yolov2(代码片段)

YOLOv1基本思想YOLO将输入图像分成SxS个格子,若某个物体Groundtruth的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。每个格子预测B个boundingbox及其置信度(confidencescore),以及C个类别概率。bbox信息(x,y,w,h)为... 查看详情

目标检测yolov3基本思想(代码片段)

目标检测YOLOv3基本思想1.简介2.基础概念2.1.边界框(boundingbox)2.2.锚框(Anchorbox)2.3.交并比(loU)3.训练思想3.产生候选区域3.1.生成锚框3.2.生成预测框3.2.1.预测框中心位置坐标3.2.2.预测框大小3.2.3.求解预测... 查看详情

目标检测yolov3基本思想(代码片段)

目标检测YOLOv3基本思想1.简介2.基础概念2.1.边界框(boundingbox)2.2.锚框(Anchorbox)2.3.交并比(loU)3.训练思想3.产生候选区域3.1.生成锚框3.2.生成预测框3.2.1.预测框中心位置坐标3.2.2.预测框大小3.2.3.求解预测... 查看详情

mtcnn人脸识别(代码片段)

...检测,除了yolo和R-CNN系列,还多出的一个算法系列为级联网络结构,MTCNN为其中一个代表。以前讲过 查看详情

csp:objectaspoint同会议论文,相似思想用于人脸和行人检测|cvpr2019

CSP将目标定义为中心点和尺寸,通过网络直接预测目标的中心和寸尺,相对于传统的RCNN类型检测算法轻量化了不少。整体思想与ObjectasPoints撞车了,真是英雄所见略同 来源:晓飞的算法工程笔记公众号论文:CenterandScalePrediction:A... 查看详情

ssd网络模型之detectionoutput算子

...预、预选框偏移以及得分三项结果,最终输出满足条件的目标检测框、目标的label和得分。输入方面,mbox_priorbox是网络各个priorbox层输出concat后的结果(priorbox解析点这里),相当于把所有预选框放到一起;mbox_loc是在预选框的基... 查看详情

【目标检测】论文推荐——基于深度神经网络的目标检测

...可变的实例,并允许在网络的最高级别上进行跨类泛化。目标检测是计算机视觉的基本任务之一。一个解决这个问题的通用范例是训练在子图像上操作的对象检测器,并在所有的场所和尺度上以详尽的方式应用这些检测器。这一... 查看详情

ssd+caffe︱singleshotmultiboxdetector目标检测

作者的思路就是FasterR-CNN+YOLO,利用YOLO的思路和FasterR-CNN的anchorbox的思想。.0导读(本节来源于BOT大赛嘉宾问答环节)SSD这里的设计就是导致你可以一下子可以检测8张图,FasterRCNN一下子只能检测1张图片,这样的话会导致会有8张... 查看详情

解读ssd目标检测方法

.../github.com/balancap/SSD-TensorflowSSD是YOLO之后又一个引人注目的目标检测结构,它沿用了YOLO中直接回归bbox和分类概率的方法,同时又参考了FasterR-CNN,大量使用anchor来提升识别准确度。通过把这两种结构相结合,SSD保持了很高的识别... 查看详情

目标检测相关论文和代码资源汇总(代码片段)

目标检测相关论文和代码资源汇总文章目录目标检测相关论文和代码资源汇总2014~2019模型汇总(红色为推荐必读篇):Performancetable性能表2014论文及代码2015论文及代码2016论文及代码2017论文及代码2018论文及代码20... 查看详情

详细解读目标检测经典算法-ssd(代码片段)

学习目标:知道SSD的多尺度特征图的网络知道SSD中先验框的生成方式知道SSD的损失函数的设计目标检测算法主要分为两类:Two-stage方法:如R-CNN系列算法,主要思路就是通过SelectiveSearch或者CNN网络产生一系列的稀... 查看详情

目标检测ssd相对于yolo与faster-rcnn做了哪些改进?效果如何

...还是慢YOLO就是把原图划成7x7的小格子,在每个格子里对目标进行预测,相当于固定了regionproposal的位置和大小,所以没有了RPN,加快了速度,但是准确率下去了SSD用了YOLO的思想,但是选了6个比例来对原图进行划分,这样就保证... 查看详情

目标检测算法ssd(singleshotmultiboxdetector)(代码片段)

SSD:SingleShotMultiBoxDetector学习目标1.SSD1.1简介1.2结构1.3流程1.4Detector&classifier1.4.1PriorBox层-defaultboxes1.4.2localization与confidence2.训练与测试流程2.1train流程2.2test流程3.比较4.总结学习目标目标知道SSD的结构说明Detect 查看详情