tf.nn.atrous_conv2d
| Просмотреть исходный код на GitHub |
Атропное свёрточное преобразование (также известное как свёртка с дырами или расширенная свёртка).
tf.nn.atrous_conv2d(
value, filters, rate, padding, name=None
)
Эта функция представляет собой более простой оберточный интерфейс для более общей функции tf.nn.convolution и существует только для обратной совместимости. Вы можете использовать tf.nn.convolution для выполнения атропного свёрточного преобразования 1-D, 2-D или 3-D.
Вычисляет 2-D атропное свёрточное преобразование, также известное как свёртка с дырами или расширенная свёртка, для 4-мерных value и filters тензоров. Если параметр rate равен единице, выполняется обычная 2-D свёртка. Если параметр rate больше единицы, выполняется свёртка с дырами, выбирая значения входных данных каждые rate пикселей в height и width измерениях. Это эквивалентно свёртке входных данных с набором масштабированных фильтров, полученных путём вставки rate - 1 нулей между двумя последовательными значениями фильтров вдоль height и width измерений, откуда и название атропной свёртки или свёртки с дырами (французское слово 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]
)
Атропное свёрточное преобразование позволяет нам явно контролировать плотность вычисления ответов признаков в полносвязных нейронных сетях. В сочетании с билинейной интерполяцией оно предлагает альтернативу conv2d_transpose в задачах плотной классификации, таких как семантическая сегментация изображения, вычисление оптического потока или оценка глубины. Оно также позволяет нам эффективно расширить область обзора фильтров без увеличения количества параметров или объёма вычислений.
Для описания атропного свёрточного преобразования и способов его использования для плотной экстракции признаков см. (Chen et al., 2015). Та же операция более подробно исследована в (Yu et al., 2016). Ряд работ, эффективно использующих атропное свёрточное преобразование различными способами, включают, помимо прочего, (Sermanet et al., 2014) и (Giusti et al., 2013). Атропное свёрточное преобразование также тесно связано с так называемыми «благородными тождествами» в обработке многоскоростных сигналов.
Существует множество различных способов реализации атропного свёрточного преобразования (см. вышеприведённые ссылки). Реализация здесь сводится
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)
Расширенное использование. Обратите внимание на следующую оптимизацию: последовательность операций atrous_conv2d с идентичными параметрами rate, режимом padding, и фильтрами с нечётными высотами/ширинами:
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)
потому что пара последовательных операций space_to_batch и batch_to_space с одинаковыми параметрами block_size сокращается при совпадении соответствующих входных данных paddings и crops.
| Аргументы | |
|---|---|
value | 4-мерный Tensor типа float. Он должен быть в формате по умолчанию "NHWC". Его форма — [batch, in_height, in_width, in_channels]. |
filters | 4-мерный Tensor с тем же типом, что и value и формой [filter_height, filter_width, in_channels, out_channels]. filters измерение in_channels должно соответствовать размерности value. Атропное свёрточное преобразование эквивалентно стандартному свёрточному преобразованию с масштабированными фильтрами с эффективной высотой filter_height + (filter_height - 1) * (rate - 1) и эффективной шириной filter_width + (filter_width - 1) * (rate - 1), полученных путём вставки rate - 1 нулей вдоль последовательных элементов по пространственным измерениям filters. |
rate | Положительное целое число int32. Шаг, с которым мы выбираем входные значения по height и width измерениям. Эквивалентно, скорость, с которой мы масштабируем значения фильтра, вставляя нули вдоль height и width измерений. В литературе тот же параметр иногда называется input stride или dilation. |
padding | Строка, либо 'VALID' или 'SAME'. Алгоритм заполнения. Для получения дополнительной информации см. здесь. |
name | Необязательное имя возвращаемого тензора. |
| Возвращаемое значение | |
|---|---|
Тензор Tensor с тем же типом, что и value. Форма вывода с заполнением 'VALID' выглядит так: [batch, height - 2 * (filter_width - 1), width - 2 * (filter_height - 1), out_channels]. Форма вывода с заполнением [batch, height, width, out_channels]. |
| Исключения | |
|---|---|
ValueError | Если глубина входных/выходных данных не соответствует форме filters, или если заполнение отличается от 'VALID' или 'SAME'. |
Ссылки:
Мультимасштабная агрегация контекста с помощью расширенных свёрток: Yu et al., 2016 (pdf) Семантическая сегментация изображений с помощью глубоких свёрточных сетей и полностью соединённых CRFs: Chen et al., 2015 (pdf) OverFeat — интегрированное распознавание, локализация и обнаружение с помощью свёрточных сетей: Sermanet et al., 2014 (pdf) Быстрое сканирование изображений с помощью глубоких свёрточных нейронных сетей с максимальным пулингом: Giusti et al., 2013 (pdf)
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/nn/atrous_conv2d