numpy.einsum을 이용한 빠른 2d convolution 연산 (conv2d)예제 코드
본 포스트는 numpy.einsum을 사용하여 2차원 합성곱 연산을 수행하는 예제 코드를 싣고 있다. 단순 연산을 사용한 2차원 합성곱 단순히 for loop를 사용하여 아래처럼 2차원 합성곱 연산을 수행할 수 있다. import numpy as np def conv2d(image, kernel): kernel = np.flipud(np.fliplr(kernel)) #XCorrel output = np.zeros(np.subtract(image.shape, kernel.shape)) for y in range(output.shape[1]): for x in range(output.shape[0]): output[x, y] = (kernel * image[x: x + kernel.shape[0], y: y + kernel.shape[1]]).sum() return output 하지만, 위 경우 image의 크기가 커지면 연산양이 많아져 수행 속도가 느려지게 된다. numpy.einsum을 사용한 2차원 합성곱 빠른 속도의 합성곱 연산을 원한다면, numpy.lib.stride_tricks.as_strided와 numpy.einsum을 사용하면 빠른 속도로 2차원 함성곱 연산을 수행할 수 있다. import numpy as np def conv2d_np(image, kernel): kernel = np.flipud(np.fliplr(kernel)) #XCorrel ...