链接
https://arxiv.org/abs/1412.6806
摘要
大多数执行目标检测任务的卷积神经网络架构基本都遵循
(
L
a
y
e
r
c
o
n
v
−
L
a
y
e
r
m
a
x
p
o
o
l
i
n
g
)
×
n
+
L
a
y
e
r
f
u
l
l
y
c
o
n
n
e
c
t
i
o
n
×
m
(Layer_{conv} - Layer_{maxpooling}) \times n +Layer_{fullyconnection} \times m
(Layerconv−Layermaxpooling)×n+Layerfullyconnection×m 这样的架构,本文对目前从小图片中进行目标检测的几种性能较好的网络进行重新评估,提出了各种组件是否为必须组件这样的提问。结果发现max-pooling层是可以通过
s
t
r
i
d
e
>
1
stride \gt 1
stride>1 的卷积层来实现的,而且不会带来精度的降低。据此提出了全卷积网络。
为了分析网络,还引入“反卷积方法”来把网络特征可视化。
去掉Pooling层的思路
- 比方 w i n d o w = 2 window=2 window=2 的Pooling层,直接去掉,然后在它前面的Conv层用 s t r i d e = 2 stride=2 stride=2 替代,结果是识别的准确率会稍微降低(为什么?)
- 用用 s i z e = 3 , s t r i d e = 2 size=3, stride=2 size=3,stride=2 的Conv层替代 w i n d o w = 3 , s t r i d e = 2 window=3, stride=2 window=3,stride=2 的Pooling层,不存在识别准确率降低的问题,但是会导致参数增加(可能会增加过拟合的可能?)注意:除非是参数矩阵 θ \theta θ 有约束条件,否则用Conv层替换Pooling层会增加参数间的依赖(It is worth noting that replacing pooling by convolution adds inter-feature dependencies unless the weight matrix θ \theta θ is constrained)
实验的情况
一般来讲,ALL_CNN_LAYERS的表现更为突出,就是上面提到的第二种情况
结论
- 一个只含有Conv层和Subsampling层的网络性能和含有maxpooling层的网络相比,可能差不多甚至更好;
- 和之前的观察不一致的是,在网络里显式增加(最大)池化层并不总是提升性能,尤其是对于对于其训练的数据集来说,用卷积层就能学到所有的必要的不变量的网络。
可以借鉴的思路
在Tiny YoloV3里面的MaxPooling Layer里面用 w i n d o w = 2 , s t r i d e = 2 window=2, stride=2 window=2,stride=2 的Conv层替换掉,看看效果(两方面,一方面是准确率,另一方面是推理的时间有没有增加)。