Проще говоря, операция свертки представляет собой комбинацию поэлементного произведения двух матриц. Пока эти две матрицы совпадают по размерам, проблем не должно быть, и поэтому я могу понять мотивацию вашего запроса.
A.1. Однако целью свертки является кодирование матрицы исходных данных (всего изображения) в терминах фильтра или ядра. Более конкретно, мы пытаемся кодировать пиксели в окрестности пикселей привязки / источника. Посмотрите на рисунок ниже: как
правило, мы рассматриваем каждый пиксель исходного изображения как пиксель привязки / источника, но мы не обязаны делать это. На самом деле, нередко включать шаг, где якорь / исходные пиксели разделены определенным количеством пикселей.
Итак, каков исходный пиксель? Это точка привязки, в которой центрируется ядро, и мы кодируем все соседние пиксели, включая пиксель привязки / источника. Поскольку ядро имеет симметричную форму (не симметричную по значениям в ядре), имеется одинаковое количество (n) пикселей со всех сторон (4-связность) пикселя привязки. Поэтому, каким бы ни было это количество пикселей, длина каждой стороны нашего ядра симметричной формы составляет 2 * n + 1 (каждая сторона якоря + пиксель якоря), и, следовательно, фильтр / ядра всегда имеют нечетные размеры.
Что если мы решили порвать с «традицией» и использовать асимметричные ядра? Вы будете страдать от ошибок псевдонимов, и поэтому мы этого не делаем. Мы считаем пиксель самой маленькой сущностью, то есть здесь нет подпиксельной концепции.
А.2. Граничная проблема решается с использованием разных подходов: некоторые игнорируют ее, некоторые обнуляют ее, некоторые отражают ее. Если вы не собираетесь вычислять обратную операцию, то есть деконволюцию, и не заинтересованы в идеальной реконструкции исходного изображения, то вам нет дела до потери информации или введения шума из-за проблемы с границами. Как правило, операция объединения (среднее или максимальное объединение) в любом случае удалит ваши граничные артефакты. Поэтому не стесняйтесь игнорировать часть своего «поля ввода», ваша операция объединения сделает это за вас.
-
Дзен свертки:
В области обработки сигналов старой школы, когда входной сигнал был свернут или пропущен через фильтр, не было возможности заранее определить, какие компоненты свернутого / отфильтрованного ответа были релевантными / информативными, а какие - нет. Следовательно, целью было сохранить компоненты сигнала (все это) в этих преобразованиях.
Эти компоненты сигнала являются информацией. Некоторые компоненты более информативны, чем другие. Единственная причина этого заключается в том, что мы заинтересованы в извлечении информации более высокого уровня; Информация, относящаяся к некоторым семантическим классам. Соответственно, те компоненты сигнала, которые не предоставляют информацию, в которой мы заинтересованы, могут быть исключены. Поэтому, в отличие от догм старой школы о свертке / фильтрации, мы свободны объединять / сокращать реакцию свертки, как нам хочется. Мы стремимся к тому, чтобы тщательно удалить все компоненты данных, которые не способствуют улучшению нашей статистической модели.
1) Предположим,
input_field
что все ноль, кроме одной записи в индексеidx
. Нечетный размер фильтра будет возвращать данные с пиком по центруidx
, а четный размер фильтра не будет - рассмотрим случай однородного фильтра с размером 2. Большинство людей хотят сохранить расположение пиков при фильтрации.2) Все
input_field
это относится к свертке, но граниoutput_field
не могут быть точно рассчитаны, так как необходимые данные не содержатся вinput_field
. Если я хочу вычислить ответ для первого элементаoutput_field
, фильтр должен быть центрирован на первом элементеinput_field
. Но тогда есть элементы фильтра, которые не соответствуют ни одному доступному элементуinput_field
. Существуют различные приемы, чтобы угадать краяoutput_field
.источник
Для фильтра нечетного размера все пиксели предыдущего слоя будут симметрично относительно выходного пикселя. Без этой симметрии нам придется учитывать искажения в слоях, которые происходят при использовании ядра четного размера. Поэтому фильтры ядра четного размера в основном пропускаются, чтобы обеспечить простоту реализации. Если вы думаете о свертке как об интерполяции от заданных пикселей к центральному пикселю, мы не можем интерполировать к центральному пикселю, используя фильтр четного размера.
источник: https://towardsdatascience.com/deciding-optimal-filter-size-for-cnns-d6f7b56f9363
источник