커널의 사전적 의미는 "알맹이, 핵심" 이라는 뜻을 가지고 있다. 하지만 개발자로서 우리는 리눅스와 같은 컴퓨터 운영 체제(OS)에서 들어본 적이 있을 것이다. 여기서 커널이란, 운영 체제의 주요 구성 요소로 하드웨어와 프로세스를 잇는 핵심 인터페이스이다. 커널이 운영 체제에서 핵심 역할을 하는 것과 같이, 이미지 특징 추출(feature extraction)에서 핵심적인 역할을 하는 것이 바로 이 커널이다. 우리는 다양한 커널을 사용해서 이미지의 특징들을 추출해 낼 수 있다.
이미지를 구성 하는 다양한 요소들이 존재하지만, 그 중 가장 중요한 것은 단연 이미지의 경계선이다. 엣지란, 이미지에 존재하는 픽셀들 중 갑자기 변하는 곳이다. 이는 이미지에 존재하는 객체의 경계를 가리키는 것으로, 이미지의 모양과 방향성 등 다양한 정보를 포함하고 있다. 이 경계선을 인지하는 것을 엣지 추출(edge detection) 이라고 한다.
엣지 추출은 그 변화의 정도를 판단하기 위해 이미지를 미분한 그레디언트(gradient) 벡터의 크기로 엣지를 판단한다.
그림을 보면, 밝기의 변화에 따라 기울기가 달라지게 된다. 이 데이터를 기반으로 아래 1차 미분과 같이 인접한 픽셀끼리의 차이를 취해서 얻은 gradient 값을 통해서 edge 를 판단 할 수 있다.
우리는 이와 같은 미분 방식을 마스크를 사용하여 구현 할 수 있다.
시각적으로 한 예시를 들자면, 아래와 같은 마스크를 사용하는 것이다.
대표적인 방법에는 Sobel, Prewitt, Robert Edge 등이 있다. 내가 이미지로부터 얻기를 원하는 특징이 무엇인가에 따라서 마스크를 다르게 사용하여 이미지 특징 추출을 하는 것이다.
https://setosa.io/ev/image-kernels/
위의 사이트에서 이미지에 다양한 마스크들을 적용하고 테스트 해볼 수 있다.
left sobel 방식의 경우, 수직 방향으로 왼쪽은 밝고 오른쪽은 어두운 부분을 엣지로 판별하는 데 사용되는 마스크이다.
실제로 이미지에 적용했을 때도, input image에서 왼쪽이 밝고 오른쪽은 어두운 부분에 마스크를 적용했을 때 output image에서 밝게 표시된 것을 볼 수 있다.
강아지 그림에 각각 left, right sobel 마스크를 적용했을 경우에도 아래에서 볼 수 있듯이 마스크 각자의 목적에 따라 다르게 엣지를 반환하게 된다.
1차 미분은 수평, 수직, 대각선 방향에 놓여진 엣지에서 민감한 반응을 보이는데, 너무 많은 윤곽선을 추출해 원하는 결과가 달라질 수 있다는 단점이 존재한다. 이를 보완하는 방법이 바로 2차 미분이다.
2차 미분의 알고리즘에는 Log, DoG, Laplacian 등이있다.
그러면 결국 이것은 어디에 사용이 되는걸까?
우리가 사용하는 Convolutional Neural Network 에서 layer 들을 넘어갈 때마다 이 weight 와 bias 들을 연산하게 되는데, 딥러닝에서는 이 연산되는 값들을 학습을 통해서 최적화 시키는 것이다. 그렇게된다면, 우리가 판별하려고 하는 목표의 특징들을 더 잘 찾아내는 마스크를 가지게 되고, 이를 통해서 판별기가 만들어지는 것이다.