Data Science/AI

CNN Convolution Neural Network 에 대해 알아보자 | computer vision, filter, LeNet, AlexNet

토마토. 2021. 9. 25. 18:37

참고

https://www.youtube.com/watch?v=YRhxdVk_sIs 

https://deeplizard.com/resource/pavq7noze2

정직하게 코딩하며 배우는 딥러닝 Do it!

https://towardsdatascience.com/the-most-intuitive-and-easiest-guide-for-convolutional-neural-network-3607be47480


index

computer vision & deep learning

convolution operation

convolution operation with edge detection

filter

learning to detect edges

padding

stride

summary of convolutions

convolutions over volumes

one layer of a convolutional network

CNN example

Pooling

CNN

대표적인 CNN - LeNet, AlexNet


 

computer vision & deep learning

컴퓨터 비전은 딥러닝 발전 영역에서 가장 두각을 나타내는 분야 중 하나다.

BOAZ 분석 발표자료 중

 

Image Classification

Object Detection

Object Tracking

Semantic Segmentation

Neural style Transfer

 

등등

 

computer vision 분야에서는

이미지의 윤곽 contours, 모서리 edge를 인식하기 위해 CNN을 활발하게 사용하는데,

CNN을 이해하기 위해서는 우선 Convolution operation을 이해해야 한다.

CNN에서 이미지를 인식할 수 있도록 하는 패턴을 'kernel', 'filter', 'feature detector'라고 한다.

convolution operation

 

1차원 배열에서의 convolution operation을 살펴보자.

최종 목적지는 x * w (x와 w의 합성곱)

 

x = [2,8,3,7,1,2,0,4,5]

w = [2,1,5,3]이라고 하자.

 

step 1. 배열 하나를 선택해 뒤집기

w = [2,1,5,3]

w_reverse = w_r = [3,5,1,2]

 

step 2. 첫번째 합성곱

뒤집은 배열을 x와 맞추어 놓는다.

그리고 배열 원소끼리 곱한 뒤에 더한다. (dot product)

x = [2,8,3,7,1,2,0,4,5]

w_r = [3,5,1,2]

x * w = 2*3 + 8 * 5 + 3 * 1 + 7 * 2 = 6 + 40 + 3 + 14 = 63

 

step 3. 두번째 합성곱

w_r을 오른쪽으로 한 칸 옮겨서 다시 dot product를 수행한다.

이를 반복한다.

x * w_r = 8 * 3 + 3 * 5 + 7 * 1 + 1 * 2 = 24 + 15 + 7 + 2 = 48

 

다시..

x * w_r = 3 * 3 + 7 * 5 + 1 * 1 + 2 * 2 = 49

x * w_r = 7 * 3 + 1 * 5 + 1 * 1 + 2 * 2 = 28

x * w_r = 1 * 3 + 2 * 5 + 0 * 1 + 4 * 2 = 21

x * w_r = 2 * 3 + 0 * 5 + 4 * 1 + 5 * 2 = 20

...

따라서  x * w = [63, 49, 28, 21, 20]이다.

 

실제 CNN에서는 convolution 연산 대신에 교차 상관을 사용한다.

 

교차 상관이란, Convolution 연산과 다른 조건은 똑같지만,

w_r처럼 배열을 뒤집지 않고, w으로 연산을 수행한다.

그 이유는.. 어차피 weight array 는 무작위 초기화되기 때문이다.

따라서 w_r로 하는 작업이 불필요하다.

 

 

Padding, Stride

패딩, 스트라이드는 합성곱 신경망을 위한 핵심 개념이다.

Padding은 원본 배열의 양 끝에 빈 원소를 추가하는 것을 말한다.

stride는 미끄러지는 배열의 간격을 조절하는 것을 말한다.

 

padding, stride에 따라서 valid padding, full padding, same padding으로 구분할 수 있다.

 

1) valid padding

padding은 원본 배열에다가 빈 원소를 추가하는 것이라고 앞서 언급하였다.

이때 valid padding은 다른 패딩 원소를 추가하지 않고, 합성곱(교차상관)을 수행한다.

이 경우에는, 배열의 원소마다 연산에 참여하는 횟수가 달라지게 된다.

 

x = [2,8,3,7,1,2,0,4,5]

w = [2,1,5,3]

 

이 사례로 살펴보면,

x_count = [(2,1), (8,2), (3,3), (7,4), ...]로 원소마다 참여 횟수가 다르다는 것을 알 수 있다.

 

2) full padding

원소의 모든 요소가 동일한 정도로 연산에 참여하게 만들기 위해

full padding 기법이 등장한다.

 

full padding에서는 원본 배열의 양 끝에 가상의 원소(0)를 추가한다.

0을 추가하기 때문에 zero padding이라고 하기도 한다.

x = [2,8,3,7,1,2,0,4,5]

-> x_full = [0, 0, 0, 2, 8, 3, 7,1, 2, 0, 4, 5, 0, 0, 0]

 

 

* 0 원소를 추가한 만큼 noise가 발생하므로 이를 trade-off 관계에 있다고 한다.

 

3) same padding

same padding은 출력 배열의 크기가 원본 배열의 길이와 같아지도록 zero padding을 추가한다.

 

예를 들면,

x = [2,8,3,7,1,2,0,4,5]

-> x_same = [0, 0, 2, 8, 3, 7,1, 2, 0, 4, 5, 0]

이렇게 배열을 구성하면, 출력 배열의 길이가 9개로 같아진다.

 

-> CNN에서는 주로 same 패딩을 사용한다고 한다.

 

이번에는 stride를 살펴보자.

1) stride

stride는 learning rate와 비슷한 개념 같다.

stride는 미끄러지는 배열의 간격을 말한다.

 

stride = 2라면,

2씩 뛰어가며 convolution operation을 수행하게 된다.

 

2차원 배열에서도 convolution operation을 똑같이 할 수 있다.

CNN은 일반적으로 4차원 배열이다. (너비 * 높이 * RGB)

 

filter

합성곱의 가중치를 의미한다.

filter, kernel이라고도 한다.

 

pooling operation

convolution을 거쳐서 나온 activation maps가 생겼을 때

이를 이루는 convolution layer에서 최댓값을 고르거나, 평균값을 계산하는 등

resizing 하여 새로운 layer를 얻는 것.

 

왜 pooling을 사용하냐고 묻는다면..

그건.. overfitting을 방지하기 위함이다.

 

cs231n

 


CNN - Computer vision problem

 

CNN에서 학습이란 최적의 filter 행렬을 찾아가는 것이다.

steps

<low level> - <Mid level> - <high level>

- convolution 매커니즘 : vertical edges, horizontal edges

learning to detect edge

-> 모르겠는 부분 : vertical edge detection / horizontal..

https://brunch.co.kr/@coolmindory/36

https://brunch.co.kr/@coolmindory/36

 

컴퓨터는 filter 행렬을 통해 edge를 인식한다.

 

image가 주어졌을 때, 그 이미지에서 윤곽선을 검출하기 위해 filter를 직접 설정할 필요는 없다.

CNN에서는 filter의 원소를 parameter로 설정한 뒤에,

back propagation을 이용해 스스로 학습하게 해서 최적의 filter를 찾는다.

 

summary of convolutions

 

convolutions over volumes

convolutions on RGB images

multiple features

example of a layer

 

 

one layer of a convolutional network

CNN example

 

 

 

CNN

대표적인 CNN - LeNet, AlexNet

LeNet

Yann LeCun이 최초로 개발한 CNN구조이다.

lenet의 구조

step 1. convolutions, subsampling(pooling)을 반복적으로 거친다.

: 이미지 형상으로 분할/분석

step 2. FC fully connected NN

: 분류/설명

마지막에 FC fully connected multi-layer neural network로 연결하여

classification을 수행하게 된다.

 

* FC : 한 층의 모든 뉴런이 다음 층의 모든 뉴런과 연결된 상태

2차원의 배열 이미지를 1차원의 평탄화 작업을 통해

이미지를 분류하는 데 사용되는 계층이다.

(위 이미지에서 납작한 부분에 FC라고 적혀있다.)

 

AlexNet

ImageNet 화상 인식 대회에서 우승한 CNN 구조이다.

2개의 GPU를 기반으로 한 병렬 구조라는 점이 LeNet-5와 다른 점이다.

 

5개의 convolution layer, 3개의 fully-connected layer로 구성되어 있다.

마지막 FC layer는 1000개의 category로 분류하기 위해 activation function으로 softmax 함수를 사용한다.