TensorFlow函數:tf.nn.atrous_conv2d

2019-01-31 11:28 更新

tf.nn.atrous_conv2d函數

tf.nn.atrous_conv2d(
    value,
    filters,
    rate,
    padding,
    name=None
)

定義在:tensorflow/python/ops/nn_ops.py.

請參閱指南:神經網絡>卷積運算

Atrous卷積.

此函數是更通用的tf.nn.convolution的更簡單的包裝器,僅用于向后兼容.您可以使用tf.nn.convolution來執(zhí)行1-D,2-D或3-D動態(tài)卷積.

在給定4-D value和filters張量的情況下,計算二維動態(tài)卷積,也稱為帶孔的卷積或擴大的卷積.如果rate參數等于1,則執(zhí)行常規(guī)的2-D卷積.如果rate參數大于1,則執(zhí)行帶孔的卷積,對height和width維度中的每個rate像素采樣輸入值.這相當于用一組上采樣濾波器將輸入卷積,這些濾波器是通過沿著height和width維度在濾波器的兩個連續(xù)值之間插入rate - 1零來產生的,因此名稱是atrous卷積或帶孔的卷積.

進一步來說:

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卷積及其如何用于密集特征提取的描述,請參閱:使用深度卷積網絡和完全連接的CRF進行語義圖像分割.通過擴張卷積的多尺度上下文聚合中進一步研究相同的操作.以前以不同方式有效使用atrous卷積,包含:OverFeat:使用卷積網絡進行集成識別,定位和檢測以及使用深度最大池匯聚神經網絡的快速圖像掃描.

有許多不同的方法可以實現atrous卷積(參見上面的參考文獻).這里的實現減少了:

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)

高級用法.請注意以下優(yōu)化:具有相同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")

可以在計算和內存方面等效地執(zhí)行:

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的連續(xù)的space_to_batch和batch_to_space操作會抵消.

參數:

  • value:類型為float的4-D Tensor,它需要采用默認的“NHWC”格式,它的形狀是[batch, in_height, in_width, in_channels].
  • filters:4-D Tensor與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的空間維度上沿著連續(xù)元素插入rate - 1零來產生.
  • rate:正的int32.我們在整個height和width維度上對輸入值進行采樣的步幅.等效地,我們通過在height和width維度上插入零來上采樣過濾器值的速率.在文獻中,有時稱相同的參數為input stride或dilation.
  • padding:一個字符串,'VALID'或者'SAME',填充算法.
  • name:返回張量的可選名稱.

返回:

與value具有相同類型的Tensor.帶有'VALID``填充的輸出形狀是:

[batch, height - 2 * (filter_width - 1),
 width - 2 * (filter_height - 1), out_channels]

帶'SAME'填充的輸出形狀是:

[batch, height, width, out_channels]

可能引發(fā)的異常:

  • ValueError:如果輸入/輸出深度與filters形狀不匹配,或者填充不是'VALID'或者'SAME'.
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號