JLOG

[Cs231n 정리] Lecture 5: Convolutional Neural Networks / CS231n 5강 정리 본문

Study/cs231n

[Cs231n 정리] Lecture 5: Convolutional Neural Networks / CS231n 5강 정리

정정선선 2021. 3. 3. 23:52

아래 블로그의 정리글을 참고해 작성되었습니다.

꿈 많은 사람의 이야기


 

cs231n 강의를 들으면서 공부 기록용으로 작성된 글입니다.


 

CNN(Convolution Nerual Network)에 대해서 알아볼 것이다.

CNN은 이미지 인식에서 가장 많이 사용하는 구조이다.

 

 

 

고양이 이미지 실험과 같이 어떤 것을 볼 때마다 활성화 되는 부분들을 분석해 적용시킨 것이 CNN의 시초라고 볼 수 있다.

 

 

LeCun이 소개한 lenet에서 cnn이 제대로 적용되게 된다.

CNN은 큰 영역부터 섬세한 영역까지 모두 다룬다.

 

이후 발전된 형태의 AlexNet도 CNN의 구조이며, ImageNet에서 높은 정확도를 보여주었다.

 

 

이런 CNN 구조는 Classification(판별), Retrieval(검색), Detection(검출), Segmentation과 같은 다양한 분야에서 사용 되어지고 있다.

 

또한, 자율주행에서도 사용되고 있으며 테슬라는 gpu를 사용해 물체들을 빠르게 탐지할 수 있다. 그 외에는 관절영역(pose-estimation), 은하계, 표지판 탐지 등에서 사용되고 있다.

 

 

Convolution Neural Networks

영상인식의 핵심이 되는 CNN에 대해서 알아보자

 

우리는 지금까지 위와 같은 FC구조를 사용했었다. 하지만 이미지를 판별할 때 별로 좋지 못한 성능을 가지고 있었었다.

 

 

 

그래서 위와 같은 구조를 사용하게 되는데, RGB 이미지 데이터를 32x32x3 형태 그대로 사용한다.

 

여기서 convoltuion filter를 두게 된다. 이 필터를 이용해 input 이미지에서 특징을 뽑아낼 것이다.

이때 주의할 것은 filter의 depth와 image depth가 항상 동일해야 한다.

 

이 필터를 이용해 하나의 지역에 대해 하나의 값을 뽑아낸다.

필터가 w이고 WtX+b으로 score를 구하게 된다.

 

32x32x3의 이미지에 대해 5x5x3 convolution filter를 거치면 28x28x1 크기의 activation map이 나오게 된다. 이 activation map은 5x5x3 filter를 거쳐 특징이 뽑아진 층이라고 볼 수 있다.

 

 

 

파란색 필터 말고 초록색 필터를 이용해 특징을 뽑으면 새로운 activation maps이 나오게 되고,

 

 

만약 6개의 filter가 있다면, 6개의 activation maps이 생성될 것이다.

 

 

위와 같은 과정을 반복해서 Convolution layer를 쌓을 수 있다.

 

 

features들을 시각화한 모습이다. 첫 번째 계층을 보면 색상, edge등 각 영역마다 다양한 모습을 가지고 있고, 아래층으로 갈 수록 더 자세한 영역까지 다루는 것을 확인할 수 있다.

과거의 연구와 같이 CNN은 큰 영역에서 작은 영역까지 모두 다루는 것을 확인할 수 있다.

 

Convolution network를 쌓아 만든 classifer의 구조 모습이다.

Conv와 activation(Relu), Pooling 레이어로 구성되어 있으며 위와 같은 구조를 공부할 것이다.

 

 

 

A Closer look at spatial dimensions

acitvaiton map이 생성 되는 과정을 지켜보자, image에 filter가 sliding되며 한 번씩 옮겨가며 값을 하나하나 뽑아내, activation map이 형성 된다.

그래서 5x5 output activation map이 생성이 될 것이다.

 

하지만 1번씩 이동하지 않고 2번 또는 3번씩 이동할 수도 있다.

이때 한 번에 이동하는 것을 stride라고 하며, stride 1, stride 2 이렇게 말한다.

 

2번 이동한 경우 3x3 activation map이 만들어질 것이고,

 

 

stirde 3인 경우 filter가 image에 딱 떨어지지 않는다.

 

 

일반적인 공식으로 살펴보게 되면, stride 3인 경우에는 2.33으로 떨어지지 않는 값이 나온다.

(+)padding을 추가해 2.33을 올림해 사용하기도 한다.

 

 

Zero Padding

Zero Padding이란 양쪽 사이드에 zero 값을 둘러주어 image의 크기를 늘려주는 것이다.

왜 padding을 사용하는 이유는 convolution 연산을 할 때마다 activation map의 크기는 점점 줄게 되 image가 없어짐으로 layer를 깊게 쌓을 수 없게 된다.

또한, pooling이 없다면 side에 있는 데이터들의 feature를 가운데에 부분보다 더 적게 뽑음으로서 문제가 될 수도 있다.

 

 

그래서 acitvation map의 크기를 유지하기 위해 F=3인 경우 pad 1, F=5인 경우 pad 2, F=7인 경우 pad 3으로 둘 수 있고, 일반적으로 이렇게 사용한다.

 

 

Examples

32x32x3, 10 5x5 filters with stride 1, pad 2인 경우 Output volume size는

(32-5+2*2)/1+1=32로 w,h 값은 동일하고, filter의 개수가 10개임으로

32x32x10의 결과가 나오게 된다.

 

 

이때의 paramter의 개수는

한 activation map의 patatmeter 개수(wieght & bias)는 5x5x3 + 1 = 76이고

10개의 filter가 있음으로 76 * 10 = 760이다.

 

 

 

지금까지 했던 것의 Summary이다.

fit되게 쓰이는 F, S, P의 조건들이 나와있다.

 

 

1x1 convolution layers

Filter의 개수에 따라 output의 depth는 달라지지만, 기존 이미지의 가로세로 사이즈는 유지된다.

이때, filter의 개수를 input dimension보다 작게 하면, dimension reduction의 효과가 있다.

 

즉, Image에서 Convolution layer는 Spatial Relation을 고려했다면, 1x1 Convolution layer는 한 픽셀만 고려하기 때문에 차원 축소를 위해 사용한다.

 

 

 

 

 

하나의 filter 영역 연산에 대해 1개의 숫자 output이 나오게 되는데 뉴런의 local connection과 유사하다고 한다.

 

 

같은 영역에 따라 filter 개수 만큼의 값들이 나오게 된다.

여기서는 5개의 filter를 사용해 5개의 숫자가 나오지만 각각 다른 filter를 사용했음으로 각각 다른 특징을 가질 것이다.

 

 

 

FC의 경우 하나의 output이 모든 input에 대한 특징을 가지고 있다.

 

 

 

 

Pooling Layer

Pooling은 image의 특징을 유지하며 크기를 줄이는 역할을 한다.

 

 

주로 MAX POOLING을 많이 사용하는데, 숫자가 큰 값만 남겨 둔다는 뜻은 가장 큰 특징 값만 뽑는다고 생각할 수 있다.

위와 같이 각 구역 별로 max value를 찾아 나머지 값들을 버려 size를 줄일 수 있다.

 

 

Pooling layer에 대한 Summary이며, 보통 Filter size가 2든 3이든 stride를 2로 사용 한다.

 

 

마지막으로 FC를 사용해 값들을 분류 한다.

 

 

 

 

 

Comments