1. 简介

Dropout 被广泛地用作全连接层的正则化技术,但是对于卷积层,通常不太有效。Dropout 在卷积层不 work 的原因可能是由于卷积层的特征图中相邻位置元素在空间上共享语义信息, 所以尽管某个单元被 dropout 掉,但与其相邻的元素依然可以保有该位置的语义信息,信息 仍然可以在卷积网络中流通。因此,针对卷积神经网络就需要一种结构形式的 dropout 来正 则化,即按块来丢弃。
       Dropout 是一种结构化的 dropout 形式,它将 feature map 相邻区域中的单元放在一起 drop 掉。除了卷积层外,在跳跃连接中应用 DropBlock 可以提高精度。此外,在训练过程中,逐 渐增加 dropped unit 的数量会有更好的准确性和对超参数选择的鲁棒性。

2. DropBlock

DropBlock 模块主要有两个参数:block_size,γ。
       ● block_size:为所有的特征图设置一个恒定的块大小,不管特征图的分辨率如何。当 block_size=1 时 , DropBlock 类 似 于 dropout , 当 block_size=1 时 , DropBlock 类 似 于 SpatialDropBlock(dropout 正常可以取 3,5,7)。
       ● γ(表示 drop 过程中的概率,伯努利分布概率):没有显式的设置γ,γ控制要删除的特征数。假设希望保持每个激活单元的概率为 keep_prob,考虑到 block_size*block_size 中的元素都要置为 0,所以γ可以计算为:


通常:

其中:

解释如下:
       传统的 dropout drop 的元素个数为 drop 概率乘以全部的元素个数((1-keep_prob)表示dorp掉的比例):

在实现中,为了保证 drop 的 block 不会超出原始图像,需要先设置一个 drop 的有效区域,如下图(a)中的绿色区域,也就是原始的图减去 block,即:

这里的γ为伯努利函数的概率,而这个概率只表示了随机 drop 的中间点的概率,如下图 (a)中红色的 X,实际需要的是要 drop 掉 X 周围的 block_size 大小的区域,也就是一个 X 对应一个 block_size 大小的区域(假设不互相重叠)。所以 drop 的概率即:


有效的区域面积为:


最终得到 drop 掉的元素数目为:


最后,Dropout=DropBlock,即:


算法流程如下:

3. Pytorch代码

class Drop(nn.Module):# drop_rate : 1-keep_prob  (all droped feature points)# block_size : drop掉的block大小def __init__(self, drop_rate=0.1, block_size=7):super(Drop, self).__init__()self.drop_rate = drop_rateself.block_size = block_sizedef forward(self, x):if self.drop_rate == 0:return x# 设置gamma,比gamma小的设置为1,大于gamma的为0(得到丢弃比率的随机点个数)算法第五步# all droped feature center pointsgamma = self.drop_rate / (self.block_size**2)# torch.rand(*sizes, out=None) : 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义mask = (torch.rand(x.shape[0], *x.shape[2:]) < gamma).float()mask = mask.to(x.device)# compute block maskblock_mask = self._compute_block_mask(mask)# apply block mask,为算法图的第六步out = x * block_mask[:, None, :, :]# Normalize the features,对应第七步out = out * block_mask.numel() / block_mask.sum()return outdef _compute_block_mask(self, mask):# 取最大值,这样就能够取出一个block的块大小的1作为drop,当然需要翻转大小,使得1为0,0为1block_mask = F.max_pool2d(input=mask[:, None, :, :],kernel_size=(self.block_size,self.block_size),stride=(1, 1),padding=self.block_size // 2)if self.block_size % 2 == 0:# 如果block大小是2的话,会边界会多出1,要去掉才能输出与原图一样大小.block_mask = block_mask[:, :, :-1, :-1]block_mask = 1 - block_mask.squeeze(1)return block_mask

【正则化】DropBlock详解相关推荐

  1. 深度学习中的正则化技术详解

    目录 基本概念 1. 参数范数惩罚 1.1 \(L^2\)正则化 1.2 \(L^1\)正则化 1.3 总结\(L^2\)与\(L^1\)正则化 2. 作为约束的范数惩罚 3. 欠约束问题 4. 数据 ...

  2. 机器学习基础-正则化作用详解

    正则化的概念在机器学习中经常被提到,本文主要介绍正则化的作用,通过一系列具体的例子,相信能够对正则化有一个非常清晰的认识. 过拟合问题(The Problem of Overfitting) 来看预测 ...

  3. L2正则化Regularization详解及反向传播的梯度求导

    摘要 本文解释L2正则化Regularization, 求解其在反向传播中的梯度, 并使用TensorFlow和PyTorch验证. 相关 系列文章索引 : https://blog.csdn.net ...

  4. Machine Learning Experiment5 Regularization(正则化) 详解+代码实现

    为什么要引入正则化? 在做线性回归或者逻辑回归的时候,会遇到过拟合问题,即,在训练集上的error很小,但是在测试集上的偏差却很大.因此,引入正则化项,防止过拟合.保证在测试集上获得和在训练集上相同的 ...

  5. 【阿里云课程】详解深度学习优化:泛化与正则化,学习率与最优化

    大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第6课中两节,介绍如下: 第1节:泛化与正则化 第1节课内容为:泛化与正则化,讲述泛化的概念与重要性,各种正则化方法,包括显 ...

  6. yolov4的全面详解

    一. 前言 作者AlexeyAB大神!  YOLOv4  拥有43.5%mAP+65FPS  ,达到了精度速度最优平衡, 作者团队:Alexey Bochkovskiy&中国台湾中央研究院 论 ...

  7. YOLOv4---(详解各种trick)

    YOLOv4-(详解各种trick) 参考自(https://zhuanlan.zhihu.com/p/139764729) 前段时间大名鼎鼎的yolov4终于面世了,可是看过以后确实大失所望.不是说 ...

  8. 【动手学PaddlePaddle2.0系列】目标检测理论与YOLOv4详解

    对计算机而言,能够"看到"的是图像被编码之后的数字,所以它很难理解高层语义概念,比如图像或者视频帧中出现的目标是人还是物体,更无法定位目标出现在图像中哪个区域.目标检测的主要目的是 ...

  9. YOLOv4算法详解

    YOLOv4: Optimal Speed and Accuracy of Object Detection-论文链接-代码链接 目录 1.需求解读 2.YOLOv4算法简介 3.YOLOv4算法详解 ...

最新文章

  1. 【Python基础】Python安装第三方库太慢?配置好这个速度飞起
  2. C语言中可变参数列表
  3. 1Ubuntu下ftp服务器搭建
  4. [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.
  5. php学习总结,PHP学习的技巧和学习的要素总结
  6. 使用C语言在windows下一口气打开一批网页
  7. Linux-Shell脚本编程-学习-4-Shell编程-操作数字-加减乘除计算
  8. Android MVP和Dagger2
  9. Github上多人协作方式之一
  10. 教学设计的理念与方法【2】
  11. windows驱动开发 DDK/WDK/WDM/WDF区别
  12. FIT2CLOUD飞致云完成C轮和C+轮融资,持续引领中国多云管理市场
  13. 微信公众号后台接口文档
  14. javascript创建表格
  15. 高性能计算机介绍,曙光个人高性能计算机介绍
  16. 搭建自己的以图搜图系统 (一):10 行代码以图搜图
  17. DevExpress 报表 格式化
  18. 读书项目:ePub标准介绍
  19. vue3中进行vuex的分包管理(typescript)
  20. SSRF在有无回显方面的利用及其思考与总结

热门文章

  1. java命令大全_Java命令行工具:javac、java、javap 的使用详解
  2. mysql库存自动更新_秒杀库存需不需要实时更新到mysql?
  3. 【蓝桥杯单片机】IIC通讯协议与EEPROM(AT24C02)(官方驱动源码改写)
  4. 集群的可扩展性及其分布式体系结构(3)--上
  5. linux下ip协议(V4)的实现(二)
  6. console_init_r()函数分析
  7. [C++] - lambda capture的成员函数 异步调用
  8. ajax传值给python_ajax向python脚本传递参数
  9. 【Nginx】第一章 快速入门
  10. Mysql数据库-面试题