Я пытаюсь понять концепцию фильтров в компьютерном зрении. Я понимаю, что они делают, например, они могут быть использованы для уменьшения размерности входного изображения и так далее ....
Я застрял в том, откуда берутся эти фильтры?
Например, я смотрел учебник, который показывает, что для определения вертикальной линии / края мы можем использовать фильтр 3x3 формы [ [-1, 0 , 1], [-1, 0 , 1], [-1, 0 , 1] ]
... как мы получили эту матрицу?
Даже используя Keras, мне нужно было только передать количество фильтров, которые я хочу использовать
model.add(Conv2D(64, (3, 3), padding='same', input_shape=x_train.shape[1:]))
где 64 - количество фильтров, которые я хочу применить к входным данным ... но как Keras или любая другая библиотека решают, какие числа будет содержать матрица фильтров? Я в замешательстве.
Скажем, у вас есть пространство ввода 1000 изображений каждое 36x36x3, где 3 - канал (один для R, G и B) ... это означает, что у нас есть 3 матрицы, представляющие каждое изображение ... в общей сложности это будет 1000 x 3 = 3000 матриц.
Теперь, если я хочу обнаружить края по всему изображению, под краем я подразумеваю контуры объектов, чтобы определить, является ли изображение ноутбуком или телефоном, как это действительно происходит в сети? Является ли концепция нахождения ребер просто абстрактной, и все, что означает нахождение ребер, означает одинаковые числа / активации в схожих позициях в матрице, которую вы оцениваете, и тех, которые были помечены в пространстве ввода?
Итак, в заключение, как любая библиотека машинного обучения решает инициализировать эти фильтры? скажем для нашего примера, я хочу применить фильтры 18x18x3, как будут выглядеть эти матрицы фильтров? как они применяются в начальных слоях и как они заполняются при использовании в глубокой сети?
Может кто-нибудь помочь мне понять?
Спасибо.