本文转载自:https://zhuanlan.zhihu.com/p/46633171
降采样指的是成比例缩小特征图宽和高的过程,比如从(W,H)变为(W/2,H/2)。深度卷积神经网络中降采样的方法主要有三种:
1、stride大于1的pooling
2、stride大于1的conv
3、stride大于1的reorg(在YOLOv2的论文里叫passthrough layer)
简单解释reorg:
本质其实就是特征重排,26*26*512的feature map分别按行和列隔点采样,可以得到4幅13*13*512的特征,把这4张特征按channel串联起来,就是最后的13*13*2048的feature map.还有就是,passthrough layer本身是不学习参数的,直接用前面的层的特征重排后拼接到后面的层,越在网络前面的层,感受野越小,有利于小目标的检测。
yolov2的文章解析可参考:https://www.cnblogs.com/demian/p/9252038.html
作者:王曦
链接:https://www.zhihu.com/question/58903330/answer/247359224
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
其中1和2在深度卷积神经网络中使用非常普遍,3比较小众,由Joseph Redmon在YOLOv2中首次提出。
1和2的对比在Striving for Simplicity: The All Convolutional Net中有详述,文末有这么一段总结:
With modern methods of training convolutional neural networks very simple architectures may perform very well: a network using nothing but convolutions and subsampling matches or even slightly outperforms the state of the art on CIFAR-10 and CIFAR-100. A similar architecture shows competitive results on ImageNet.
In particular, as opposed to previous observations, including explicit (max-)pooling operations in a network does not always improve performance of CNNs. This seems to be especially the case if the network is large enough for the dataset it is being trained on and can learn all necessary invariances just with convolutional layers.
大概意思就是,用stride=2的conv降采样的卷积神经网络效果与使用pooling降采样的卷积神经网络效果相当;卷积神经网络小的时候,使用pooling降采样效果可能更好,卷积神经网络大的时候,使用stride=2的conv降采样效果可能更好。
总体来说,pooling提供了一种非线性,这种非线性需要较深的conv叠加才能实现,因此当网络比较浅的时候,pooling有一定优势;但是当网络很深的时候,多层叠加的conv可以学到pooling所能提供的非线性,甚至能根据训练集学到比pooling更好的非线性,因此当网络比较深的时候,不使用pooling没多大关系,甚至更好。
pooling的非线性是固定的,不可学习的,这种非线性其实就是一种先验。
3中降采样的优势在于能够较好的保留低层次的信息。1和2的降采样方式,好处是抽取的特征具有更强的语义性,坏处是会丢失一些细节信息。而3这种降采样方式与1、2相反,它提取的特征语义性不强,但是能保留大量细节信息。所以当我们既需要降采样,又需要不丢失细节信息的时候,3是一个非常合适的选择。