Atrous 卷积(也称为空洞卷积或扩张卷积)。
用法
tf.nn.atrous_conv2d(
value, filters, rate, padding, name=None
)
参数
-
value
float
类型的 4-DTensor
。它需要采用默认的"NHWC" 格式。它的形状是[batch, in_height, in_width, in_channels]
。 -
filters
4-DTensor
与value
具有相同类型和形状[filter_height, filter_width, in_channels, out_channels]
。filters
'in_channels
尺寸必须与value
的尺寸匹配。 Atrous 卷积等效于具有有效高度filter_height + (filter_height - 1) * (rate - 1)
和有效宽度filter_width + (filter_width - 1) * (rate - 1)
的上采样滤波器的标准卷积,通过沿filters
空间维度上的连续元素插入rate - 1
零来产生。 -
rate
一个正的 int32。我们在height
和width
维度上对输入值进行采样的步幅。等效地,我们通过在height
和width
维度上插入零来对过滤器值进行上采样的速率。在文献中,有时将相同的参数称为input stride
或dilation
。 -
padding
一个字符串,或者'VALID'
或者'SAME'
.填充算法。看这里了解更多信息。 -
name
返回张量的可选名称。
返回
-
A
Tensor
与相同类型value
.输出形状与'VALID'
填充是:[batch, height - 2 * (filter_width - 1), width - 2 * (filter_height - 1), out_channels].
带有
'SAME'
填充的输出形状为:[batch, height, width, out_channels].
抛出
-
ValueError
如果输入/输出深度与filters
' 形状不匹配,或者填充不是'VALID'
或'SAME'
。
此函数是更通用的 tf.nn.convolution
的更简单包装,并且仅用于向后兼容。您可以使用 tf.nn.convolution
执行 1-D、2-D 或 3-D 空洞卷积。
给定 4-D value
和 filters
张量,计算 2-D atrous 卷积,也称为空洞卷积或扩张卷积。如果 rate
参数等于 1,则执行常规 2-D 卷积。如果 rate
参数大于 1,它将执行空洞卷积,在 height
和 width
维度中每个 rate
像素对输入值进行采样。这相当于将输入与一组上采样滤波器进行卷积,通过在 height
和 width
维度的滤波器的两个连续值之间插入 rate - 1
零,因此名称为空洞卷积或带孔的卷积(法语单词 trous 在英语中的意思是孔)。
进一步来说:
output[batch, height, width, out_channel] =
sum_{dheight, dwidth, in_channel} (
filters[dheight, dwidth, in_channel, out_channel] *
value[batch, height + rate*dheight, width + rate*dwidth, in_channel]
)
Atrous 卷积允许我们明确控制在全卷积网络中计算特征响应的密集程度。它与双线性插值结合使用,在语义图像分割、光流计算或深度估计等密集预测任务中提供了conv2d_transpose
的替代方案。它还允许我们在不增加参数数量或计算量的情况下有效地扩大过滤器的视野。
有关 atrous 卷积的说明以及如何将其用于密集特征提取,请参阅:(Chen et al., 2015)。 (Yu et al., 2016) 进一步研究了相同的操作。以前以不同方式有效使用空洞卷积的作品包括 (Sermanet et al., 2014) 和 (Giusti et al., 2013)。 Atrous 卷积也与multi-rate 信号处理中的so-called 高贵身份密切相关。
有许多不同的方法可以实现空洞卷积(参见上面的参考文献)。这里的实现减少了
atrous_conv2d(value, filters, rate, padding=padding)
到以下三个操作:
paddings = ...
net = space_to_batch(value, paddings, block_size=rate)
net = conv2d(net, filters, strides=[1, 1, 1, 1], padding="VALID")
crops = ...
net = batch_to_space(net, crops, block_size=rate)
高级用法。请注意以下优化:具有相同 rate
参数、'SAME' padding
和奇数高度/宽度的过滤器的 atrous_conv2d
操作序列:
net = atrous_conv2d(net, filters1, rate, padding="SAME")
net = atrous_conv2d(net, filters2, rate, padding="SAME")
...
net = atrous_conv2d(net, filtersK, rate, padding="SAME")
在计算和内存方面可以等效地执行更便宜的操作:
pad = ... # padding so that the input dims are multiples of rate
net = space_to_batch(net, paddings=pad, block_size=rate)
net = conv2d(net, filters1, strides=[1, 1, 1, 1], padding="SAME")
net = conv2d(net, filters2, strides=[1, 1, 1, 1], padding="SAME")
...
net = conv2d(net, filtersK, strides=[1, 1, 1, 1], padding="SAME")
net = batch_to_space(net, crops=pad, block_size=rate)
因为当它们各自的paddings
和crops
输入相同时,一对具有相同block_size
的连续space_to_batch
和batch_to_space
操作会抵消。
参考:
Multi-Scale 通过扩张卷积进行上下文聚合:Yu et al., 2016 (pdf) Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs: Chen et al., 2015 (pdf) OverFeat - Integrated Recognition, Localization and Detection using Convolutional Networks : Sermanet et al., 2014 (pdf) Fast Image Scanning with Deep Max-Pooling Convolutional Neural Networks: Giusti et al., 2013 (pdf)
相关用法
- Python tf.nn.embedding_lookup_sparse用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.set_weights用法及代码示例
- Python tf.nn.dropout用法及代码示例
- Python tf.nn.gelu用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.set_weights用法及代码示例
- Python tf.nn.embedding_lookup用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.get_weights用法及代码示例
- Python tf.nn.local_response_normalization用法及代码示例
- Python tf.nn.scale_regularization_loss用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.add_loss用法及代码示例
- Python tf.nn.max_pool用法及代码示例
- Python tf.nn.RNNCellDropoutWrapper.set_weights用法及代码示例
- Python tf.nn.l2_loss用法及代码示例
- Python tf.nn.log_softmax用法及代码示例
- Python tf.nn.weighted_cross_entropy_with_logits用法及代码示例
- Python tf.nn.ctc_greedy_decoder用法及代码示例
- Python tf.nn.dilation2d用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.get_weights用法及代码示例
- Python tf.nn.compute_average_loss用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.nn.atrous_conv2d。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。