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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。