🔗 관련 문서: Wikipedia - Convolutional Neural Network · Wikipedia - Image Processing Kernel
합성곱은 이미지에서 의미 있는 특징(Feature)을 추출하기 위해 작은 행렬(필터·커널)을 이미지 위로 슬라이딩 하며 각 위치에서 원소별 곱과 합산을 수행해 새로운 행렬인 특징 맵(Feature Map)을 만드는 연산이다.
합성곱은 이미지의 국소 영역(local receptive field)을 살펴보며 테두리, 모서리, 곡선과 같은 패턴을 검출한다. 얕은 층에서는 선·엣지 같은 단순 특징을, 깊은 층으로 갈수록 사물의 부위·윤곽 등 고차 특징을 학습한다.
입력 크기가 H×W
, 커널 크기가 k_h×k_w
, 보폭(stride) s
, 패딩 p
일 때
유효(valid) 합성곱의 출력 크기는 다음과 같다.
out_h = floor((H - k_h + 2p) / s) + 1 out_w = floor((W - k_w + 2p) / s) + 1
딥러닝 프레임워크의 기본 구현은 커널을 뒤집지 않는 상관(cross-correlation) 방식을 주로 사용한다.
입력과 커널, 그리고 결과 특징 맵을 아래 표처럼 계산한다.
입력(5×5) 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 0 커널(3×3) — 세로 엣지 감지 -1 0 1 -1 0 1 -1 0 1 출력 특징 맵(3×3) 2 0 -2 3 2 -2 3 1 -2
예: 좌상단 3×3 윈도우와의 원소별 곱의 합은 2가 된다.
코딩: MATLAB 합성곱 연산 예시
>> k = [-1, 0, 1; -1, 0, 1; -1, 0, 1] k = -1 0 1 -1 0 1 -1 0 1 >> f1 = [1 1 1; 0 1 1; 0 0 1] f1 = 1 1 1 0 1 1 0 0 1 >> f1.*k ans = -1 0 1 0 0 1 0 0 1 >> sum(sum(f1.*k)) ans = 2