이미지는 숫자다
0~255 사이의 숫자
행렬(matrix)로 볼 수 있다.
컬러는 RGB(Red, Green, Blue)여서 채널(행렬)이 3개이다.
이미지(2D)에서의 콘볼루션
원본 이미지가 있고 커널과 콘볼루션하면 다음과 같이 표현할 수 있다.
element-wise multiplication
3x3커널과 콘볼루션하면 9개값이 나오는데, 이를 모두 더하면(summation) 결과값이 나온다.
계속 오른쪽으로 이동하면서 전체를 훑으면서 결과값을 얻는다.
이미지도 matrix
커널도 matrix
아웃풋도 matrix
이미지가 커널을 통해서 또 다른 이미지(행렬)가 된 것이다.
커널을 다르게 디자인 함으로써, smoothing, sharpening, edge enhancement등 다양하게 할 수 있다.
원하는 features를 강조하거나 제거할 수 있는 것이다.
커널은 아래와 같이 고정되어 있다. 커널이 shifting이 되고 있다.
$ \begin {bmatrix} 1&0&1 \\ 0&1&0 \\ 1&0&1 \end{bmatrix} $
Convolution과 Cross-correlation
1D Signal에서는 Convolution과 Cross-correlation이 다르다.
2D Signal에서는 원본이미지의 좌우가 크게 의미가 없다.
커널을 뒤집는 것이 상관이 없다.
1D는 하나의 축이 time의 개념이고
2D는 space의 개념이라 reverse라는 개념이 중요해지지 않는다.
time에서는 reverse가 중요해진다.
공간 상에서는 Convolution과 Cross-correlation이 같은 의미이다.
커널의 예시
위 사진에서 첫번째 빨간박스에서 콘볼루션을 하면
왼쪽과 오른쪽의 값이 비슷하니 거의 값이 0이 나올 것이다.
아래 조그만 박스에서는 왼쪽과 오른쪽의 값의 차이가 클 것이고...
모자쪽 박스에서는 값이 비슷하니까 값이 0이 나올것이다.
첫번째 커널의 역할은...
edge detection x방향으로 horizontal하게..
마찬가지로 위와 같은 필터를 취하면
첫번째 빨간박스에서는 거의 0일 것이고
모자쪽 박스에서는 값이 크게 나올 것이고...
아래 박스에서는 값이 0이 나올 것이다.
vertical하게 edge detection이 가능하다고 추론할 수 있을 것이다.
위의 과정은 다음과 같다.
$ input \rightarrow designed\,kernel \rightarrow output $
최종적으로 말하고 싶은 것은
딥러닝은
$ input $과 $ output $를 가지고 $designed\,kernel$을 찾아 달라고 요구하는 과정인 것이다.
numpy와 PIL을 사용하여 smoothing
Gaussian Filter : Blurring
이제 반대 방향으로의 접근 방향을 생각하면.
커널을 디자인하는 것이 아니라, 데이터로부터 커널을 찾자.
여기서 데이터는 $input$과 $output$을 말한다.
딥러닝은
데이터에서 feature extractor를 배우는 것이니..
CNN이라는 것은 kernel의 element값을 찾는 것이다.
'머신러닝과 딥러닝' 카테고리의 다른 글
콘볼루션에서의 커널 (0) | 2020.01.07 |
---|---|
콘볼루션 뉴럴 네트워크(Convolution Neural Networks) (0) | 2020.01.07 |
콘볼루션의 정의와 예시 (0) | 2020.01.06 |
퍼셉트론(Perceptron)은 왜 동작을 하는가? (0) | 2020.01.06 |
퍼셉트론(Perceptron) (3) (0) | 2020.01.06 |