TensorFlow函數(shù):tf.nn.atrous_conv2d

2019-01-31 11:28 更新

tf.nn.atrous_conv2d函數(shù)

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

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

請(qǐng)參閱指南:神經(jīng)網(wǎng)絡(luò)>卷積運(yùn)算

Atrous卷積.

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

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

進(jìn)一步來(lái)說(shuō):

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卷積允許我們明確地控制在完全卷積網(wǎng)絡(luò)中計(jì)算特征響應(yīng)的密集程度.與雙線性插值結(jié)合使用,它為 conv2d_transpose 在密集的預(yù)測(cè)任務(wù)(如語(yǔ)義圖像分割、光流計(jì)算或深度估計(jì)) 中提供了一種替代方案.它還允許我們有效地?cái)U(kuò)大濾波器的視野,而不增加參數(shù)的數(shù)量或計(jì)算量.

有關(guān)atrous卷積及其如何用于密集特征提取的描述,請(qǐng)參閱:使用深度卷積網(wǎng)絡(luò)和完全連接的CRF進(jìn)行語(yǔ)義圖像分割.通過(guò)擴(kuò)張卷積的多尺度上下文聚合中進(jìn)一步研究相同的操作.以前以不同方式有效使用atrous卷積,包含:OverFeat:使用卷積網(wǎng)絡(luò)進(jìn)行集成識(shí)別,定位和檢測(cè)以及使用深度最大池匯聚神經(jīng)網(wǎng)絡(luò)的快速圖像掃描.

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

atrous_conv2d(value, filters, rate, padding=padding)

進(jìn)行以下三項(xiàng)操作:

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)

高級(jí)用法.請(qǐng)注意以下優(yōu)化:具有相同rate參數(shù),'SAME' padding和具有奇數(shù)高度/寬度的過(guò)濾器的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")

可以在計(jì)算和內(nèi)存方面等效地執(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)

因?yàn)楫?dāng)它們各自的paddings和crops輸入相同時(shí),一對(duì)具有相同block_size的連續(xù)的space_to_batch和batch_to_space操作會(huì)抵消.

參數(shù):

  • value:類型為float的4-D Tensor,它需要采用默認(rèn)的“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卷積等效于具有有效高度f(wàn)ilter_height + (filter_height - 1) * (rate - 1)和有效寬度f(wàn)ilter_width + (filter_width - 1) * (rate - 1)的高采樣濾波器的標(biāo)準(zhǔn)卷積,通過(guò)在filters的空間維度上沿著連續(xù)元素插入rate - 1零來(lái)產(chǎn)生.
  • rate:正的int32.我們?cè)谡麄€(gè)height和width維度上對(duì)輸入值進(jìn)行采樣的步幅.等效地,我們通過(guò)在height和width維度上插入零來(lái)上采樣過(guò)濾器值的速率.在文獻(xiàn)中,有時(shí)稱相同的參數(shù)為input stride或dilation.
  • padding:一個(gè)字符串,'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'.
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)