所谓深监督(Deep Supervision),就是在深度神经网络的某些中间隐藏层加了一个辅助的分类器作为一种网络分支来对主干网络进行监督的技巧,用来解决深度神经网络训练梯度消失和收敛速度过慢等问题。

深监督作为一个训练trick在2014年就已经通过DSN(Deeply-Supervised Nets)提出来了。具体参见DSN论文。


DSN的一个缺点在于使用的网络结构不够深,且辅助的分类器为传统的SVM模型。2015年的一篇Training Deeper Convolutional Networks with Deep Supervision的论文尝试了在更深层结构的网络中使用深监督技巧。

深监督的结构

通常而言,增加神经网络的深度可以一定程度上提高网络的表征能力,但随着深度加深,会逐渐出现神经网络难以训练的情况,其中就包括像梯度消失和梯度爆炸等现象。为了更好的训练深度网络,我们可以尝试给神经网络的某些层添加一些辅助的分支分类器来解决这个问题。这种辅助的分支分类器能够起到一种判断隐藏层特征图质量好坏的作用。

既然明确了要通过深监督来解决深度网络难以训练的问题,那么这个作为监督分支结构应该加在神经网络的什么位置?论文作者根据一些经验法则和实验给出了结论。作者先是把深监督放在网络最后一层,然后跑10-50次迭代,绘制出中间层的平均梯度值。最后作者将监督分支添加在平均梯度消失(原文中平均梯度小于10_(-7))的那一层。随迭代次数变化的各卷积层的平均梯度值如下图所示。可以看到,Conv1-4层在迭代次数增加时平均梯度值都要小于10_(-7)。

带有深监督的一个8层深度卷积网络结构如下图所示。

带有深监督的一个13层深度卷积网络结构如下图所示。

其中各个模块含义如下:

损失函数

以W和Ws分别表示主干网络和深监督分支的权重,则有:
输出层softmax表示为:

深监督分支的损失函数为:
可以看到深监督分支的损失函数取决于W,而不是Ws,因为分支结构中倒数第二层的S8特征图关联到主干网络的卷积权重W1-4。

所以,联合损失函数可以表示为:
其中α_t可以表示为随训练epoch t衰减的一个值:

看到这个联合损失函数是不是有种正则化的味道,实际也正是如此,辅助loss能够起到一种类似正则化的效果。可以看到,Conv4在加深监督和不加深监督的平均梯度差异。如下图所示:

Torch示例

下面以Torch为例实现一个带深度监督的卷积模块。先定义卷积块:

import torch.nn as nn
# 定义卷积块
# 包含3x3卷积+BN+relu
def conv3x3_bn_relu(in_planes, out_planes, stride=1):"3x3 convolution + BN + relu"return nn.Sequential(nn.Conv2d(in_planes, out_planes, kernel_size=3,stride=stride, padding=1, bias=False),BatchNorm2d(out_planes),nn.ReLU(inplace=True),)

带有深监督的卷积模块如下:

class C1DeepSup(nn.Module):def __init__(self, num_class=150, fc_dim=2048, use_softmax=False):super(C1DeepSup, self).__init__()self.use_softmax = use_softmaxself.cbr = conv3x3_bn_relu(fc_dim, fc_dim // 4, 1)self.cbr_deepsup = conv3x3_bn_relu(fc_dim // 2, fc_dim // 4, 1)# 最后一层卷积self.conv_last = nn.Conv2d(fc_dim // 4, num_class, 1, 1, 0)self.conv_last_deepsup = nn.Conv2d(fc_dim // 4, num_class, 1, 1, 0)# 前向计算流程def forward(self, conv_out, segSize=None):conv5 = conv_out[-1]x = self.cbr(conv5)x = self.conv_last(x)if self.use_softmax:  # is True during inferencex = nn.functional.interpolate(x, size=segSize, mode='bilinear', align_corners=False)x = nn.functional.softmax(x, dim=1)return x# 深监督模块conv4 = conv_out[-2]_ = self.cbr_deepsup(conv4)_ = self.conv_last_deepsup(_)# 主干卷积网络softmax输出x = nn.functional.log_softmax(x, dim=1)# 深监督分支网络softmax输出_ = nn.functional.log_softmax(_, dim=1)return (x, _)

论文解读:深度监督网络(Deeply-Supervised Nets)相关推荐

  1. 论文阅读笔记:3D deeply supervised network for automated segmentation of volumetric medical images

    摘要 深度卷积神经网络(CNN)在二维医学图像分割方面取得了显著的成功,但由于其复杂的解剖结构等诸多相互影响的挑战,使得CNN从三维医学图像中分割重要的器官或结构仍然是一项艰巨的任务.立体图像中的环境 ...

  2. FPN论文解读(附网络结构层次代码)

    这篇论文是CVPR2017年的文章,采用特征金字塔做目标检测,有许多亮点,解决了多尺度目标的检测问题. # 论文题目 FeaturePyramidNetworksforObjectDetection ...

  3. 制作自己的segnet数据集_语义分割【论文解读】经典网络SegNet 值得仔细反复阅读...

    摘要: 提出了一种新颖而实用的深度全卷积神经网络结构用于语义像素分割称为SegNet.这个核心的可训练分割引擎包括一个编码器网络,一个相应的解码器网络,以及一个像素级的分类层.编码器网络的架构与VGG ...

  4. 论文解读:胶囊网络在小样本做文本分类中的应用(下)

    Dynamic Memory Induction Networks for Few-Shot Text Classification 论文提出Dynamic Memory Induction Netw ...

  5. CVPR论文解读 | 弱监督的高保真服饰模特生成

    本文在学术界率先提出,使用深度对抗生成网络拟合真实世界穿衣结果分布,设计投影算子来将服饰与人体粗略对齐结果投影至真实世界穿衣结果分布中,将此投影的结果作为虚拟试衣的预测结果. 虚拟试衣技术,是指由人物 ...

  6. Densenet论文解读 深度学习领域论文分析博主

    深度学习领域论文分析博主 博客链接: https://my.csdn.net/u014380165 其中一篇文章: DenseNet算法详解: https://blog.csdn.net/u01438 ...

  7. Deep Supervision:深度监督(2014)+DHM

    深度监督(Deep Supervision)又称为(中继监督 intermediate supervision),就是在深度神经网络的某些中间隐藏层加了一个辅助的分类器作为一种网络分支来对主干网络进行 ...

  8. [论文阅读]阿里DIN深度兴趣网络之总体解读

    [论文阅读]阿里DIN深度兴趣网络之总体解读 文章目录 [论文阅读]阿里DIN深度兴趣网络之总体解读 0x00 摘要 0x01 论文概要 1.1 概括 1.2 文章信息 1.3 核心观点 1.4 名词 ...

  9. unet是残差网络吗_基于深度监督残差网络的肝脏及肝肿瘤分割

    摘要: 针对医生手动对肝脏肿瘤CT图像分割耗时,耗力,且易受主观判断影响的问题,该研究提出一种深度监督残差网络(Deeply Supervised Residual Unet,DS-ResUnet)算 ...

最新文章

  1. mynginx.conf
  2. python画树叶-Python_Turtle库画一只派大星
  3. Linux 下搭建 Java Web 开发环境
  4. 文本挖掘(part4)--N-gram模型
  5. CCF 201809-1 买菜
  6. 未来人工智能的发展应该有哪些特征?
  7. linux查看磁盘使用情况及每个文件夹占用磁盘大小
  8. 【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
  9. FISCO BCOS 区块最大最长交易执行时间
  10. JAVA - 根据文件链接将文件下载保存到本地
  11. 详细的ico图标制作与Qt修改exe图标方法
  12. AutoCAD2022下载安装教程
  13. 智能语音机器人帮你解决订餐服务
  14. 89c52汇编语言实现跑马灯,汇编语言实现24个跑马灯制作
  15. ubuntu14.04安装nvidia-GTK-1060驱动后黑屏
  16. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: Shared Memory Provider, error: 0-管道的另一端上无任何进程
  17. java poi导出pdf_Java POI 生成PDF文档,很给力!
  18. 【HISI系列】之HISI芯片码率控制使用说明
  19. msysGit与TortoiseGit使用入门
  20. [实战Java高并发程序设计:读后感:参考文献]第一章

热门文章

  1. django查询集-17
  2. JS设计模式三:策略模式
  3. BZOJ3160: 万径人踪灭
  4. C# 图片文件文本string格式 传输问题
  5. MSSQLSERVER数据库- 递归查询例子
  6. java多线程编程_Java多线程编程实战指南+设计模式篇.pdf
  7. 安装程序无法继续 因为你的计算机安装了更新的,xp安装不了ie提示“安装了更新的Internet Explorer版本”怎么办...
  8. fscokopen php,详解PHP fsockopen的使用方法
  9. wannacry作者捉到了吗_不会阅读空气是情商低吗?如何提升自己的情商?
  10. java动物乐园_基于jsp的动物园管理系统-JavaEE实现动物园管理系统 - java项目源码...