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 в задачах плотной классификации, таких как семантическая сегментация изображений, вычисление оптического потока или оценка глубины. Она также позволяет нам эффективно расширить поле зрения фильтров без увеличения количества параметров или объёма вычислений.
Для описания атропной свёртки и того, как она может использоваться для плотной экстракции признаков, см.: Семантическая сегментация изображений с глубокими свёрточными сетями и полностью соединёнными CRFs. То же самое действие изучается далее в Агрегация контекста по нескольким масштабам с помощью расширенных свёрток. Ранние работы, которые эффективно использовали атропную свёртку различными способами, включают, помимо прочего, OverFeat: Интегрированное распознавание, локализация и обнаружение с помощью свёрточных сетей и Быстрое сканирование изображений с глубокими свёрточными нейронными сетями с максимальным пулингом. Атропная свёртка также тесно связана с так называемыми благородными тождествами в обработке сигналов с переменной скоростью.
Существует много различных способов реализации атропной свёртки (см. ссылки выше). Реализация здесь сокращается
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 "SAME", и фильтрами с нечётной высотой/шириной:
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 входные данные идентичны.
| Args | |
|---|---|
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 | Необязательное имя для возвращаемого тензора. |
| Returns | |
|---|---|
A Tensor с тем же типом, что и value. Форма выходных данных с 'VALID' заполненинем: [batch, высота - 2 * (ширина_фильтра - 1), ширина - 2 * (высота_фильтра - 1), кол-во_каналов_выхода]. Форма выходных данных с [batch, высота, ширина, кол-во_каналов_выхода]. |
| Raises | |
|---|---|
ValueError | Если глубина входных/выходных данных не соответствует форме filters или если заполнение не соответствует 'VALID' или 'SAME'. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/nn/atrous_conv2d