본문 바로가기
기술/딥러닝

[Deep Learning] CNN for Deep Learning

by 팡팡구리 2021. 6. 30.
반응형

CNN for Deep Learning

 

출처


https://www.analyticsvidhya.com/blog/2021/05/convolutional-neural-networks-cnn/

 

CNN for Deep Learning | Convolutional Neural Networks (CNN)

Over the years CNNs have become a very important part of many Computer Vision applications. So let’s take a look at the workings of CNN

www.analyticsvidhya.com

 

CNN의 전반적인 흐름을 알 수 있는 글이라 생각해 가져와 번역, 정리하였습니다.

최대한 원문 변형없이 정리하려 했지만 글의 매끄러움을 위해 일부 의역하였습니다.

 

Introduction


지난 수십년간, 딥러닝은 다량의 데이터를 다룰 수 있는 능력으로 인해 매우 강력한 도구임을 입증해왔다.

은닉층을 사용하는 것에 대한 관심은 전통적인 기술, 특히 패턴 인식에서 훨씬 높아졌다.

DNN(Deep Neural Network) 중 가장 유명한 것으로 CNN(Convolutional Neural Network)이 있다.

▶ DNN은 은닉층을 2개 이상 지닌 학습 방법이다.

 

AI 초기인 1950대 이후로, 연구자들은 시각 데이터를 이해하기 위한 시스템을 만들려고 노력해왔다.

그 후 몇년이 지나 이 분야는 Coputer Vision(이하 CV)으로 알려지게 되었다.

2012년, 토론토 대학 연구진들이 기존에 최고로 여겨졌던 영상인식 알고리즘을

훨씬 넘어서는 AI 모델을 개발하면서 CV는 비약적인 발전을 이루게 된다.

 

AlexNet으로 알려진 이 AI 모델은, 2012년 ImageNet CV 대회에서 85% 정확도를 기록하며 우승을 차지했다.

( 해당 대회에서 2위는 74%의 정확도를 기록 )

 

이 AlexNet의 핵심에는 인간의 시력을 모방한 특수한 형태의 신경망, CNN이 있었다.

수년간 CNN은 CV 애플리케이션의 가장 중요한 부분이 되었다.

 

이미지가 분류되는 과정을 도식화

 

 

Background of CNNs


CNN은 1980년대에 처음 개발되었고 사용되었다. 당시 CNN은 대부분 손글씨 인식에 이용되었다.

그리고 그것은 대게 우편 번호를 읽을 용도로 우편 분야에서 사용되었다.

 

어떤 딥러닝 모델을 쓰든 기억해야 할 가장 중요한 점은 훈련하는 데에 다량의 데이터가 있어야 하고,

또한 대량의 컴퓨팅 리소스가 필요하다는 점이다.

이는 당시 CNN의 주요한 단점이었고, 따라서 CNN의 사용은 우편 분야에만 국한되었다.

▶ 데이터, 컴퓨터 리소스의 부족으로 인해 CNN은 우편 분야에만 주로 쓰였다.

 

2012년 "Alex Krizhevsky"( AlexNet의 메인 크리에이터 )는

다층 신경망을 사용하는 딥러닝의 분야를 다시 시작해야 할 때임을 깨달았다.

수백만 개의 라벨이 붙은 이미지와 풍부한 컴퓨팅 리소스를 가진 ImageNet 데이터셋이 제공됨에 따라

연구자들은 CNN을 부활시킬 수 있었다.

 

CNN으로 이미지를 분류하는 과정

 

 

What exactly is a CNN?


딥러닝에서, CNN은 DNN의 한 클래스이며 시각 이미지 분석에 사용되는 가장 일반적으로 사용된다.

우리는 신경망을 생각할 때 행렬곱을 떠올리지만 CNN에서는 그렇지 않다.

CNN은 Convolution이라 불리는 특별한 기술을 사용한다.

 

수학적으로 Convolution은 하나의 형태가 다른 것에 의해 어떻게 변형되는지를 표현하는

세 번째 함수를 만들어내는 두 함수에 대한 수학적 연산이다.

Convolution(합성곱)은 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음,
구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자  - 위키백과 -

 

▶ 위 정의를 읽고서는 직관적으로 Convolution이 와닿지 않는데 아래 내용을 천천히 보면서 이해해 보자..

 

 

How does it work?


CNN을 이해하기 전에 이미지란 무엇이고 이미지가 어떻게 표현되는지를 짚고 넘어가겠다.

RGB 이미지는 3개의 평면을 가진 픽셀 값들의 행렬인 반면,

grayscale 이미지는 단 한개의 평면을 가진 픽셀 값들의 행렬이다.

 

RGB 이미지는 3 Channels이다. Red, Green, Blue 각각 한장이라고 생각하면 된다. 

 

CNN의 작동방식을 이해하기 위해 아래 grayscale 이미지를 사용하겠다.

 

Convolution은 단순한 행렬곱 연산이 아니라 각 자리의 원소끼리만 각각 곱하는 element-wise 연산!!

 

위의 이미지는 Convolution이 무엇인지 보여준다. 우리는 3x3 행렬의 filter/kernel을 가지고

Convolved feature를 가져오기 위해 입력 이미지에 이 filter/kernel을 적용한다.

그리고 이 Convolved feature는 다음 layer로 전달된다.

 

kernel은 sliding window하는 영역에서의 크기 -> 2차원
filter는 가중합을 하는 영역의 크기 -> 3차원

kernel과 filter는 엄밀히 말하면 다르다.

filter/kernel이 이미지 위를 움직이며 feature를 뽑아낸다.

 

 

RGB와 같은 3 Channel에서는 각 Channel의 값을 합해 Convolved feature로 만듦

 

 

CNN은 인공 뉴런들로 구성된 다층 layer로 되어있다.

인공 뉴런은 다중 입력값의 가중합을 계산하고 활성화 값을 출력하는 수학적 함수이다.

CNN은 각 layer에서 다음 layer로 전달되는 여러 활성화 함수들을 생성한다.

 

첫번째 layer는 대게 수평 또는 대각선과 같은 기본적인 특징을 추출한다.

이 출력은 다음 layer로 전달되어 코너, 모서리의 조합들을 특징으로 추출한다.

네트워크가 깊어지면 깊어질수록 얼굴과 같은 훨씬 복잡한 특징을 식별할 수 있다.

 

네트워크가 깊어질수록 모델은 high-level feature를 인식한다.

 

최종 Convolution layer의 Activation map을 기반으로,

분류 layer는 이미지가 어떤 클래스에 속할지를 0과 1사이값으로 출력한다.

Activation map은 Convolution을 통해 만들어진 출력인 Feature map에 활성화 함수를 적용한 것

 

예를 들어 고양이, 개, 말을 탐지하는 CNN이 있는 경우,

최종 layer의 출력값은 입력 이미지 속에 어떤 동물이 있을지에 대한 확률이라 할 수 있다. 

 

 

What's a pooling layer?


Convolutional layer와 유사하게, Pooling layer는 Convolved feature의 사이즈를 줄여주는 역할을 한다.

이것은 차원을 줄여줌으로써 데이터 처리에 요구되는 Computational power를 줄여준다.

Pooling에는 Average PoolingMax Pooling이라는 두 가지 유형이 있다.

이 두 유형외에도 Min Pooling, Global Average Pooling 등 다른 Pooling 방법들이 있다. 

 

Max Pooling은 kernel이 다루는 이미지의 일부에서 픽셀의 최대값을 찾아낸다.

Max Pooling은 또한 Noise 제어를 수행한다.

이것은 noisy한 활성화값들을 전부 버리고 또한 차원 축소와 함께 de-noising을 수행한다.

 

반면, Average Pooling은 kernel이 다루는 이미지의 일부에서 모든 값의 평균을 반환한다.

Average Pooling은 단순히 noise 억제 매커니즘으로서 차원 축소를 수행한다.

따라서 Max Pooling이 Average Pooling보다 훨씬 뛰어난 성능을 발휘한다.

반드시 그런 것은 아니다.. 특정 Pooling이 다른 Pooling보다 낫다고 일반화할 수는 없다.

 

 

Limitations


CNN의 자원 복잡성에도 불구하고, CNN은 심층적인 결과를 제공한다.

이러한 근간에는 인간의 눈에 띄지 않을 정도로 미세한 패턴과 디테일을 인식하는 점이 작용한다.

그러나 CNN은 이미지의 내용을 이해하는 데에서는 실패한다.

 

예를 들어, 아래 이미지를 CNN에 전달하면 CNN은 30대 중반의 사람과 열살 남짓의 아이를 감지한다

하지만 우리가 동일한 이미지를 보면 여러 가지 다른 시나리오를 떠올릴 수 있다.

"아빠와 아들이 외출하거나 소풍, 혹은 캠핑 가는 걸수 도 있어요"
"아마도 학교 운동장에서 아이가 골을 넣었고 그의 아빠는 기뻐서 그를 들어 올렸어요"

 

CNN은 이미지에서 어떤 물체를 인식할 수 있지만, 사람처럼 맥락을 이해하지는 못한다.

 

이러한 한계는 실용적으로 애플리케이션에 적용했을 때 더욱 명확하다.

예를 들어, CNN은 소셜미디어에서 컨텐츠를 다루는데 널리 사용되었다.

방대한 이미지와 비디오 리소스에도 불구하고 CNN은 부적절한 컨텐츠들을 완전히 차단하고 제거할 수 없다.

 

몇몇 연구에서 ImageNet과 다른 유명 데이터셋을 학습한 여러 CNN 모델들이

학습과는 다른 조명 조건과 새로운 각도에서 물체를 볼 때 물체를 검출해내지 못하는 것으로 나타났다.

 

그렇다면 CNN은 쓸모없다는 것을 의미할까?

CNN의 한계에도 불구하고 CNN은 AI에 혁명을 일으켰다는 사실을 부인할 수 없다.

오늘날 CNN은 얼굴 인식, 이미지 검색과 편집, 증강 현실과 같은 많은 CV 애플리케이션에 사용되고 있다.

CNN의 발전이 보여주듯 우리의 성취는 주목할 만하고 유용하지만,

여전히 인간 지능의 핵심 요소들을 복제하는 것과는 거리가 멀다.

 

 

정리


CNN은 Computer Vision의 근간이라고 할 수 있는 Network이기 때문에

위 글을 빌려 정리를 하고 넘어가게 되었다.

 

Stride, Padding 등의 개념은 빠져 있어 조금 아쉬웠지만

과거 랜드마크 이미지 분류 모델을 개발하면서 읽고 지나갔던 글이라 반갑기도 했고

무엇보다 CNN의 전반적인 흐름을 이해하기에는 좋은 글이었다고 생각한다.

 

이 글 말미에서 저자는 CNN이 이미지의 내용을 이해하지 못하는 점 등을 들어 한계를 지적했는데

이미지에 캡션을 달아주는 Image Captioning 기술을 비롯해 CV와 NLP가 묶이면서

이러한 한계를 극복해내갈 것이라고 생각한다. 언젠가는...🙂