boostcamp AITech

[12일차] CNN 기어가기

라이크나우 2021. 2. 3. 01:45

강의는 CNN 첫걸음 이라고 하셨는데 아무래도... 아직 못 걷는거 같아서 기어가기로 바꿨다 하하

Convolution 연산 먼저 이해해보자. 그닥 어렵진 않다. 다행히 바로 직전 학기에 영상정보처리에서 배웠던 내용이다.

 

지금까지 배운 MLP은 각 뉴런들이 선형모델과 활성함수로 모두 연결되어 있는 구조였다.

 

그러니까 나의 raiknow.tistory.com/77 그림을 가져오자면 (어쩌다보니 이전글이 아니라 다음글이네)

👆노란선 먼저 연산하고 빨간줄 그 다음에 연산하고..그 결과 아래와같은 모양새가 나온다.

임성빈 교수님 강의 자료

👆w 행을 차례차례 훑어 나가면서 결과물을 내는거다.

그렇게 하면 weight 행렬이 너무 커지게 된다. 그래서 이걸 줄이기 위해 convolution 연산을 한다.

임성빈 교수님 강의 자료

👆커널(kernel)을 입력벡터 상에서 움직여 가면서 선형 모델과 합성함수를 적용하는거다!

커널 크기에 맞춰서 적용되는 입력값들도 잘린다.

 

식은..생략하고

convolution 연산의 수학적 의미는 신호를 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링하는 것이다.

(사실 CNN에서 사용하는 연산은 convolution이 아니고 cross-correlation인데 그냥 관용적으로 컨볼루션이라고 한다고 한다!)

 

 

wikipedia - convolution

👆너무 설명이 잘 된 그림을 위키에서 가져왔다.

두 함수를 합성하면서 모양이 바뀌는걸 알 수 있을거다.

 

영상처리에서는 마스크를 씌우는거랑 동일한 효과를 낸다.

이건 강의자료 설명이 너무 어려워서 마스크에 관련된 설명만 좀 남기는게 나은 것 같다.

 

마스크를 씌운다는 말이란 뭐냐면,

이거다, 3*3의 마스크(커널)을 성분곱해서 새로운 값을 가진 픽셀을 만든다!

 

 

 

이런 마스크를 씌우면 주위 픽셀 값들과의 평균값으로 변환되어 blurring 효과를 준다.

 

 

 

 

 

이건 이웃 화소끼리의 차이를 크게 해서 날카로운 느낌이 들게 한다.

영상의 세세한 부분이 강조되고 경계 부분에서 명암대비가 증가되는 sharpening효과를 준다.

 

 

 

 

이 마스크는 1차 미분의 효과를 주어서

edge detection을 하게 해준다. 수식 없이 밑의 그림을 보면 이해할 수 있을거다.

 

 

 

 

 

 

 

이렇게 미분을 하면 테두리를 알 수 있다!

 

 

 

 

 

 

 

2차원 convolution에 대한 내용은 이 쯤 하고

3차원에서도 물론 연산이 가능하다. 2차원 convolution을 3번 적용한다고 생각하면 된다.

 

 

convolution 연산의 역전파

역전파를 계산할 때도 convolution연산이 나오게 된다!

각 커널에 들어오는 모든 그레디언트를 더하면 결국 convolution 연산과 같아지기 때문에 단순히 

이런 식으로 간단하게 역전파를 계산할 수 있다!

 

드디어 끝~!