【DenseNet】Densely Connected Convolution network笔记

本文介绍了DenseNet稠密卷积神经网络,该网络通过连接每一层到后续所有层来缓解梯度消失问题,促进信息流动,减少参数并实现特征复用。与ResNet对比,DenseNet由稠密块和过渡层组成,其中过渡层用于调整特征图大小。尽管DenseNet训练时内存需求较高,但其高效的结构和加速收敛的特性使其在深度学习中具有独特优势。

1、摘要部分

卷积网络现在做得越来越深,精确,并且训练起来越来越高效。本文根据这一个结论,提出了一种稠密卷积神经网络(DenseNet)。传统的L层卷积神经网络又L个连接——位于每一层和它后面一层,而我们的神经网络有\frac{L(L+1)}{2},对于每一层,其输入的特征是之前的所有层,而它自己的输出特征则作为之后所有层的输入。

2、Advantage

  • alleviate the vanishing-gradient problem
  • improve flow of information
  • requires few parameters
  • feature reuse

3、DenseNet与ResNet对比

作者主要受到ResNet和Highway Networks的启发,下面来看看结构。

最原始的convolution network

 

### 关于密集连接分层网络用于图像去噪的研究 密集连接分层网络(Densely Connected Hierarchical Network, DCHN)是一种专门设计用于解决图像去噪问题的深度学习架构。该方法通过引入密集连接机制来增强特征重用能力,从而提高模型的学习效率和性能[^1]。 #### 密集连接的核心概念 在传统的卷积神经网络中,每一层通常只与其前一层相连。然而,在密集连接结构中,每层不仅接收其前一层的输入,还接受之前所有层的输出作为附加输入。这种设计能够显著减少梯度消失现象并促进更深层次的信息流动[^2]。 #### 层次化网络的设计理念 为了进一步提升效果,研究者们提出了层次化的网络结构。在这种框架下,不同尺度上的特征被分别提取并通过跨级别的交互操作加以融合。具体而言,低级细节与高级语义之间的联系得以加强,使得最终恢复出来的图片更加贴近真实情况[^3]。 以下是基于PyTorch实现的一个简化版DCHN模型代码片段: ```python import torch.nn as nn class DenseBlock(nn.Module): def __init__(self, input_channels, growth_rate=16, layers_per_block=4): super(DenseBlock, self).__init__() self.layers = nn.ModuleList() for i in range(layers_per_block): layer = nn.Sequential( nn.BatchNorm2d(input_channels + i * growth_rate), nn.ReLU(), nn.Conv2d(input_channels + i * growth_rate, growth_rate, kernel_size=3, padding=1) ) self.layers.append(layer) def forward(self, x): features = [x] for layer in self.layers: out = layer(torch.cat(features, dim=1)) features.append(out) return torch.cat(features, dim=1) class TransitionLayer(nn.Module): def __init__(self, num_filters): super(TransitionLayer, self).__init__() self.transition = nn.Sequential( nn.BatchNorm2d(num_filters), nn.ReLU(), nn.Conv2d(num_filters, num_filters // 2, kernel_size=1), nn.AvgPool2d(kernel_size=2) ) def forward(self, x): return self.transition(x) class DCHNet(nn.Module): def __init__(self, initial_channels=64, growth_rate=16, blocks=[4, 4, 4]): super(DCHNet, self).__init__() self.first_conv = nn.Conv2d(3, initial_channels, kernel_size=3, padding=1) channels = initial_channels dense_blocks = [] transition_layers = [] for block_num in blocks[:-1]: dense_blocks.append(DenseBlock(channels, growth_rate=growth_rate, layers_per_block=block_num)) channels += block_num * growth_rate transition_layers.append(TransitionLayer(channels)) channels //= 2 dense_blocks.append(DenseBlock(channels, growth_rate=growth_rate, layers_per_block=blocks[-1])) self.dense_blocks = nn.ModuleList(dense_blocks) self.transition_layers = nn.ModuleList(transition_layers) self.final_conv = nn.Conv2d(channels + blocks[-1]*growth_rate, 3, kernel_size=3, padding=1) def forward(self, x): out = self.first_conv(x) residuals = [] for db, tl in zip(self.dense_blocks[:-1], self.transition_layers): out = db(out) residuals.append(out) out = tl(out) out = self.dense_blocks[-1](out) residuals.reverse() for res in residuals: _, _, h, w = res.size() out = nn.functional.interpolate(out, size=(h,w), mode='bilinear', align_corners=False) + res out = self.final_conv(out) return out ``` 此代码定义了一个基础版本的DCHNet,其中包含了多个dense blocks以及相应的过渡层。它适用于多种类型的噪声去除任务,并可通过调整超参数以适应特定应用场景需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值