[CNN]Convolutional Neural Network

이석영·2021년 1월 27일
0

Programmers

목록 보기
36/47
post-thumbnail

CNN(convolutional neural network)란?

CNN는 이미지, 영상인식에 주로사용하고 특화된 대표적인 모델이다.
이미지, 영상은 기존의 깊은 신경망(DMLP)을 통해서도 인식, 분류가 가능하지만 이는 완전 연결 신경망으로 복잡도가 굉장히 증가하고 오버피팅의 문제로까지 이어질 가능성이 있다.
따라서 이 문제를 개선하기위하여 CNN 모델은 완전연결이 아닌 부분연결신경망으로 복잡도를 낮추고 합성곱(Convolution)이라는 과정을 통해 이미지나 영상의 전체가 아닌 부분의 특징을 추출한다는 것이 핵심이다.

이미지를 예로들면 동일 객체라도 카메라의 이동, 각도, 객체와 주변의 경계(보호색), 조명 등에따라 픽셀의 값들이 변화하고 또 객체가 같은 종임에도 불구하고 변화가 큰 것들이 존재한다. 따라서 전체를 가지고는 같은 객체인지 판단하기 어렵지만 부분의 특징(새의 부리, 고양이의 귀나 꼬리 등)을 추출한 후 최종적으로 결합했을 때는 판단하는 것이 조금 더 수월하므로 이것이 CNN의 또 하나의 장점이다.
사진을 생각해보면 멀리 떨어진 부분보다는 인접한 부분이 비슷한 특징을 가지며 더 연관이 있다고 볼 수 있기 때문에 부분 추출이 더 유리하다는 것이 이해가 되는 부분이다. 그리고 이는 실제로 뇌가 이미지를 인식하는 방법과 비슷하다고한다.

CNN 모델의 구조

CNN 모델은 일반적으로 아래와 같이 특징을 추출하는 convolution, pooling 부분과 추출한 특징을 결합하고 분류하는 부분으로 구분된다.

1. 합성곱(convolution)

convolution은 입력된 이미지를 필터(filter) 또는 커널(kernal)이라고 부르는 것을 통해 이미지 전체를 훑어줌으로써 특징을 추출하는 과정이다. 이러한 특징은 어떤 filter를 적용하느냐에 따라 달라지며 이는 결국에 filter와 그 filter가 비추는 이미지 부분의 내적값이 결과로 추출되기 때문이다.


convolution 과정에서 입력 이미지와 filter의 깊이(depth or channel)은 일치해야한다. 또한 filter의 개수에 따라 출력 결과의 개수도 일치한다. 아래는 입력 이미지가 RGB 3채널로 필터역시 3채널이며 필터를 4개 적용했기 때문에 출력 데이터 역시 4개가 됨을 보여준다.

이러한 출력 데이터는 보통 활성함수를 거치게 되는데 convolution과정이 결국에는 내적으로부터 특징을 추출하는 선형의 과정이므로 복잡한 문제를 풀기위해서는 입력과 출력의 비선형 관계를 만들어주는 활성함수를 사용한다. 이는 추출된 특징을 보다 강조하는 효과 또한 가진다.

stride

  • filter가 입력 데이터를 훑어줄 때 얼마만큼 움직이는지를 stride라고한다. stride를 1로하면 한칸씩 2로하면 두칸씩 이동하게되므로 결과 데이터는 입력보다 작아진다.

padding

  • stride가 클수록 출력데이터는 더 작아지므로 이를 방지하기위해 입력 이미지에 의미없는 값을 덧댄다. 이렇게하면 크기가 줄어듬으로써 발생하는 손실을 개선할 수 있는데 이를 패딩이라고한다. 보통 패딩값으로는 0을 사용한다.

2. Pooling

pooling은 convolution한 결과인 출력데이터를 입력으로 받아 크기를 줄이거나 특정 부분을 강조하기위해 샘플링을하는 과정이다. 이러한 샘플링 과정은 최대값 또는 평균값을 취해 추출하는데 보통 최대값을 이용하는 max pooling을 주로 사용한다.

CNN 모델은 위에서 설명한 convolution과 pooling을 계속해서 연결한 특징추출과 샘플링의 반복 과정이며 이로써 각 layer를 거칠 때마다 특징은 점점 더 고도화, 추상화되어진다. 그리고 이 두 층에서 stride, padding 값은 조정이 가능한 부분으로 특징 벡터의 크기가 반드시 같아야하는 깊은 신경망과는 달리 가변의 크기를 다룰 수 있다는 장점이있다.

3. Flatten, Fully Connected Layer(Dense Layer)

Flatten 과정은 convolution과 pooling층의 결과인 feature map을 1차원 벡터로 쫙~펴는 것을말한다. CNN 모델의 특징이 전체가 아닌 부분의 특징을 추출하는 것이라고 했던 것처럼 이미지의 특징들은 이미 잘게잘게 쪼개져 서로 독립적으로 존재하는 상태이기 때문에 1차원 벡터로 연결해도 문제가 되지않는다.
이렇게 flatten과정을 거친 특징들은 fully connected 층에서 모두 연결되어 마치 MLP와 같은 구조를 가지며 최종적으로 Softmax 활성 함수를 통해 이미지가 분류된다.

참고
http://taewan.kim/post/cnn/
https://halfundecided.medium.com/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-cnn-convolutional-neural-networks-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-836869f88375

profile
원하는 대로 살자

0개의 댓글