tf.nn.atrous_conv2d
Атронное свёртку (также известная как свёртка с отверстиями или дилатационная свёртка).
tf.nn.atrous_conv2d(
value, filters, rate, padding, name=None
)
Эта функция — это более простой обертка вокруг более общей tf.nn.convolution и существует только для обеспечения обратной совместимости. Вы можете использовать tf.nn.convolution для выполнения атронной свёртки по 1, 2 или 3 осям.
Вычисляет атронную свёртку 2-го порядка (также известную как свёртка с отверстиями или дилатационная свёртка) для заданных 4-мерных value и filters тензоров. Если параметр rate равен единице, выполняется обычная свёртка 2-го порядка. Если параметр 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, 'SAME' 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 - rate * (filter_width - 1), width - rate * (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/api_docs/python/tf/nn/atrous_conv2d