[CS231n]Convolutional Neural Network

ai_lim·2022년 2월 6일
0

CS231n

목록 보기
7/12
post-thumbnail

CS231n 5강


지금껏 우리는 Fully Connected Layer 방식을 사용했다.
input 32x32x3 이미지를 3072x1로 strech해서 내적 연산을 하는 방식이다.
저번에도 살펴보았듯이 말머리가 2개가 나온다거나 빨간색만 차로 인식한다는 문제점이 발생한다.

그래서 Convolution Layer 방식을 살펴볼 것이다.

Convolution Layer

input 이미지의 사이즈는 32x32x3
convolution filter를 사용하여 input 이미지의 특징을 뽑아낼 것이다.

이때, convolution filter 사이즈는 마음대로 정하되 depth는 input과 맞춰줘야한다.

이미지 위에 필터를 올려 슬라이딩해나가면서 전체적으로 convolution하여activation map의 해당 위치에 전달하는 방식이다. (밑에서 다시 한 번 다룰 것이다.)

참고

이번에는 초록색 필터로 convolution을 진행하여 activation map을 만들었다.


convolution layer는 여러개의 필터를 사용하여 필터마다 다른 특징을 추출하도록 한다.
위의 그림은 6개의 필터를 사용하여 activation maps를 만든것이다.
1개의 필터 - 1개의 activation map 이라고 보면 된다.

이 과정을 여러번 반복해나가면서 이미지의 특징을 추출해나가는 것이다.

다시 한 번 말하지만 필터의 depth는 input에 맞게 맞춰줘야한다는 점!!

시각화

실제로 시각화를 해보면 위와 같이 나온다.
여러개의 conv layer를 거치면서 단순한 구조에서 복잡한 구조로 가는 것을 볼 수 있다.

1개의 필터는 1개의 activation map을 만든다고 하였다.
위의 작은 사진들이 filter이고, 아래가 activation maps 이다.

파란색 화살표 부분
필터를 보면 주황색으로 선택하여 activation map에 주황색 부분만 밝게 칠해진 것을 볼 수 있다.
이것이 각 filter들이 각 특징을 추출해내는 것이라고 할 수 있다.

CNN의 전체적인 과정을 보자
input 이미지는 여러 레이어를 거치면서 마지막에는 FC 레이어를 통해 스코어를 구한다.

우리는 CONV를 배웠고 앞으로 RELU,POOL,FC 레이어들을 배울 것이다.

위에서 간단하게 CONV 하는 방식을 설명하였는데 더 자세히 살펴보도록 하겠다.

CONV 방식


input으로 7x7 이미지가 있고 fiter를 3x3으로 지정했다고 치자
(depth는 동일하게 설정했다고 침)

이런식으로 필터를 슬라이딩 해나가면서 값을 하나하나 뽑아내는 것이다.
7x7 이미지에 3x3 필터를 사용한다면 총 5번을 움직일 수 있어서 output으로 5x5가 나오는 것이다.

슬라이딩을 1칸씩하는데 이것또한 조정할 수 있는 파라미터이다. (stride)


만약 stride를 2로 설정하여 2칸씩 슬라이딩을 한다면 3x3 output이 나오게 된다.

또 stride를 3으로 설정한다면?? fit 하지 않다는 것을 바로 짐작할 수 있을 것이다.
사용할 수 없는 stride 이다!! 교육용에서만큼은...

ouput 사이즈를 공식으로 살펴보자면

N:input size
F: filer size

해서 stride가 3이면 딱 떨어지지않는 값을 볼 수 있다. (사용 XXX)

zero - padding

그런데 우리는 layer를 여러개를 거치면서

사이즈가 32 -> 28 -> 24 -> ...-> 0으로 줄어들 것을 예측할 수 있다.
레이어를 더 쌓아야하는데 이미지의 크기가 급격하게 줄어들어 Conv 연산이 불가능해진다 ㅠㅠ

그치만 zero-padding을 하여 size를 보존시킬 수 있다!!

zero padding을 통해 양쪽 사이드에 zero 값을 둘러준다.
padding 1개 추가 시 7x7 -> 9x9 로 사이즈가 변하는 것을 볼 수 있다.

2개를 추가한다면??
왼쪽 2x오른쪽 2
4만큼 증가하여 7x7 -> 11x11로 변할 것이다.

이게 어떻게 output의 사이즈를 보존해주는지 살펴보자


위에서 배운 output사이즈 공식이다.
(9-3)/1+1 = 7

헉!! 7x7 이미지에 padding을 추가하여 9x9 사이즈로 만들고
3x3 필터를 씌워줬는데 7x7 사이즈로 나오네~??!!

사이즈가 보존되었다 ㅎㅎ

padding을 추가하는데도 공식이 있다.

일반적으로
filter 크기가 3이면 zero padding 1개 , 크기가 5면 zero padding 2개 --- 이렇게 사용한다고 한다!!

문제

input 32x32x3
filter 5x5 10개
stride 1
pad 2
일때, output volume size는??

위에서 배운 들을 하나씩 적용하면 간단하게 구할 수 있다😍

그렇다면 파라미터 개수는??

1개 필터당 5x5x3 + 1bias = 76 파라미터
10개의 필터가 있으니 76x10 = 760개의 파라미터가 존재한다.

1x1 conv의 의미


CNN을 거치고 Flatten()을 하게 되는데
이때, FC를 빼고 1x1 conv를 써도 상관없다고 한다.

뉴런과 연관지어보기

1.하나의 필터에 대한 영역에서 1개의 숫자가 나오는데 뉴런에서의 local connect와 비슷하다.

2. parameter sharing

만약 5개의 필터가 있다면 같은 영역에 대해 5개의 값들이 나오게 된다. 5개는 정확하게 같은 지역에서 추출된 서로 다른 특징이다. 즉, 같은 지역에서도 필터가 다르니 서로 다른 값들을 뽑아낸 것이다.

(아.. 정확하게 이해못했음..😓)

Pooling Layer

pooling은 이미지의 사이즈를 관리하기쉽게 줄여준다

주로, 큰 특징값들을 유지하면서 줄이기때문에 MaxPooling을 많이 사용한다.

max pool이 2x2 이면 크기가 절반으로 줄어든다.

Fully Connected Layer (FC layer)

마지막으로 FC layer에 넣어 score를 구해준다.

...급하게 정리하느라 뒤로갈수록 엉망진창인듯하다...
다시 한번 수정하러와야겠다😅😅

0개의 댓글