提交 60827085 编写于 作者: A Aston Zhang

ssd till concat

上级 240ec4de
......@@ -12,17 +12,13 @@
接下来我们介绍如何实现图中的各个模块。我们先介绍如何实现类别预测和边界框预测。
### 类别预测
### 类别预测
设目标的类别个数为$q$。每个锚框的类别个数将是$q+1$,其中类别0表示锚框只包含背景。在某个尺度下,设特征图的高和宽分别为$h$和$w$,如果以其中每个单元为中心生成$a$个锚框,那么我们将要对$hwa$个锚框进行分类
设目标的类别个数为$q$。每个锚框的类别个数将是$q+1$,其中类别0表示锚框只包含背景。在某个尺度下,设特征图的高和宽分别为$h$和$w$,如果以其中每个单元为中心生成$a$个锚框,那么我们需要对$hwa$个锚框进行分类。如果使用全连接层作为输出,很容易导致模型参数过多。回忆[“网络中的网络(NiN)”](../chapter_convolutional-neural-networks/nin.md)一节介绍的使用卷积层的通道来输出类别预测的方法。SSD采用同样的方法来降低模型复杂度
具体来说,类别预测层使用一个保持输入高和宽的卷积层。这样一来,输出和输入在特征图宽和高上的空间坐标一一对应。考虑输出和输入同一空间坐标$(x,y)$:输出特征图上$(x,y)$坐标的通道里包含了以输入特征图$(x,y)$坐标为中心生成的所有锚框的类别预测。因此输出通道数为$a(q+1)$,其中索引为$i(q+1) + j$($0 \leq j \leq q$)的通道代表了索引为$i$的锚框的类别索引为$j$的预测。
如果使用全连接层作为输出,可能会导致有过多的模型参数。回忆[“网络中的网络:NiN”](../chapter_convolutional-neural-networks/nin.md)这一节里我们介绍了使用卷积层的通道来输出类别预测,SSD采用同样的方法来降低模型复杂度。
具体来说,类别预测层使用一个保持输入高宽的卷积层,其输出的$(x,y)$像素通道里包含了以输入$(x,y)$像素为中心的所有锚框的类别预测。其输出通道数为$a(n+1)$,其中通道$i(n+1)$是第$i$个锚框预测的背景置信度,而通道$i(n+1)+j+1$则是第$i$锚框预测的第$j$类目标的置信度。
下面我们定义一个这样的类别分类器,指定$a$和$n$后,它使用一个填充为1的$3\times3$卷积层。注意到我们使用了较小的卷积窗口,它可能不能覆盖锚框定义的区域。所以我们需要保证前面的卷积层能有效的将较大的锚框区域的特征浓缩到一个$3\times3$的窗口里。
下面我们定义一个这样的类别预测层。指定参数$a$和$q$后,它使用一个填充为1的$3\times3$卷积层。该卷积层的输入和输出的高和宽保持不变。
```{.python .input n=1}
import sys
......@@ -39,9 +35,9 @@ def cls_predictor(num_anchors, num_classes):
padding=1)
```
### 边界框预测
### 边界框预测
对每个锚框我们需要预测如何将其变换到真实的目标边界框。变换由一个长为4的向量来描述,分别表示左下和右上的x、y轴坐标偏移。与类别预测类似,这里我们同样使用一个保持高宽的卷积层来输出偏移预测,它有$4a$个输出通道,对于第$i$个锚框,它的偏移预测在$4i$到$4i+3$这4个通道里
边界框预测层的设计与类别预测层的设计类似。唯一不同的是,这里需要为每个锚框预测4个偏移量,而不是$q+1$个类别
```{.python .input n=2}
def bbox_predictor(num_anchors):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册