-
Deep Learning - CNN(Convolutional Neural Networks) 에 대하여Data Analysis/Deep Learning 2021. 1. 3. 14:59
# Before CNN
CNN 이전의 이미지 인식은
2차원(RGB까지 합하면 3차원)을 1차원 배열(flatten)로 바꾼뒤,
MLP(Multi-Layer Perceptron) 신경망으로 Fully Connected 하게 학습시키는 방법이었음
이미지의 형상은 고려하지 않고,
단순히 flatten된 raw data를 직접 처리하기 때문에
많은 양의 학습데이터가 필요했고, 학습시간 또한 길었음
또한 이미지가 회전하거나 움직이면(이미지 증식시)
완전히 다른 데이터로 인식할 수 밖에 없었음
(단순히 flatten된 1차원 배열이었기 때문)
-> MLP가 특징추출과 학습에 있어 비효율적이었음
이미지의 공간정보의 손실을 막을 방법을 찾아낸 모델이 바로 CNN
# CNN의 개념
CNN의 가장 핵심적인 개념은 바로
이미지의 공간정보를 유지한채 학습을 한다는 것
CNN은 Convolution과 Pooling을 반복적으로 수행하여,
불변하는 특징을 찾고, 그 특징을 Input으로 Dense Layer에 주어 Classification을 수행
# 이미지 용어설명
더보기d 는 channel 이라고도 부른다.
# CNN 구성요소
1. Convolution
Convolution은 합성곱이라는 의미이며, CNN 이전부터 이미지처리에 사용되었던 개념
그림으로 이해하는게 빠르니, 밑의 그림으로 이해해보자.
더보기해당 필터로 Result를 만드는게 Convolution 이다.
예시를 하나 더 들어보겠다.
움직이고 있는 노랑박스가 Filter이며, 그림의 필터는 3*3 필터(1 0 1 / 0 1 0 / 1 0 1)이다.
필터의 이동간격을 stride라 하고, Convolved Feature를 Feature map이라고 한다.
(해당 gif의 stride는 1 인 셈이다.)
필터를 이용하여 차원을 압축하는 것이 포인트이다.
(차원을 유지할 수도 있다. 차원을 유지하기 위하여 Padding기법을 사용할 수도 있다.)
아래는 CNN의 전체적인 구조이다.
2. Filter(=Kernel)
Filter 또한 CNN 이전부터 이미지처리에서 사용되던 개념이다.
(CNN은 신경망에서 학습을 통해 자동으로 적합한 필터를 생성해 준다는 것이 다른점)
유명한 필터의 종류 중 몇개를 예시로 들어보자면 아래와 같으며,
CNN 이전에는 직접 필터의 종류를 선별 및 개발해야 했다.
(Handcrafted Feature Extraction)
Filter는 이미지의 특징추출에 많은 부분 기여를 한다.
더보기# Sobel Filter (Vertical & Horizontal)
# Other kind of Filter
3. Channel
흑백 (Channel:1), 칼라 (Channel:3, RGB)
* input data와 filter의 채널의 수는 같아야하며,
* filter의 개수만큼 output data가 생성
(channel의 수와 관계없음)
4. Padding
output data가 input data 보다 작아지는 것을 방지하기 위한 방법
(차원 유지)
아래는 특징이나 분해능에 영향을 미치지 않는 Zero Padding 이며,
초록색 사각형이 Convolved Feature 이다.
Padding에는 두가지 옵션이 있다.
1. valid : padding 을 하지않음 (입출력크기 다름)
2. same : padding 이 존재 (입출력크기 같음)
5. Pooling
이미지의 크기를 적당히 줄이고, 특정 feature를 강조하기 위한 방법
( Fully Connected layer의 연산량을 줄이기위함 )
CNN에서는 주로 Max Pooling 을 사용.
(인간의 뉴런이 가장 큰 신호에 반응하는 것과 같은 원리 적용)
# Max Pooling
노이즈가 감소하고, 연산속도가 빨라지며,
영상의 분별력이 좋아진다고 함
* 일반적으로 pooling의 크기와 stride의 크기를 같게 설정하여
모든 원소가 한번씩은 처리 되도록 설정
* Channel 의 수는 변경없음
(모든 채널에 대하여 각각 pooling 한다는 말)
# 그외 알아두면 좋은 상식
1. CNN은 End-to-End Learning 이다.
Feature Extraction(Convolution~Pooling Layer)과
Classfication(Dense Layer)이 나눠져있지 않고,
한번에 학습시키는 방식
2. CNN의 파라미터 중, Filter의 갯수
각 Layer에서 연산량을 비교적 일정하게 유지하며
균형을 맞추는 것이 좋음.
보통 Pooling 이후, 출력이 1/4로 줄어들기 때문에,
Feature Map의 갯수(= Filter의 갯수)를 4배정도 증가시키는게 일반적
# Reference
1. gruuuuu.github.io/machine-learning/cnn-doc/#
3. https://indoml.com/2018/03/07/student-notes-convolutional-neural-networks-cnn-introduction/
728x90'Data Analysis > Deep Learning' 카테고리의 다른 글
GAN 아키텍처에 대한 개요 및 활용사례 (0) 2021.01.28 GAN - Mode Collapse (0) 2020.12.17 Deep Learning 학습 모델 저장하기 (0) 2020.12.16