本篇博客是我学习(https://blog.csdn.net/weixin_44791964)博主写的pytorch的ssd的博客后写的,大家可以直接去看这位博主的博客(https://blog.csdn.net/weixin_44791964/article/details/104981486)。这位博主在b站还有配套视频,传送门:(https://www.bilibili.com/video/BV1A7411976Z)。这位博主的在GitHub的源代码(https://github.com/bubbliiiing/ssd-pytorch)。 侵删
第一篇:ssd基本原理介绍:ssd基本原理链接
这是ssd的第二篇博客,主要是介绍ssd的整体框架,不会涉及代码。
pytorch目标检测ssd二_ssd的整体框架
这篇博客,我会分析一下整体框架。
首先看一下ssd整体的框架的图(图片来自于b站up主Bubbliiiing的视频教程截图,侵删)

1)输入图片
输入图片的大小要被设置成300x300的,所以不是300x300的图片,输入之前需要resize一下
2)特征提取网络
深度神经网络可以进行特征提取,我们的ssd采用的就是vgg深度神经网络。
但是ssd在vgg的基础上又做了一些改变。我们来看看第一幅图的第一部分:

除了普通的vgg之外,也就是第一和第二块:
还增加了后面的四块,也就是:
通过对输入图片进行上述一共6个部分的卷积,那么我们的输入的图片就会被进行特征提取,一共提取出6个特征层(每个部分对应一个特征层)。比如下图就是我们的第一个特征层,一共有六个:

利用这些特征层,我们就可以进行下一步的操作了。
3)画网格
我们来看看每个特征层的高和宽,分别是38x38, 19x19, 10x10, 5x5, 3x3, 1x1
看到这些数字,你想到了什么?还记得我们在第一篇的时候说的:ssd将图片分成不同的大小网格吗?

看每个特征层的高和宽,是不是我们网格的大小?
其实就是这样的,我们的ssd将我们的图片分成38x38x512, 19x19x1024, 10x10x512, 5x5x256, 3x3x256, 1x1x256这样6个不同的特征层,我们图片也会相应的划分出38x38, 19x19, 10x10, 5x5, 3x3, 1x1这样6种不同大小的网格,每个特征层对应其中一种网格,比如shape为38x38x512的特征层,对应38x38的网格。
划分出网格之后,ssd就会进行目标检测来检测目标。
好了,现在划分出了网格,那么我们检测目标又是怎么一回事儿呢?这个时候,我们就需要先验框辽。
补充知识:先验框
那我们先来看下先验框是个啥。
例如下面这幅图,
(虽然我们没有8x8和4x4的网格,但是我们这里举这个例子)
在图b中,我们以每个网格的中心为中心,画很多个先验框。比如图b蓝色的先验框,这个蓝色的先验框/就是/以他的中心网格的中心点/为中心画出来的先验框,然后我们要做的就是调整这个蓝色的先验框,使它和我们图a中的蓝色框几乎重合。其他先验框同理。
那么我们之前画出网格的作用就是为了得到这些先验框,然后调整先验框,然后得到我们的目标检测的结果辽。
4)画先验框,调整先验框,检测物体
我们现在已经知道了,每一个特征层都会将图片划分成和它高宽大小相同的网格,比如38x38的特征层,将图片划分成了38x38个网格。然后每个网格,都会有对应个数的先验框,比如我们的38x38的网格,每个网格就对应4个先验框,19x19的网格,每个网格对应6个先验框。介个系后就会有同学问辽,你这个4个先验框和6个先验框是怎么来的?其实我也不知道是怎么来的,但是他就是这么做的。😭
我们以38x38的为例子来康一下
我们先来康康第一幅图的中间部分的某一小部分,
中间部分如下图:

中间部分的某一小部分如下图:

看见上图的 #def.boxes:4 了没有,这里就是告诉我们这个特征层对应的网格,每个网格对应4个先验框。下面的38x38x4表示:38x38的网格,每个网格有4个先验框,那么一共有38x38x4=5776个先验框。然后我们就会对这5776个先验框分别进行调整,然后就会判断,调整后的5776个框,里面是否会包含物体。其他的特征层也同理,一共就有8732个先验框。
也就是说,我们会对一共8732个先验框进行调整,然后判断里面有没有物体,如果有的话,我们就把他们标出来。如第一幅图的第三部分:
但是,有时候我们的先验框会重叠,比如我们上图中的第四张图,先验框就重叠了:

但是不要慌,我们上面把先验框画出来了,还要进行一个操作,如第幅图的第四部分:

我们将标了先验框的图片输入进去之后,就会对重合的情况以及的先验框的评分,来找到我们需要的框,并且标出他所属的种类。

9329

被折叠的 条评论
为什么被折叠?



