简单二维卷积(Simple 2D Convolution)是一种常用的卷积操作,其计算公式为:
其中,是输入图像,
是卷积核,
是输出图像。
通俗点来说,就是将卷积核在输入图像上滑动,计算每个位置的卷积结果,从而实现图像的特征提取,利用padding和stride保证卷积核在输入图像的边缘也能进行卷积操作。
标准代码如下
def simple_conv2d(input_matrix: np.ndarray, kernel: np.ndarray, padding: int, stride: int):
input_height, input_width = input_matrix.shape
kernel_height, kernel_width = kernel.shape
padded_input = np.pad(input_matrix, ((padding, padding), (padding, padding)), mode='constant')
input_height_padded, input_width_padded = padded_input.shape
output_height = (input_height_padded - kernel_height) // stride + 1
output_width = (input_width_padded - kernel_width) // stride + 1
output_matrix = np.zeros((output_height, output_width))
for i in range(output_height):
for j in range(output_width):
region = padded_input[i*stride:i*stride + kernel_height, j*stride:j*stride + kernel_width]
output_matrix[i, j] = np.sum(region * kernel)
return output_matrix