ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CNN 개요와 흐름
    [+] 인공지능 [+] 2020. 12. 13. 19:59

     

    INDEX

    0. CNN의 탄생 배경

    1. CNN의 개요

        1-1. 합성곱 층 (Convolution Layer)

        1-2. 풀링 층 (Pooling Layer)

    2. CNN의 흐름

        LeNet-5 - 얀 르쿤(1998)

        AlexNet - 알렉스 크리체프스키(2012)

        GoogLeNet - 크리스찬 세게디(2014)

     

    0. CNN의 탄생 배경

     

    CNN에 대한 아이디어는 일부 범위 안에 있는 시각 자극에만 반응한다는 데에서 착안하였습니다.

     

    그도 그럴 것이, 타인이 저를 알아보는 것은 저의 명치를 보고 알아보는 것도 아니고, 제 어깨나 무릎도 아닌

    헤어스타일과 이목구비를 보고 저를 인식할 것입니다.

     

    이미지 인식 문제에서 완전 연결층(FC)을 이용하여 물체를 인식하는 작업은 유효하지만, 큰 이미지에 대해서는 문제가 됩니다. 예를들어, 800 x 600 의 해상도를 갖는 이미지를 각 픽셀단위로 쪼개어 학습을 하게 된다면 각 은닉층 마다 무수히 많은 파라미터들이 생성되는데, 이는 상당히 비효율적입니다.

     

    하여, 이미지의 모든 픽셀에 연결되는 것이 아닌 일부 영역에 대한 특징을 추출하고 분류 작업에 입력 값으로 제공될 수 있는 모델이 고안되었는데, 이를 CNN(Convolutional Neural Network)이라 합니다.


    1. CNN의 개요

    1-1. 합성곱 층(Convolution Layer)

     

    CNN의 가장 중요한 구성요소는 합성곱 층(Convolutional layer)풀링 층(pooling layer)입니다.

     

    먼저 합성곱 층부터 살펴봅시다.

     

    앞서 언급했듯이, CNN은 입력 이미지의 모든 픽셀과 연결되는 것이 아닙니다.

     

     

    출처 : https://anhreynolds.com/blogs/cnn.html

     

    사전에 설정된 N x N 사이즈에 대하여 입력 이미지의 N x N 사이즈 영역을 추출하고

    가중치를 곱하여 출력되어 집니다.

     

    위의 작업에서 추출된 영역과 곱해졌던 N x N 행렬을 필터(Filter)라고 합니다.

    (필터의 파라미터는 학습을 통하여 자동으로 수정됩니다)

     

    이와 같은 과정은 좌상단부터 시작하여 우하단까지 이어집니다.

     

    우하단까지 가중합을 진행한 후 최종적으로 출력된 이미지를 특성맵(Feature Map)이라 합니다.

    (여러 개의 필터를 사용하여 특성맵을 다양하게 추출하는 것이 가능합니다.)

    출처 : https://anhreynolds.com/blogs/cnn.html

     

    위의 그림에서는 8 x 8 사이즈에 대하여 3 x 3 필터를 적용한 가중합(Convolution) 입니다.

    위치가 서로 다른 36개의 영역에 같은 필터를 적용하여 특성맵을 추출합니다.

     

    주목할만한 것은, 다른 영역과 연산에서 필터는 같은 파라미터를 공유한다는 점입니다. 

     

    여기서 CNN 강력한 강점을 발견할 수 있습니다.

    필터의 파라미터가 공유되기 때문에, 일반 인공 신경망과 달리 학습 파라미터를 최소화 할 수있습니다.

     

     

    또한 일반적인 신경망에서는 입력 이미지를 일차원의 평평한 형태로 펼친 후 학습합니다.

     

    이러한 신경망에서는 이미지의 형상이 무시됩니다.

     

    입력으로 제공된 하나의 픽셀이 좌측에 위치하는지 가장자리에 위치하는지, 주변에는 어떤 픽셀들과 섞여있었는지 등이 고려되지 않습니다.

     

    어 흥

    호랑이 사진을 예를 들어 설명해 보자면

     

    호랑이의 눈동자는 검은색입니다. 하지만 주위의 노란색과 황갈색으로 둘러쌓인 가운데에 있는 검은색입니다.

     

    검은색이라는 단서만으로 해당 픽셀이 호랑이의 눈을 의미하는지, 호랑이의 무늬를 의미하는지 알 수 없습니다.

     

    공간적 단서의 부재는 이미지 인식에서 치명적입니다.

     

    CNN은 2차원 이미지를 그대로 입력층에 받아서 출력합니다.

    (실은 2차원은 잘못된 표현입니다 쉬운 이해를 위해 디테일은 넘어갑시다)

     

    여기서 CNN의 또 하나의 강점을 알 수 있습니다.

    CNN은 이미지의 공간적 단서를 유지하면서 특징을 추출해 냅니다.


    1-2. 풀링 층(Pooling Layer)

     

    위에서 설명했듯이, CNN은 합성곱 층과 풀링 층으로 구성되어 있습니다.

     

    풀링 층(Pooling layer)이란 출력 데이터를 입력으로 받아서 크기를 줄이거나 강조하는 용도로 사용됩니다.

     

    출처 : http://ethen8181.github.io

     

    하나의 이미지는 수십만 픽셀의 집합입니다. 무수히 많은 픽셀을 각각 입력 값으로 넣어 학습을 시키기에는 무리입니다.

     

    합성곱 층에서도 특징을 추출하고 크기를 줄여 내보내는 작업을 하지만, 그것만으로도 충분하지 않습니다.

     

    2차원 입력 데이터를 정사각 형태로 N 등분하여 각 영역을 가장 잘 대변해 줄 수 있는 값을 찾아 내보냅니다.

     

    대표적으로 각 영역에서 가장 큰 값을 내보내는 맥스 풀링(Max Pooling)과 평균 값을 내보내는 평균 풀링(Average Pooling)이 있습니다.

     

     

     

    출처 : https://towardsdatascience.com

     

     

    CNN은 합성곱 층과 풀링 층을 겹겹이 쌓아놓은 구조로 이루어져 있습니다.

     

    합성곱 층을 몇 개 쌓고, 그다음 풀링 층을 쌓고, 또 합성곱 층을 몇 개 더 쌓고, 다시 풀링 층을 쌓아서 완성하는 식입니다.

    이후 맨 위에 층에는 일반적인 완전 연결 신경망이 추가되고 소프트맥스(분류 문제라면)를 통과하여 예측을 출력합니다.


    2. CNN의 흐름

     

    공간적 단서 유지, 이미지의 특징 추출 및 강화, 소량의 학습 파라미터 등 CNN은 복잡한 이미지 처리 문제에 발군의 성능을 보이고 자율주행, 이미지 검색 등 다양한 분야 기본적으로에 사용됩니다.

     

    CNN의 발전 과정을 살펴보면 컴퓨터 비젼 분야의 흐름을 이해하는데에 많은 도움이 될 것입니다.

     

     

    LeNet-5 - 얀 르쿤(1998)

     

    INPUT - C1 - S2 - C3 - S4 - C5 - F6 - OUTPUT

     

    • 처음에 28x28 이미지를 제로 패딩하여 32x32 이미지를 입력합니다.
    • 특이하게도 S2, S4는 평균 풀링층이지만 파라미터가 존재합니다. 평균을 계산한 다음 파라미터 값을 곱하여 출력합니다.
    • C3은 6개의 이미지를 입력받아 16개의 이미지를 출력하지만, 모든 이미지에 대해서 일관적인 필터를 사용하지 않습니다. 6개의 이미지중 2, 3, 4번 이미지는 2번 필터를 통과시키고, 0, 2, 4, 5번 이미지는 14번 필터를 통과시키는 등 비일관성을 가하여 서로 다른 조합으로 엮기게 하였습니다.

     

    당시 컴퓨팅 능력이 떨어졌던 까닭인지, 추출된 특성맵이 상당히 적습니다.

     

    같은 구조를 유지하여 파라미터의 수를 크게 늘린다면 더 좋은 성능을 기대해볼만 하지 않을까요?

     

    AlexNet - 알렉스 크리체프스키(2012)

     

    INPUT - C1 - S2 - C3 - S4 - C5 - C6 - C7 - F8 - F9 - F10 - OUTPUT

     

    합성곱 층 위에 풀링 층을 쌓지 않고 바로 합성곱 층을 쌓았습니다.

    데이터 증식(Data Agumentation)을 수행하였습니다.

    활성화 함수로 ReLU함수를 사용하였습니다.

    C1 C3 이후에, LRN이라 불리는 정규화 단계를 진행하였습니다.

     

     

    GoogLeNet - 크리스찬 세게디(2014)

     

    2014년을 기점으로 기업 단위의 신경망 개발이 진행됬음을 엿볼수 있습니다.

    압도적인 깊이를 기반으로 높은 성능을 보입니다.

     

    또한 GoogLeNet 에서는 인셉션 모듈이라는 작은 서브 네트워크를 구성하여 훨씬 효과적으로 파라미터를 사용합니다.

     

    인셉션 모듈

     

    • 처음 두 층은 면적을 16배 줄입니다. 많은 정보를 유지하기 위해 큰 크기의 필터를 사용합니다.
    • 인셉션 서브 네트워크는 같은 영역에 대하여 4가지의 다른 연산을 거친뒤 취합합니다. 이를 통해 정보가 취합되는 범위가 넓어지고, 다채로운 특징을 추출할 수 있습니다.
    • LRN을 통하여 정규화합니다.
    • 9개의 인셉션 모듈이 길게 이어지고 난 후에, 전역 평균 풀링을 진행합니다. 공간적 단서를 잃게 되지만 남아 있는 공간 정보가 적어서 괜찮습니다.
    • 이후 규제를 위한 드랍아웃 이후에 소프트팩스 할성화 함수를 통하여 확률 값을 추정합니다.

     

     

     


    References

     

     

    댓글

Designed by Tistory.