코린이의 공부일기

[Boost Camp] WEEK2 Day 3. Convolutional Neural Networks 본문

BOOST CAMP_정리

[Boost Camp] WEEK2 Day 3. Convolutional Neural Networks

SOJUNG 2021. 8. 14. 21:43

CNN의 탄생

Fully connected layer 만으로 구성된 인공 신경망 같은 경우에는 1차원의 배열형태로 한정된다.
그렇기 때문에 사진데이터를 1차원으로 평면화 시키는 과정에서 공간 정보가 손실될 수 밖에 없다. 그래서 이미지 공간 정보를 유지한 상태로 학습을 할 수 있는 모델이 CNN(Convolutional Neural Network)입니다.



합성곱 (convolution)

입력데이터에 1개의 필터로 합성곱 연산을 수행하며 하나의 output= Feature Map 을 만든다.

Filter는 즉 Kernel이라고도 하며 이미지의 특징을 찾아내기 위한 파라미터이다.
CNN에서의 학습대상 = Filter parameter
필터는 입력데이터에서 지정된 간격(Stride) 으로 순회하며 채널별로 합성곱을 진행해 합성곱의 합을 Feature Map으로 만든다.

Stride? Padding?

Stride는 kernel 이 순회하는 간격
Padding은 소실되는 픽셀 값들을 위해 모서리에 만들어 놓는 것
Stride와 padding을 적절하게 조절하여 원하는 출력 값을 도출하도록 한다.

어떠한 필터를 사용하는지에 따라 output값을 outline을 강조할 것인지/ Blur 처리를 할 것인지
목적에 따른 결과 값을 낼 수 있다.

CNN의 구조

Convolution layer+pooling layer 을 통해서 이미지의 feature extraction할 수 있고
fully connected layer을 통해 classification등 최종적인 결과 값을 출력할 수 있다.
-> CNN의 최근 발전은 layer의 수는 늘리지만 parameter수를 줄이는 것이 목표
(즉 generalization performace을 줄이기 위해서)


Convolution parameter 계산


컨볼루션 레이어의 학습 파라미터 수
= 입력채널 수 * 필터 폭 * 필터 높이 * 출력채널 수


*Exercise(parameter 수 찾기)

예시 =Alex-Net
입력 채널의수 =3 필터 dimension=11*11 출력 채널 수 =96(48 *2)

빨간색 -Convolution Layer
파란색- Fully conected Layer

Fully connected Layer의 파라미터 수가 많아 성능을 줄이기 위해서는 파라미터 수를 줄여야한다.
그렇기 떄문에 트렌드는 Fully connected Layer을 얕게 쌓고
비교적 파라미터를 적게 요구하는 Convolution Layer을 깊게 쌓는 것이 일반적이다.


1X1 Convolution

1X1 Convolution으로 깊이는 증가 시키며 파라미터 수를 줄이도록 함 .
(많이 쓰이는 방식 !)

Why 3X3 convolution ?

kernel dimension을 줄이고 Layer을 늘리는 것이 parameter수를 줄이는 데에 좋다.
그래서 대부분의 논문들이 kernel special dimension이 7 X 7을 넘기지 않는다.
중간 중간 Receptive field을 활용하는 것이 parameter 수를 줄이는 데에 좋다.


GoogLeNet

Inception blobk은 하나의 입력이 들어왔을 때 퍼졌다가 합쳐지는 것

*GoogLeNet에서는 convolution을 하기전에 1X1 convolution을 진행한다.

(parameter 수를 줄이기 위해)



Inception Block

3X3 convolution을 진행하며 , 똑같은 입력과 같은 출력물 128개의 channel을 가지지만
1X1 convolution을 중간에 추가하며 parameter수을 약 30 %줄일 수 있는 큰 장점이 있다.

결과적으로 GoogLeNet은 AlexNet보다 약 3배의 deep한 네트워크를 가지지만 kernel dimension을 줄이고 1X1 convolution을 통해서
더 적은 parameter을 계산하고 더 정확도가 높은 출력물을 얻어낼 수 있다.


ResNet

Overfitting(과적합)의 문제는 아니지만, 네트워크가 커짐에 따라 더욱 학습이 안되는 문제점을 발견
-> 네트워크는 작게해야한다라는 개념을 생성하게 됨

ResNet은 identity map을 추가함
-> ResNet은 x+f(x) 을 통해서 어떠한 차이를 학습하기를 원함

최종적으로 더 deep한 네트워크가 error가 적게 나오며
이 과정으로 네트워크를 구성할 때 좀 더 deep하게 해주는 가능성을 열어줌!

GooLeNet의 Inception Block과 같은 원리 첫 번째 1X1 convolution(3X3 convolution 이전에)으로 parameter개수를 줄여주고
마지막 1x1 convolution으로 채널의 개수를 들리며 이를 통해 원하는 output채널의 개수를 맞추어줄 수 있다.

하나의 전략으로 1X1을 통해서 parameter의 수를 줄여주고 또한 output의 채널 개수를 맞춰주며
Layer을 더 깊게 쌓아줄 수 있는 하나의 방도(?)을 마련했다.
그렇기 때문에 점점 정확도가 증가되는 알고리즘이 나왔다.

DenseNet

DenseNet은 Dense Block을 통해서 Feature map을 점점 크게 키운 다음
마지막에 Transition Block을 통해서 parameter수를 줄인다.

Total Keypoints


Semantic Segmentation

픽셀 값을 기준으로 Classification 하는 것
주로 자율주행에서 많이 사용한다. 운전보조장치에 굉장히 많이 활용된다.

기본적인 CNN의 구조

Fully Convolutional Network

Dense layer을 없애고 convolution layer로 바꾸는 것
dense이던 convolution layer이든 둘다 input data와 output data가 같다.

Dense layer/convolution layer 둘 다 같은 parameter 수를 가진다.

Deconvolution

deconvolution은 special dimension을 키워주는 역할을 해준다.
그치만 deconvolution은 이전의 값을 복원할 수 있는 것은 아니다.
하지만 network architecture을 만들 때, network architecture크기를 계산할 때 유용하게 쓰인다.

'BOOST CAMP_정리' 카테고리의 다른 글

[Boost Camp] 2주차 회고록  (5) 2021.08.17
[Boost Camp] WEEK 2.Day4 RNN과 LSTM  (0) 2021.08.16
[Boost Camp] WEEK2 Day1. Deep Learning Basic  (0) 2021.08.14
[Boost Camp] 1주차 회고록  (0) 2021.08.09
[Boost Camp] 1WEEK.5Days -RNN  (0) 2021.08.09
Comments