當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python tf.nn.atrous_conv2d用法及代碼示例

Atrous 卷積(也稱為空洞卷積或擴張卷積)。

用法

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

參數

  • value float 類型的 4-D Tensor 。它需要采用默認的"NHWC" 格式。它的形狀是 [batch, in_height, in_width, in_channels]
  • filters 4-D Tensorvalue 具有相同類型和形狀 [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。我們在 heightwidth 維度上對輸入值進行采樣的步幅。等效地,我們通過在heightwidth 維度上插入零來對過濾器值進行上采樣的速率。在文獻中,有時將相同的參數稱為 input stridedilation
  • 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 valuefilters 張量,計算 2-D atrous 卷積,也稱為空洞卷積或擴張卷積。如果 rate 參數等於 1,則執行常規 2-D 卷積。如果 rate 參數大於 1,它將執行空洞卷積,在 heightwidth 維度中每個 rate 像素對輸入值進行采樣。這相當於將輸入與一組上采樣濾波器進行卷積,通過在 heightwidth 維度的濾波器的兩個連續值之間插入 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)

因為當它們各自的paddingscrops輸入相同時,一對具有相同block_size的連續space_to_batchbatch_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)

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.nn.atrous_conv2d。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。