AI 엔지니어 기초 다지기 - 6주차 - CNN - Convolution은 무엇인가?

hyonun·2024년 2월 19일
0

Convolution 이란?

  • signal processing에서 두개의 함수가 있을때 f,g라는 함수를 잘 섞어주는 방법으로 정의한다.

  • Discrete convolution

  • 2D image convolution

일반적으로 가장 기본적인 컨볼루션을 사용하면

도장을찍는다, 찍는다 등의
3x3 필터를 7x7이미지에 도장을 찍으면,

이런식으로 연속으로 찍게 되어서 5x5으로 변하게 되는것이다.

그럼 컨벌루션 오퍼레이션을 한다는 의미는?

  • 우리가 적용하고자 하는 필터의 모양에 따라 같은이미지에도 blur, Emboss(강조), Outline(외곽선)만 따는 것 과같이 여러가지가 가능하다.

3x3이미지값에 있는 평균이 다음 값 이미지에 있는 평균이 된다. (블러의 경우)

RGB Image Convolution

일반적으로 RGB이미지를 수학적으로 표현할때 tensor로 표현한다.

  • 일반적으로는 이미지가 들어가서 여러개의 필터를 거쳐서 feature가 나온다고 생각한다.

32x32x3 에 5x5x3 필터를 적용하면, output은 채널이 1이 된다.
이러한 필터가 4개가 된다면, output역시 28x28x4가 된다.

  • input채널과 output의 채널을 알면 여기에 적용된 컨볼루션 필터의 채널도 알 수 있다.

  • 이연산을 정의하는데 필요한 파라미터 숫자를 잘 생각해야한다.

32x32x3 -> 28x28x4로 얻기 위해 필요한 채널의 수는
4개의 5x5x3 이다.

28x28x4 -> 24x24x10 이 되려면
10개의 5x5x4가 되어야한다.

32a3x 32a2x 3a1
28b3x 28b2x 4b1
라고 불러보자.

커널의 사이즈 5x5에서 어떤 컨볼루션을때리는 인풋숫자 (a1)를 5x5x(?)에 넣어주고, 그리고 output의 b1값을 컨볼루션 채널개수로 잡아주면 된다.

ReLU:0보다 작은값은 0으로 바꿔버린다.0보다크면 그대로 쓰는.

일반적인 CNN은 convolution, pooling입력샘플링을 다운샘플링하여 공간차원을 줄인다., fully connected layer분류 및 회귀해서 값을 얻게해줌 가 있다.

일반적으로 Fully Connected 를 줄이고 있는 중이다.(하이퍼파라미터의 숫자를 줄이기위해)

일반적으로 몇개의 레이어, 몇개의 파라미터로 이루어지는지를 봐야한다.

  • 구글의 컨볼루션 폼을 한번 참고해봐라.

Stride

넓게 걷는다.

3x3컨볼루션.. 5x5컨볼루션은 모두가 Stride가 1이다.
kernel(커널)이 컨볼루션 1이다. 이게 한픽셀찍고 다른픽셀 옮겨찍고를 의미한다.
3짜리 채널 터널이있을때 아웃풋을 만들어보면 Stride가 1인경우에 5개의 output이 나오게 된다.


1씩 다닥다닥찍는것과 2칸씩 떨어져서 찍는것.

Stride는 내가 Convolution을 얼마나 Dense하게. 얼마나 촘촘하게 찍을지의 척도를 의미한다.

Output 사이즈를 구하는 수식

Convolution의 출력 크기를 구하는 수식은 다음과 같습니다:
(W - F) / S + 1
여기서,
W는 입력의 폭(가로 길이)입니다.
F는 필터(커널)의 크기(폭)입니다.
S는 스트라이드(Stride)입니다.
이를 이해하기 위해 간단한 예시를 들어보겠습니다. 입력의 크기가 10이고 필터의 크기가 3이며 스트라이드가 1인 경우를 생각해봅시다. 이 경우, 출력은 (10 - 3) / 1 + 1 = 8이 됩니다.
따라서 옳은 수식은:
(W - F) / S + 1

Padding

가장자리에도 convolution 오퍼레이션을 할 수 있도록 보정을 위해 덧대는 값을 의미한다.

구체적인 예시



3번째를 보면 1칸 이동했는데 아래 차원은 2칸을 이동했다. (Stride 2)
밖으로 삐져나오는 보정값이 없다(Padding 0)

내가 원하는 출력값에 맞춰서 Stride와 Padding을 설정할 수 있다.
Padding 은 잘려 나가는 보정값.
Stride는 건너뛰는 정도를 잘 확인해보자.

Convolution Arithmetic

파라미터 숫자를 계산해 보자.

Input은 40x50x128(a1) 이다.
Output은 40x50x64(b1)이다.
우리는 3x3(c1) Kernel 을 사용한다.

이 컨볼루션 레이어를 정의하기 위한 파라미터는 몇개일까?
(기본적으로 커널의 space a demension)

정답 :
64(b1)개 3x3(c1)x128(a1) = 73,728개

뒤에가서는 이런 계산이 자동으로 되어야한다.

파라미터 모양만 봐도 감이 생겨야 한다.

Exercise

지금의 딥러닝의 위상을 가지게한 컨볼루션 그림.(알렉스넷 AlexNet)
첫번째 채널 : 48개 - 11x11x3 을 알 수 있다.
위 커널이 2개니까 x2를 하면 35000개 쯤이 나온다.

하나에 메모리에 들어가는 용량이 제한돼있기때문에 커다란 1개가 아닌 중간크기 2개로 해서 2개로 한다.

2번째 채널 : 128개 5x5x48 = 약 30만7000개

3번째 채널 : 192개 3x3x128개 가 2개 = 88만4000개

4번째 채널 : 192개 3x3x192 = 66만3천개

컨볼루션이나 Polling 레이어나 비슷할 것이라 생각하지만,

빨간색 - 컨볼루션 레이어

파란색 - Dense 레이어

컨볼루션 레이어에 비해 덴스 레이어는 천배이상 작다.

그 이유는 ?

  • 네크워크는 Dense레이어가 일반적으로 훨씬적으로 파라미터가 많은이유는
    컨볼루션 레이어가 하나의 커널이 모든위치에 동일하게 적용되기 때문.
    컨볼루션은 shared 파라미터다. 이미지 왼쪽,위,아래,오른쪽 다 동일 하게 적용된다.
    이 뉴럴네트워크 성능을 올리기 위해선 파라미터를 줄여야 하는데 대부분이 fully 파라미터에 들어가기 떄문에
    뒷단의 파라미터를 줄이고 앞단에 최대한 많이 쌓는게 중요하다.
    여기에 최대한 많이 쓰이는게 one-by-one을 사용한다.

뉴럴 네트워크의 깊이 는 점점 깊어지지만, 파라미터는 점점 줄어들게 된다.

1x1 Convolution


1x1x128x32 로 컨볼루션해서 차원을 줄인다.(압축느낌)

이미지에서 영역을 보지 않는다.

  • 이미지에서 한 픽셀만 본다는 의미.

    이걸 하는 이유는?

    • Dimension reduction 때문.

컨볼루션 레이어를 깊게 쌓으면서 파라미터 레이어를 줄이게 된다.
뉴럴네트웤르르 깊게 쌓는데 파라미터 레이어를 줄일수있게 된다.

1x1 테크닉은 굉장히 자주 사용된다.
ReseNet이나 다양한 뉴럴 네트워크에 사용된다.

꼭 알아두어야 한다 !

네트워크의 뎁스는 올리고.

파라미터 레이어는 줄이는 것이

컨볼루션의 목표이다.

profile
비전공자 + 타업계 경력2년의 IT 개발자 도전기~

0개의 댓글