关于网络中跳连的代码实现的一些疑问
来源:6-20 TensorFlow-ssd模型训练之框架解读(2)

慕粉2767861
2019-05-12
Q1: VGG网络的每一个特征图都与倒数第二个全连接层相连了,也就是说,最后的一个全连接层具有这6个featuremap的面积x通道数之和的数目的参数?
Q2: 之前您带我们动手搭建网络结构的时候,
x=conv(input_x,…)
x=MP(x,…) …
像这样,下一层的网络总是以上一层的输出为输入,这样直线型的结构如此来用代码实现很好理解,但这种“跳连”的结构是如何实现的呢?
Q3: 上图是您在68点中选择的SE-Net中重复用到的一个模块,它的是具体实现我也不是很懂。比如从Residual到Scale,就有两条路线。
1回答
-
会写代码的好厨师
2019-05-19
Q1:最后一层并不是FC层,它是一个检测层,实现的逻辑会麻烦一些。这里并不是将这6个特征图合并到一起,而是每一个特征图后面都会跟一个检测层,检测出最后目标的位置;
Q2:
我举一个例子。可以认为每一个模块卷积层都是一个变量。这几条线的实现可以理解为:
输入:X0
X1 = conv(X0)
X2 = X1 + X0
输出:X2
这就是一个最简单的结构,只是conv里面我们会加入relu和BN层,它并不会改变特征图的大小,如果 有pooling层的话,那我们需要将最后相加的X1和X0变化到相同的维度:
X1 = conv(X0)
X2 = pooling(X1)
X3 = pooling(X0) + X2
Q3:关于SENet的模块,我们可以简单的这样理解:
X1 = conv(X0)
X2 = Weight(X0)
X3 =X0 + X1 * X2
输出是X3。这里的X2权重,每个通道上的特征图的权重是相同的,所以实际上就6个值。
00
相似问题