컴퓨터공학/인공지능

[인공지능] 6장. 컨볼루션 신경망과 컴퓨터 비전1

NIMHO 2023. 4. 13. 08:00
728x90

복습하기 위해 학부 수업 내용을 필기한 내용입니다.
이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다.

6.1 컨볼루션 신경망의 동기와 전개

 

6.2 컨볼루션 신경망의 구조와 동작

6.2.1 컨볼루션 연산으로 특징 맵 추출

컨볼루션(convolution) 연산

- 특징 추출 또는 신호 변환에 사용한다.

- 수용장(파란 부분)과 커널의 선형 결합이다.

     - z는 입력 신호, u는 커널, h는 커널의 크기

 

Extra. Convolution

convolution

- Flip the filter in both dimentions (bottom to top, right to left)

- Then apply cross-correlation

 

convolution vs correlation

혼동해서 쓰더라도 결과 얻는 데는 큰 차이가 없다.

일정하게만 사용하면 된다.

 

2차원 컨볼루션

 

컨볼루션의 특징

- 커널에 따라 특징 맵 추출해 준다.

     - 위 그림의 커널의 경우 수평 엣지와 수직 엣지 특징 맵을 추출 한다.

- 원본 영상과 같은 크기의 특징 맵을 생성 한다.

- 원본 영상 자체에 연산을 적용하므로 정보 손실이 없다. (Spatial 공간 정보가 동일하다.)

     - 다층 퍼셉트론의 경우 2차원 구조를 1차원 구조로 펼친 다음 입력해야 한다.

 

6.2.2 컨볼루션층과 풀링층

컨볼루션층은 표준 컨볼루션에 몇 가지 아이디어를 추가로 고려한다.

- 특징 맵이 작아지는 문제 해결을 위한 덧대기(Padding)

     - 덧대기를 하지 않으면 커널 사이즈에 비례하게 줄어든다.

- 영상 크기를 축소할 수 있는 보폭 (보폭을 k로 설정하면 특징 맵은 1/k로 줄어든다.)

- 바이어스 추가

     - 파라미터를 적게 넣고도 표현을 다양하게 만들 수 있다.

 

다중 커널을 사용

- 커널을 32, 64 또는 128개를 사용하여 다중 특징 맵을 추출 한다. (풍부한 특징 추출)

- M * N * k 텐서에 h * h * k 크기의 커널 k'개를 적용하면 M' * N' * k' 텐서를 얻는다.

     - 커널은 M과 N 축을 따라 슬라이딩한다.

- 계산 시간

     - ex) 512 * 512 크기의 RGB 영상에 3*3 커널을 적용하면 커널 하나당 512*512*3*3*3 = 7,077,888번의 곱셈 수행

 

풀링층

- 최대 풀링은 커널 안에 있는 화소 중에 최댓값을 취한다.(평균 풀링은 평균 취한다.)

- 특징 맵에 있는 지나친 상세함을 줄여 요약 통계량을 추출해 준다.

- 보폭을 s로 하면 특징 맵은 s배만큼 줄어든다.

     - 학습 파라미터는 없다.

 

부분 연결성

- 아래 그림에서 오른쪽 층의 노드는 왼쪽 층의 노드 3개 하고만 연결된 부분 연결성

- 두 층의 노드 개수를 n1과 n2라 하고 커널 크기를 h라 하면, 컨볼루션 신경망은 h * n2개의 에지 가진다.

     - FC는 n1 * n2개 에지

 

가중치 공유

- 에지는 h * n2개지만, 가중치를 공유하기 때문에 가중치는 h개뿐이다.

- 2차원 영상에서 h * h 커널을 k'개 사용하는 경우 h*h*k'개의 가중치

     - 학습으로 알아내야 할 매개변수가 대폭 줄어든다.

     - 2차원 영상 둘을 FC로 연결하는 경우 필요한 매개변수의 수는?

          - (256 * 256) * (256 * 256)

          - 3 * 3 커널을 사용하면 9가지만 있으면 된다.

 

6.2.3 빌딩 블록을 쌓아 만드는 컨볼루션 신경망

빌딩 블록

- k * m * n 입력 텐서에 k'의 커널을 적용하면 k' * m' * n' 크기의 특징 맵이 된다.

     - m'과 n' 값은 덧대기(padding)와 보폭(stride)에 영향을 받는다.

- 풀링을 적용하면 k' * m'' * n'' 특징 맵이 된다.

     - 이 텐서는 다음 빌딩 블록의 입력이 된다.

 

LeNet-5 사례 [LeCun1998]

- 현재 기준으로 보면 아주 간단한 컨볼루션 신경망(C-P-C-P-C-FC-FC)

- 입력은 1*32*32 텐서(32*32 크기의 필기 숫자 맵, 커널 개수 1개)

- 빌딩 블록 1

     - 컨볼루션은 1*5*5 커널을 6개 사용(보폭 1, 덧대기 안 함)

          - 1*32*32 텐서 → 6*28*28 텐서

          - 파라미터 : (1 * 5 * 5 + 1) * 6 = 156

     - 풀링은 2*2 커널을 사용(보폭 2)

          - 6*28*28 텐서 → 6*14*14 텐서

          - 파라미터 X

- 빌딩 블록 2

     - 컨볼루션은 6*5*5 커널을 16개 사용(보폭 1, 덧대기 안 함)

          - 6*14*14 → 16*10*10

          - 파라미터 : (6 * 5 * 5 + 1) * 16 = 2416

     - 풀링은 2*2 커널을 사용(보폭 2)

          - 16*10*10 → 16*5*5

          - 파라미터 X

- 컨볼루션 적용(16*5*5 커널을 120개 사용, 보폭 1, 덧대기 안 함)

          - 16*5*5 → 120*1*1

          - 파라미터 : (16 * 5 * 5 + 1) * 120 = 48120

- FC(완전연결) 적용

          - 1*120  1*84

          - 파라미터 : (120 + 1) * 84 = 10164

- FC(완전연결) 적용

          - 1*84  1*10

          - 파라미터 : (84 + 1) * 10 = 850

 

LeNet-5의 가중치(매개변수) 수

- 컨볼루션층은 5*5 커널 6개+5*5 커널 16개 + 5*5 커널 120개

     - (1*5*5+1)*6 + (6*5*5+1)*16 + (16*5*5+1)*120 =50692개

- FC 층은 (120+1)*84+(84+1)*10 = 11014개

- 학습 알고리즘은 61706개의 매개변수를 최적화해야 한다.

- LeNet에서는 FC층이 컨볼루션 층보다 오히려 적은 값이 나온다.

     - 다만 AlexNet에서는 FC layer의 unit수가 4096이기 때문에, 훨씬 많은 매개변수가 생긴다.

     - 딥러닝은 FC 층을 전역 평균 풀링 등으로 대치하여 매개변수 수를 줄이는 방향으로 발전

바이어스 유무에 따라서 +1을 하는지 안 하는지 결정된다.

컨볼루션 층을 할 때 패딩을 하는지 안 하는지 확인해야 한다.
     - 패딩을 하지 않으면 사이즈가 줄어든다.
     - 패딩을 하면 사이즈가 그대로다.

728x90