论文:DropBlock: A regularization method for convolutional networks
中心思想
作者认为dropout虽然对全连接层有效,但是对卷积层无效,因为对卷积层而言特征在空间上是关联的,仅仅在空间上随机地让一些单元失活,卷积依然可以通过其感知域内的其它没有失活的单元推测出相应的特征信息并把它们传向下一层。
作者提出了dropBlock,一种结构化的dropout。它与dropout很像,但是其与dropout的不同即在于要扔就扔一整块,如下图(c)所示。这样卷积就不能通过空间上的特征关联推理出被失活区域的信息,进而迫使网络从其它特征入手进行推理,起到正则化的作用。
超参数
DropBlock有两个超参数:和。
其中为一次性扔的block的size,譬如上一节图(c)中该size就为4;当size为1时DropBlock退化为dropout。
控制扔的概率(类似于dropout的p),但是在实际选择要失活的块时,失活概率不同于,因为不同的失活块间可能会重叠。论文中提出通过以下公式设置:(keep_prob为featuremap中整体的保留概率)
另外作者提出,一开始就将设置为0.75~0.95效果并不是很好,将在训练过程中从1线性地降低为目标值表现地更好。
伪代码与示意图
DropBlock算法的伪代码与示意图:
实验结果
作者在ImageNet上用ResNet50进行了实验,其中block_size=7,keep_prob=0.9,dropBlock只在stage3和stage4做(也就是1414的时候和77的时候,两者block_size均为7)
对于ResNet,每个
超参数的研究:
我比较奇怪的是,block_size=feat_size时不就是SpatialDropout吗?为啥最上面给的结果SpatialDropout只有77.41,这个这个图里block_size=feat_size时准确率却有78???
自己的实现与实验
github上有一份dropblock的pytorch代码,