관리 메뉴

코딩하는 락커

[Week3] 합성곱 신경망 / 모서리 감지 예시 본문

[2020] 📚 DSC 겨울방학 스터디

[Week3] 합성곱 신경망 / 모서리 감지 예시

락꿈사 2020. 1. 20. 17:28

https://youtu.be/XuD4C8vJzEQ

합성곱 신경망 CNN을 만들기 위해선 합성곱 작업을 해야한다. 넘 당연한 얘기다.

 

모서리 감지를 통해 합성곱이 어떻게 작용하는지 알아보자!

 


 컴퓨터가 사진을 인식하게 하기 위해 하는 첫 번째 일은 이미지에서 '수직인 모서리'를 찾는 것이다.

 

수직인 모서리를 찾았다면 다음으로는 '수평인 모서리'를 찾아야 한다.

 

그러면 이 모서리를 대체 어떻게 찾는 걸까?

 

 

여기에 6x6짜리 그레이 스케일의 이미지가 있다고 할 때, 이 이미지의 수직 모서리를 알기 위해서는 우선 합성곱 신경망에서 '필터'라고 불리는 3x3짜리 행렬을 만들어야 한다.

 

필터를 만들었으면 10-110-110-1을 입력한 뒤, 6x6이미지와 합성곱==Convolution==*을 해준다. 

 

합성곱의 결과로 4x4의 이미지가 나온다. 

 

4x4의 이미지는 어떻게 나오냐면, 위 그림에서 보이는 요소들(파란색으로 칠해진 부분)을 모두 곱하는 것이다.

 

그래서 3x1+1x1+2x1+0x0+5x0+7x0+1x-1+8x-1+2x-1=5가 나온다.

 

그럼 이제 위 그림의 4x4행렬에 초록색 박스 부분의 값은 5!가 되는 것이다. 휴 길다 길어.


같은 방식으로 Convolution계산을 모두 마치면 아래와 같은 결과가 나오는 것이다.

 

이러한 합성곱을 사용할 경우 파이썬에서 ConvForward라는 함수를, 텐서플로우에서는 tt.nn.conv2d 함수를, keras에서는 Conv2d 함수를  사용하면 된다.

 

그렇다면 왜 합성곱을 하면 모서리를 인식할 수 있다는 걸까??

 


위 그림같은 6x6 이미지가 있을 때, 가운데에는 세로 경계선이 생겨서 색상, 혹은 밝기의 급격한 변화가 생긴다.

 

그리고 3x3 필터는 흰회검으로 표현할 수 있다.

 

두 행렬의 합성곱 결과는 위 그림의 4x4 행렬로 나타낼 수 있는데, 6x6 행렬의 초록 박스 부분을 계산한 결과는 0이고, 빨간 박스 부분을 계산한 결과는 30이 나오기 때문이다. 

 

그리고 4x4 행렬의 이미지는 회흰회로 표현할 수 있다. 하얀 부분이 가운데에 있는 형태이다.

 

그리고 이 때! 이 흰색 부분이 바로 6x6 이미지의 세로 경계선에 해당하는 부분이다.

 

결국 결과 이미지의 밝은 부분이 원본 이미지의 경계선을 나타낸다~ 이말이다.

'[2020] 📚 DSC 겨울방학 스터디' 카테고리의 다른 글

[Week3] 입체형 이미지에서의 합성곱  (0) 2020.01.31
[Week3] 스트라이드  (0) 2020.01.24
[Week3] 패딩  (0) 2020.01.24
[Week3] 더 많은 모서리 감지 예시  (0) 2020.01.21
[Week3] 컴퓨터 비전  (0) 2020.01.20
Comments