안녕하세요~


이번글에서는 Convolution Neural Network(CNN)의 기본구조에 대해서 알아보도록 할거에요. CNN은 기본적으로 Convolution layer-Pooling layer-FC layer 순서로 진행이 되기 때문에 이에 대해서 차근차근 알아볼거에요.


<사진1>










<1. Convolution layer>


먼저 CNN에서 핵심이 되는 부분은 convolution layer에요. 보통 convolution layer에서 이미지를 classification(분류)하는데 필요한 특징(feature)정보들을 뽑아내요.


<사진2>


Convolution layer에는 수 많은 filter들이 있어요. 이러한 filter들을 통해 feature들을 뽑게 되는데 지금부터 어떻게 뽑아내는건지 보여드릴게요.


이미지의 feature가 될 수 있는 요소는 굉장히 많지만 그 중에서 대표적인 것이 형태가 될거에요. 물체의 윤곽부분만 보더라도 우리는 물체가 무엇인지 구분하는데 큰 정보를 얻게되요. 아래 사진에서도 오른쪽의 윤곽선만 보더라도 우리는 물체를 쉽게 가늠해볼 수 있어요.


<사진3>


먼저 convolution filter가 어떻게 연산을 하는지 살펴보고 좀 더 이해하기 쉽도록 이야기를 풀어나가볼게요.


<사진4>


convolution filter는 위와 같이 전체이미지를 차례대로 움직이면서 (이렇게 움직이는 방식을 window sliding이라고해요) 특징값을 추출해내는거에요. 전체 이미지에서 특정 filter의 모양과 일치하게 되면 그 부분에서 큰 값을 갖게 되겠죠? 이러한 filter가 전체 이미지를 순회하고 나면 전체 이미지에서 해당 filter와 유사한 모양을 가진 부분에 대한 feature들만 얻을 수 있게되요. 우리는 이러한 과정을 통해 "특정 filter에 부합하는 feature 정보를 얻었다"라고 말하게 되는거죠.



1) First convolution layer


CNN에서 물체의 윤곽을 알아내기 위해서 제일 처음 하는 작업은 edge filter를 사용하는거에요. Convolution filter는 모든 layer에서 같은 크기로 고정되어 있어요 (보통은 3x3 size로 구성되는데 이에 대한 이유는 뒤에서 설명드릴게요). 그렇기 때문에 처음에 들어오는 이미지 크기는 convolution filter 크기에 비해 상대적으로 크기 때문에 filter가 이미지를 커버할 수 있는 부분이 선과 같은 단순한 정보에요 (그리고 이러한 단순한 모양들을 edge라고 부릅니다). 예를 들어, 우리가 아래 그림의 오른쪽 사람을 매우가까운 거리에서 현미경으로 살펴본다고 했을 때 사람얼굴이 보이는게 아니라 무수히 많은 선들만 보이겠죠? 


아래 그림을 보시면 더 잘 이해하실거에요. 우리가 아래 그림처럼 7x7 conv filter를 갖고 있다고 가정해 볼게요. 그럼 아래 7x7 conv filter가 쥐 이미지(전체 이미지)를 천천히 순회하다보면 conv filter의 edge 부분과 일치하는 영역에서 굉장히 높은 값을 도출하게 될거에요.


      

 

<사진5>



지금까지 이야기한 것들을 바탕으로 convolution layer가 어떻게 동작하게 되는지 보여들게요.


아래 그림에서 45번째 convolution filter를 적용해볼게요. 아래 그림의 오른쪽 부분 녹색테두리 네모박스 부분이 45번째 convolution filter가 적용된 결과를 보여주는거에요. 아래 그림 왼쪽 부분에서 45번째 convolution filter를 보시면 좌측에서 우측으로 갈 수록 밝아지는걸 볼 수 있죠? 그렇다면, 이러한 filter가 오른쪽 이미지 좌측상단의 사람 이미지에 차례대로 적용된다고 했을때 좌측에는 어둡과 우측에는 밝은 영역을 지닌 부분에는 흰색으로 표시할거에요 (gray scale에서 흰색이 높은 값을 갖게 됩니다).


     

<사진6-1>


위의 그림에서는 96개의 filter가 있는데요. 96개의 filter를 쓴다는건 96개의 서로다른 feature를 뽑아내겠다는것과 같아요.


결과적으로 우리가 6개의 filter를 사용하면 아래 그림의 첫 번째 convolution layer에서는 6개의 결과값들이 나오게 되는데 이를 feature map(특징(feature)정보들이 들어있는 map(정보)인 거죠)이라고 불러요. (전체적인 과정은 뒤에서 다시 요약해서 설명해 드릴게요!) 즉, first convolution layer에서 6개의 convolution filter를 사용한 결과 6개의 feature maps (아래 연두색 그림 부분)을 얻게 되었네요! 각각의 feature map은 위에서 설명한 것과 같이 각각의 convolution filter와 부합하는 feature 정보들이 들어있을거에요.




처음에는 conv filter 역시 초기값 설정을 통해 무작위로 분포하게 되지만 학습을 통해서 아래의 오른쪽과 같이 완성된 edge filter로 만들어지게 됩니다.



<사진6-2>











2) Pooling layer


아래사진을 보면 convolution layer (Conv) 사이에 Pooling layer (pool)가 사이사이에 배치하고 있습니다. 이러한 Pooling layer은 CNN에서 어떤 역할을 담당하고 있는걸까요?


<사진7>


먼저 Pooling 연산에 대해서 알아보도록 할 텐데 Pooling 연산 자체는 크게 어렵지 않아요. convolution filter를 거친 결과로 얻은 각각의 feature map에서 특정영역을 형성하여 해당 영역 내에서 가장 큰 값을 도출하게 되요. 이러한 방법을 max pooling이라고 하는데, 실제로는 pooling에도 여러가지 종류가 있어요. 하지만, 여기에서는 max pooling을 기준으로 설명드릴게요~ 


Max pooling은 말그대로 특정영역에서 가장 큰 값을 꺼내어 쓰는거에요. '사진9'를 보면 모양은 그대로인데 pooling결과 좀 더 feature들이 뚜렷해지는 것을 볼 수 있죠? 당연히 pooling을 할때 주위의 영역중 가장 큰 값을 뽑기 때문에 이러한 결과가 나오는게 아닐까해요.


      <사진8>  



     

<사진9>



 '사진10'를 보시면 아시겠지만 pooling 연산을 통해서 형태는 유지하면서 기존의 이미지크기를 작게 만들어 줄 수 있게 됐어요 (이러한 작업을 down sampling이라고해요). 왜 이런 down sampling을 통해 이미지를 작게 만드는 걸까요?


        <사진10>      



앞서 conv filter의 size는 변함이 없다고 했죠? 만약 pooling을 통해 down sampling을 하게 된다면 이후의 conv filter는 어떻게 학습하게 될까요? First convolution layer에서의 conv filter는 edge 정보만 추출할 수 있다고 말씀드렸죠? 그런데 아래그림의 오른쪽 사람얼굴을 보면 전체 이미지 사이즈가 작아지니 conv filter의 크기가 상대적으로 조금 더 커졌다는걸 알 수 있어요. 그렇기 때문에 이제는 edge 정보가 아니라 눈과 같이 조금 더 추상적(abstract)인 정보를 볼 수 있는 conv filter를 갖을 수 있게 되었어요.


(그림 실력이....;;;)


이러한 pooling layer 때문에 CNN은 아래와 같은 설명이 가능해졌답니다. 즉, layer가 깊어지면 깊어질 수록 좀 더 abstract feature를 추출할 수 있게 되고, 이것을 통해서 아래와 같은 그림으로 CNN을 표현할 수 있게 됩니다. 



<사진11>

<사진12>






3) 중간점검


지금까지 Convolution layer와 pooling layer에 대해서 이야기 해보았어요. 마지막 단계는 FC layer인데 FC layer를 설명하기전에 지금까지 설명했던 부분을 아래그림을 통해 다시 요약해보려고해요.


먼저 첫 번째 convolution layer를 보면 6개의 convolution filter를 사용하고있어요. 그 결과 각각의 특징을 갖는 6개의 feature map이 만들어지겠네요. 그리고, pooling을 통해서 6개의 feature map size가 줄어들게 되었어요.



두 번째 convolution layer에서는 16개의 convolution filter가 사용되었네요. 첫 번째 convolution layer에서 사용된 convolution filter보다는 좀 더 abstract한 convolution filter 모양을 보일거에요. 그리고 두 번째 convolution filter 하나가 사용될 때에는 이전 conv layer-pooling layer를 통해 얻은 6개의 feature map에 동시에 적용되요. 


이렇게 되면 각 feature map을 합산한 하나의 feature map이 만들어 질거고 합산한 feature map에 두 번째 convolution layer에 있는 16개의 conv filter들을 적용해서 또 다른 16개의 feature map을 만들게 되요.


    


아래 영상을 참고하시면 더 이해하기 쉬우실거에요!



그리고 보통 layer가 뒤로갈 수록 filter의 총 개수가 많아지는데요. 그 이유는 두 가지 측면에서 해석해 볼 수 있을거 같아요.



첫 번째는 연산량이에요. 처음에는 이미지가 크기 때문에 6개의 conv filter로만 계산을 해도 굉장히 많은 연산을해야해요. 하지만 마지막 layer까지 가다보면 이미지의 크기 (or feature map)가 매우 작아지게 되는데 이때는 많은 conv filter로 convolutoin 연산을 적용해도 첫 번째 conv layer에서 6개의 filter를 적용한 계산량과 비슷하게 될거에요.


두 번째는 추출한 feature의 형태에요. 첫 번째 layer에서 뽑아낼 edge 정보는 굉장히 단순한 구조로 되어 있어요. 그렇기 때문에 많은 형태의 모양이 있을 필요가 없다고 판단할 수 있을거 같아요. 하지만 모양이 점점 추상적으로 바뀌어 갈수록 점점 형태가 복잡해져요. 예를들어, 강아지의 윤곽선을 만들기 위해서 쓰이는 edge가 직선, 대각선, 곡선 3가지라고 한다면 강아지의 귀를 만들기 위해서는 세모, 네모, 동그라미, 다각형, 구부러진 귀 모양 등등 더 다양한 형태가 필요하게 될거에요. 








4) FC layer


위에서 설명드린 방식으로 feature를 뽑다보면 마지막에는 물체와 유사한 형태들의 feature map들이 선별되게 될거에요.




결국 물체와 유사한 feature map을 통해서 classification(분류)를 하게 되는데요. 이때 사용되는 개념이 FC layer에요. 아래 그림의 FC layer를 보니 뭐가 떠오르시지 않나요? 맞습니다. 결국 FC layer는 기존의 Deep Neural Network(DNN; MLP)네요. 


<사진13>


앞에서 convolution filter를 통해 시각정보를 최대한 보존해 오면서 마지막 feature map들을 일렬로 늘린 후, 이들을 DNN과 같이 입력차원으로 받아드려서 하나의 hidden layer거쳐 classification(분류) 문제를 해결하게 되는거에요. (아래영상은 DNN에 대한 영상이지만 feature map들이 결국 어떻게 일렬로 펼쳐져서 입력되는지 이해하시는데 도움이 되실거에요)




지금까지 CNN 구조와 각각의 역할에 대해서 알아보았어요. 이번장에서는 CNN에 대한 전반적인 개념을 설명하려다 보니 구체적인 수식들은 배제했어요 (정확한 수식에 대해서는 '딥러닝 제대로 시작하기'라는 책을 참고하시면 더 좋을 것 같아요). 


다음글에서는 CNN이 기존 DNN구조에 비해 얼마나많은 연산량의 감소가 있었는지 그리고 이러한 부분이 왜 이미지영역에서 뛰어난 성과를 거두는데 기여하게 되었는지 살펴보도록 할게요!



(아래영상은 CNN이 진행되는 과정을 visualization한 영상이니 참고하시면 도움이 되실거에요~!)










[사진 래퍼런스]

사진1

밑바닥부터 시작하는 딥러닝

사진2

https://d2l.ai/chapter_convolutional-neural-networks/lenet.html

사진3

https://steemit.com/kr/@rubymaker/3ylvdc-rubymaker

사진4

https://stats.stackexchange.com/questions/296679/what-does-kernel-size-mean/296701

사진5

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

사진6-1,9

https://www.youtube.com/watch?v=AgkfIQ4IGaM

사진6-2

밑바닥부터 시작하는 딥러닝

사진7

https://www.researchgate.net/figure/AlexNet-and-VGGNet-architecture_fig1_282270749

사진8

https://www.itread01.com/content/1544830204.html

사진10

http://cs231n.github.io/convolutional-networks/

사진11

https://www.researchgate.net/figure/Illustration-of-Convolutional-Neural-Network-CNN-Architecture_fig3_322477802

사진12

https://slideplayer.com/slide/3270662/

안녕하세요~


지난시간에서는 DNN(Deep Neural Network)구조가 이미지영역에서 왜 성과가 낮은시 설명해드렸어요. 결과적으로는 이러한 단점을 극복한 것이 Convolution Neural Network (CNN)라는 구조인데, 그렇다면 CNN은 어디서 기원했을까요?



<1.고양이의 시각피질 검사>


사람들이 인간의 신경망을 본떠 Deep Neural Network를 만들어낸것 처럼, CNN도 시각피질(visual cortex)의 neuron이 어떻게 작동하는지를 알아보기 위해 노력을 했습니다. 이를 알아보기 위한 실험으로 고양의 시각피질 반응에대한 실험을 진행했는데요. 고양이에게 단순한 모양의 여러패턴(같은모양의 다른방향을 갖고있는 그림 or 다른모양의 같은 방향을 갖고 있는 그림 등)을 보여주고 시각피질의 반응을 살펴보게 됩니다. 그리고, 이러한 다양한 패턴에따라 뉴런이 반응하는 정도가 다르다는 사실을 알게 됩니다.


 

<사진1>


이 실험에 의하면 고양이의 시각 피질은 흑백 이미지에서 밝기가 변하는 사선이나 배경색과 대조되는 움직이는 사선 즉 사선형 edge를 detect 할 수 있다는 결론이다. 더 나아가서 후벨의 실험에 의하면 시각피질은 이미지에서 edge의 크기 또는 기울어진 각도와 edge의 움직이는 방향을 detect할 수 있도록 다음과 같이 세 종류의 Neuron 들로 구성되어 있다는 점을 밝혔어요. (아래 글에서 세 가지 cell에 대해서 설명할거에요)


Cell Type 

 Selectivity

Simple 

Orientation, position 

Complex

Orientation, motion, direction  

Hypercomplex 

Orientation, motion, direction, length 


외부로부터 눈에 들어온 빛은 망막에서 전기적인 신호로 변환된 뒤뇌의 시각피질(visual cortex)로 전달되는데요Visual cortex에 있는 세포 중에는 망막의 특정 부분이 특정 패턴으로 입력되면 활성화가되고그 외의 패턴에 대해서는 활성화 되지 않는 선택적인 행동을 보이는 세포가 있어요특히망막으로부터 온 정보의 입구 역할을 하는 초기 시각 피질에 속한 신경세포에 이러한 선택적인 반응을 보이는 세포가 있다는 것이 예전부터 알려져 있었는데, 이러한 세포에는 단순세포 (simple cell) 과 복잡세포(complex cell) 라 불리는 두 종류의 세포가 있습니다 


 

          

<사진2>



단순 세포는 엄격한 위치(position)와 방향(orientation)정보를 갖고 있어요. 그래서 '사진2'의 왼쪽그림을 보면 노란색선의 방향이 다르거나 위치만 바뀌어도 simple cell은 활성화되지 않는다는걸 알 수 있어요.


복잡 세포는 방향성에 그렇게 엄격하지 않고 입력 패턴을 조금 벗어나도 반응하는데요. 위의 '사진2'의 중간그림을 보면 선의 방향의 위치가 조금 바뀌더라도 활성화되는 것을 알 수 있어요. 그렇기 때문에 어떤 선이 같은 방향으로 움직이면 특정 complex cell 지속적으로 활성화되어 다음과 같은 판단을 할 수 있을거에요 "아! 지금 A라는 complex cell이 계속 활성화되어있는거 보니까 특정모양의 선이 우측대각선 아래로 움직이고 있구나!" (어쨋든 simple cell을 기반(특정모양의 선)으로 위치정보를 파악할 수 있었나보네요)


위와 같은 비슷한 방법으로 Hypercomplex cell도 motion, direction, orientation, length과 같은 더 많은 정보를 포함하게 됩니다.


결국 이미지를 구성하는 기울어진 크고 작은 edge 요소들의 합성 과정과 complex cell, hypercomplex cell을 통해 좀 더 많은 정보를 포함하게 함으로써 통해서 전체 이미지를 구성해 볼 수 있어요.


<사진3>



이러한 개념을 공학적으로 설계한 첫 번째 모델이 "Neurocognitron"이라는 모델이에요. Neurocognitron에 대한 자세한 설명은 하지 않을게요. 그냥 시각정보를 반영하는 인공뉴런을 공학적으로 설계했다는데 큰 의의를 두시면 될 것 같아요~







<2. LeNet의 탄생>


아무튼, 이렇게 시각적인 정보를 담고있는 뉴런들에 대한 연구가 지속되어오다가 마침내 1998년 Yann LeCun이라는 분이 오늘날의 Convolution Neural Network의 구조를 만들게 되요. 앞서 언급한 것 처럼 초반에는 간단시각정보를 먼저 수집하고 이를 기반으로 뒤로 갈 수록 좀더 추상적인 정보를 담을 수 있게 되요 (아직 구체적인 이해가 안되시는게 당연해요. 다음글에서 이 부분에 대한 자세한 설명할게요!)


<사진4>




요약하자면, CNN이라는 것이 biological concept에서 출현하게 되었고, 이를 공학적인 패턴인식에 이용한것이  neurocognitron이며, 오늘날의 CNN 뿌리라고 할 수 있는 LeNet으로 까지 이어지게 되었다고 할 수 있어요.


<사진5. LeNet 구조>


<사진6. 일반적인 CNN 구조>



다음글에서는 본격적으로 위의 사진의 CNN 구조를 자세하게 살펴보도록 할게요!








[글 래퍼런스]

https://steemit.com/kr/@codingart/4-8-edge-detection-cnn-convolutional-neural-network


[사진 래퍼런스]

사진1

 https://www.google.co.kr/url?sa=i&source=images&cd=&ved=2ahUKEwis4tHg8L7cAhUCXrwKHdE-DjYQjhx6BAgBEAM&url=https%3A%2F%2Fwww.timetoast.com%2Ftimelines%2Fa-shamelessly-awesome-history-of-modern-psychology&psig=AOvVaw3SNGNDlSDOHXiSBJSDtlLG&ust=1532767155814949

사진2

https://en.wikipedia.org/wiki/Hypercomplex_cell

사진3

딥러닝 제대로 시작하기

사진4

https://neurdiness.wordpress.com/2018/05/17/deep-convolutional-neural-networks-as-models-of-the-visual-system-qa/

사진5

https://d2l.ai/chapter_convolutional-neural-networks/lenet.html

사진6

밑바닥부터 시작하는 딥러닝

안녕하세요~


이번 챕터부터는 Convolution Neural Network (CNN)에 대해서 다룰려고해요. CNN은 다양한 분야에서 쓰이지만 이미지영역에서 특히 두각을 나타내고 있어요. 그러기 위해서는 기존에 Deep Neural Network (DNN)가 이미지영역에서 왜 쓰이기 힘들지를 알아야겠죠?


먼저, DNN이 이미지를 어떻게 학습하는지 아래 동영상을 통해 알아보도록 할게요.




뭐가 문제인지 보이시나요?

첫 번째, 가시적으로 보이는 건 28x28 이미지를 DNN에 입력하려고 할때 일렬로 늘리는걸 보실 수 있으신가요? DNN의 입력차원이 784개라는 부분에서부터 벌써 curse of dimensionality 문제를 곧바로 연상시키게 되요 (curse of dimensionality는 여기 링크를 참고해주세요).


<사진1>


두 번째, DNN은 위치정보를 고려하지 않기 때문에 학습이미지가 조금만 shift or distortion되면 다른 이미지라고 볼 확률이 높아요. 우리들은 모양이라는 위치정보를 통해 아래 6개중 하나만 A라고 배우면 나머지도 모두 A라고 말할 수 있어요. 그런데 DNN은 아래 입력이미지들을 일렬로 펼치고 학습하기 때문에 모양과 같은 위치정보로 학습하는것이 아니라 그냥 28x28 pixel에 존재하는 개별적인 값들로 학습을 하게 되요 (위의 영상을 참고하시면 제가 말하고자 하는 의도를 더 잘 이해하실거에요). 이러한 이유때문에 학습할 양의 이미지들이 배로 늘어나게 되요.



<사진2>



세 번째, DNN은 Fully-connected layer 구조에요. Fully- Connected layer란 이전의 모든 neuron들이 다음 각각 neuron들에 전부 연결되어 있음을 의미해요. 그래서 위와 같이 이미지가 학습데이터로 입력되면 굉장히 많은 parameter(가중치; weight)값들이 발생하게되요. 이렇게 되면 학습이 굉장히 오래걸리게되요. 왜냐하면 각각의 가중치들의 최적화값들을 찾아주어야 하기 때문이에요.


세 번째, 첫 번째의 단점과 세 번째의 단점을 결합하면 overfitting이 일어나기 굉장히 좋은 조건이되요. 먼저 curse of dimensionality 문제 때문에 항상 학습데이터가 충분하지 않게되요. 즉, 우리로써는 굉장히 많은 이미지를 잘 학습시켰시켰다고 했지만, 학습시키지 않았던 다른 이미지로 test 해보면 classification을 잘 못하게 되요. 이러한 문제는 가중치가 많은 모델에서 더욱 문제가 되는데요. 그 이유는 적은양의 training dataset을 통해 굉장히 많은 가중치들이 training dataset에 최적화되어 있기 때문이에요. 예를들어, 바나나를 인식할때 판단하는 기준이 모양, 색깔 2가지라고 해볼게요. 아래 그림에서 우리는 A를 바나나라고 배웠고, 모양과 색깔만 보고서 B도 A와 같은 바나나라고 판단할 수 있어요. 그런데 만약에 바나나를 판별하는 기준이 1000가지라고 해볼게요. A를 1000개의 기준을 통해 바나나라고 인식했을때, B를 A와 같은 바나나라고 말할 확률이 얼마나될까요? 판별기준이 뭔지는 모르겠지만 확률이 급격하게 낮아질거에요. 결국 가중치가 많다라는건 판단 기준이 많다는 건데 training dataset을 2개만 학습하고 그 2개의 공통적인 특성 1000개를 판단기준으로 삼으면, 우리가 봤을때 별반 차이없는 데이터조차 training dataset과 다르다고 할 확률이 높게됩니다. 즉, overfitting이 일어날 확률이 높아지는거죠.


    

    <A>                       <B>



지금까지 DNN이 이미지영역에서 왜 좋지 않은지에 대해서 알아보았어요. 요약해서 말하자면 아래와 같아요.

- 고차원 입력 데이터로 인한 curse of dimensionality 문제 -> 학습데이터 부족, Overfitting

- 고차원 입력 데이터 + DNN구조(FC Layer)로 인한 문제 -> 학습시간 증가

                                                                         -> 많은 가중치들->Overfitting

- 위치정보를 고려하지 않음 -> shift, distortion 데이터가 추가로 필요 -> 학습해야할 데이터량 증가




그렇다면 CNN은 어떻게 이를 극복했을까요? 

힌트는 가중치들의 수 (the number of parameters)의 감소와 위치정보의 고려가 되겠어요!


다음글에서 위의 힌트를 기반으로 CNN의 기본적인 구조를 설명해보도록 할게요~!





[사진 래퍼런스]

사진1

https://www.youtube.com/watch?v=aircAruvnKk

사진2

https://m.blog.naver.com/laonple/220587920012

바나나사진

http://food.chosun.com/site/data/html_dir/2017/06/08/2017060802238.html

+ Recent posts