티스토리 뷰

카테고리 없음

1/19 회고

clearlyhunch 2021. 1. 19. 22:59

Convolution 연산을 사용하는 곳은 AI가 부상하면서 영상처리에만 국한된 것이 아니라 범용적 사용으로 범위가 넓어졌다.

이에 Convolution 연산을 정리해보았다.

Convolution은 Input으로 들어온 행렬에 Kernel을 이동시키면서 연산하는 것을 의미한다.

아래와 같은 예시가 존재한다고 하자.

그림 1

그럴 경우 Kernel을 좌측 상단부터 시작해서 이동하면서 내부의 값을 곱하기 시작한다.

아래 그림들과 같이 좌측부터 우측으로 이동하고, 끝까지 도달한다면 다시 아래로 내려서 다시 옆으로 이동하면서 연산을 한다.

그림 2의 연산을 수행한다고 하

0*0 + 1*1 + 2*2 + 5*3 + 6*4 + 7*5 + 0*6 + 1*7 + 2*8

= 0 + 1 + 4 +15 + 24 + 35 + 0 + 7 + 16 = 102

이렇게 102라는 값을 얻을 수 있다.

이 결과는 그림 6과 같은 위치에 적히게 된다.

그림 2
그림 3
그림 4
그림 5
그림 6

이와 같은 연산을 수행하는 것이 Convolution 연산의 기초이다.

만약 Input으로 들어오는 행렬에서 Channel의 값이 증가해서 그림 7과 같이 변했다고 해보자.

그럼 결과는 그림 7과 같이 되느냐? 아니다. 그림 8과 같이 변한다.

그림 7
그림 8

이는 동일한 값을 가졌다고 가정했을 때 이를 동시에 같은 위치에 있는 값끼리 곱한 것을 모든 채널과 행, 열에 대해서 수행한 후 더하였기 때문에 이런 결과를 나타내고 있다.

 

이런 연산은 딥러닝, 영상처리 등에서 특징을 추출하는 것으로 응용할 수 있다.

 

딥러닝에서는 Input으로 들어오는 값에 특정한 Kernel들을 여러가지로 씌워서 Output의 channel을 증가시키고 여기에 다시 다른 Kernel들을 Convolution하는 것을 중첩하여 모델이라 불리는 형태를 만들고 최종적으로 나온 결과를 Softmax와 같이 종합하여 활용할 수 있다.

Input에서 어떤 특징을 가졌는 지를 특정한 Kernel 즉, 필터를 씌워서 추출하고 이 값들을 잘 활용하여 특징을 가진 것들의 확률 등을 종합한다고 할 수 있겠다.

 

영상처리에서는 Input으로 들어오는 값을 특정한 Kernel 등으로 처리하여 특징을 두드러지게 표현한다거나 물체를 인식하는 식으로 응용할 수 있다.

 

Convolution 연산을 중첩해서 실행한다면 Output으로 나오는 값은 계속 크기가 줄어들게 된다.

이를 방지하고자 Input에서 크기를 증가시켜서 Output의 값이 Input의 크기를 가지게끔 하는 방법인 Padding이 존재한다.

 

그리고 이런 연산을 병렬성을 통해서 효율적으로 동작할 수 있도록 하는 GEMM(GEneral Matrix Multiplication)이 존재하는데 최근에는 NVIDIA의 GPGPU와 같은 코어가 굉장히 많아서 이런 Convolution연산을 한번에 처리하는 것이 더 효율적인 경우도 있기에 선택에 따라서 사용한다.

 

생각보다 정리한 것을 그림으로 그리면서 적고자 하니 시간이 많이 걸려서 기초적인 내용을 그림으로 설명하고, 자세하게 들어가는 내용은 정리만 하였다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함