В прошлом посте мой робот распознавал предметы нейросетями. Обе — CNN, свёрточные сети.
Свёртка — это табличка 3×3 числа, которая скользит по картинке. В каждой позиции умножает свои 9 чисел на 9 пикселей под собой, складывает — получает одно число. Прошлась по всей фото — вышла новая «картинка», карта признаков.
def convolve(img, kernel):
H, W = img.shape
out = np.zeros((H-2, W-2))
for y in range(H-2):
for x in range(W-2):
out[y, x] = (img[y:y+3, x:x+3] * kernel).sum()
return out
kernel = np.array([[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]]) # искатель вертикальных краёв
На картинке к посту — мой кот, пропущенный через этот код.Справа — что видит первый слой сети: контур, усы, текстура шерсти.
-Числа в ядрах CNN подбирает сама, обучаясь на фото.
-Слои ставятся друг на друга. Первый из пикселей собирает края, второй - дуги и текстуры
Нейросеть не «видит» кота, она видит края.
