AI 개발 공부 공간

AI, 머신러닝, 딥러닝, Python & PyTorch, 실전 프로젝트

딥러닝/딥러닝: 이미지 분류

CNN 기초

qordnswnd123 2025. 2. 10. 15:37

1. CNN 기초

1.1. CNN이란

컨볼루셔널 신경망(Convolutional Neural Network, CNN)은 생물학적 인식 과정과 컴퓨터 과학이 결합된 것처럼 보이며, 주로 이미지 인식과 처리에 사용되는 딥러닝의 한 유형입니다.
이 네트워크는 특히 시각적 데이터의 계층적 특성을 효과적으로 학습할 수 있는 구조를 갖추고 있어, 이미지를 '보는' 방식을 모방하여 작동합니다. CNN은 이미 지의 형태나 색상과 같은 구체적인 특성을 이용해 사물을 식별합니다. 우리의 뇌가 정보를 처리하는 방식과 비슷합니다. 예를 들어, 커피잔을 보았을 때 우리는 그 손잡이와 모양을 통해 커피잔임을 알아차립니다.
마찬가지로, CNN도 저수준의 세부 사항부터 시작해 점차적으로 더 복잡하고 추상적인 개념을 학습합니다. 이러한 과정을 통해 CNN은 이미지 내의 다양한 패턴 과 구조를 인식하고 해석할 수 있으며, 이를 사용하여 분류, 탐지, 분할 등의 복잡한 작업을 수행할 수 있습니다.

 

1.2. CNN의 역사

1980년대 초, 유니버시티 오브 토론토의 제프리 힌튼과 그의 동료들에 의해 처음 개발된 CNN은 2012년 알렉스 크리제브스키와 그의 팀이 "알렉스넷으로 불리 는 모델을 사용하여 이미지넷 대회에서 우승하면서 주목받기 시작했습니다.

이후 VGG, ResNet 등과 같은 다양한 모델들이 개발되어, 이미지를 넘어 비디오, 음성 데이터 분석 등 다양한 분야에서 혁신적인 성과를 이루었습니다.


2. CNN이 생긴 이유와 Fully Connected Layer의 문제점

사진을 한 장을 보면서 이건 비행기, 저건 나무라고 구분할 수 있는 건 간단해 보입니다. 

하지만 컴퓨터에게 수많은 픽셀로 이루어진 이미지를 이해시키기 위해서는 다양한 기술이 필요합니다.

이를 가능하게 하는 핵심 기술 중 하나가 바로 CNN입니다.


2.1. 완전 연결층(Fully Connected Layer)의 문제점

 

위 이미지는 크기가 다른 두 이미지(28x28, 1000x1000)를 완전 연결층에 입력했을 때 필요한 파라미터의 수를 보여주고 있습니다. 크기가 작은 (28x28) 이미지에서는 파라미터의 수가 상대적으로 적지만, 큰 이미지에서는 파라미터의 수가 엄청나게 많아지는 것을 볼 수 있습니다.

  • 손글씨 숫자 이미지: 해당 이미지는 28x28 픽셀로 이루어져 있습니다. 기존의 완전 연결층 방식을 적용하면, 784(28x28)개의 픽셀 각각이 100개의 은닉 노드와 연결되어야 합니다. 그렇게 되면 총 78,400개의 파라미터가 필요합니다.
  • 강아지 이미지: 해당 이미지는 1000x1000 픽셀로 이루어져 있습니다. 동일한 100개의 은닉 노드가 있다면, 우리는 무려 1,000,000,000,000(1000억) 개의 연결을 만들어야 합니다. 이는 데이터가 커질수록 파라미터가 기하급수적으로 증가한다는 것을 의미합니다.

2.2. 파라미터가 너무 많으면 생기는 문제점

파라미터의 수가 많으면 많을수록 모델을 학습시키는 데 더 많은 계산 자원과 데이터가 필요합니다. 또한, 너무 많은 파라미터는 모델이 학습 데이터 에만 지나치게 최적화되어 새로운 데이터에 대한 일반화 능력이 떨어지는 과적합을 발생시킬 위험이 있습니다.
결국 이렇게 많은 연결은 모델을 복잡하게 만들고, 학습하는 데 엄청난 시간과 자원이 들며, 새로운 데이터에 적응하는 능력이 떨어질 수 있어요. 그래 서 필요한 것이 CNN입니다.


2.3. 공간적 구조 정보의 손실

이미지를 이해한다는 건 단순히 빛과 그림자의 모음을 넘어서, 그 안에 담긴 사물의 모양이나 위치를 파악하는 것을 말합니다. 예를 들어, 사진 속 사람의 얼굴을 인식할 때는 눈, 코, 입이 어디에 위치해 있는지가 중요합니다. 이처럼 서로 어떻게 배치되어 있는지가 그 사물을 이해하는 데 결정적인 역할을 합니다.
그런데, 기존의 완전 연결층은 마치 퍼즐 조각을 모두 풀어헤쳐 무작위로 흩뿌린 것처럼, 이미지의 각 픽셀들을 뒤섞어 버립니다. 이런 방식으로는 사진 속 퍼즐 조각들이 원래 어떻게 연결되어 있는지 알 수 없게 됩니다. 결국, 컴퓨터는 그림의 전체적인 모습을 파악하기보다는 그저 색깔 조각들의 무작위 모음으로 이미지를 바라보게 됩니다.
이것이 바로 '공간적 구조 정보의 손실'이라고 하는 것입니다. 이미지의 중요한 부분들이 서로 어떻게 관련되어 있는지, 즉 공간적인 배치가 어떤 의미를 가지는지를 기존의 완전 연결층은 이해하지 못합니다. 결국 이런 방식으로는 얼굴을 구성하는 눈, 코, 입이 각각 어디에 있는지를 파악하고, 이를 통해 '이것은 얼굴이다'라고 인식하는 데 한계가 있습니다.
이에 반해 CNN은 각 픽셀 주변의 픽셀들과의 관계를 유지하면서 이미지를 분석합니다. 이를 통해 얼굴의 특징이 어떻게 배열되어 있는지를 파악하고, 이미지 안에서 사물의 위치와 모양을 정확하게 인식할 수 있게 됩니다. 결국 CNN은 이미지 속에 숨어 있는 패턴과 구조를 찾아내는 데 탁월한 능력을 발휘할 수 있습니다.


3. CNN의 기능적 중요성

CNN, 즉 합성곱 신경망은 이미지 인식과 처리에 혁신을 가져온 기술이지만, 그 영향력은 훨씬 더 넓은 범위에 걸쳐 있습니다. 이러한 네트워크는 여러 분야에서 중요한 역할을 하고 있으며, 다음과 같은 이유로 그 중요성이 강조됩니다.

  • 의료 이미지 분석: CNN은 X-ray, MRI와 같은 의료 이미지를 분석하여 특정 질병의 징후를 자동으로 감지하는 데 사용됩니다. 이를 통해 의사들은 보다 빠르고 정확하게 진단할 수 있게 되었습니다.
  • 자율 주행 자동차: 자동차가 스스로 주변 환경을 인식하고, 다른 차량, 보행자, 도로 표지판 등을 정확히 식별할 수 있도록 도와주는 기술입니다. CNN을 사용함으로써 자동차는 안전하게 운전하고, 적절한 조치를 취할 수 있습니다.
  • 보안 감시: 보안 카메라에서 생성된 영상을 실시간으로 분석하여 의심스러운 활동을 감지하거나 특정 인물을 식별하는 데 CNN이 활용됩니다.
  • 산업 자동화: 제조 공정에서 제품의 품질을 검사하거나 결함을 찾는 데 CNN이 사용되며, 이로 인해 생산 효율성과 품질 관리가 크게 향상되었습니다.
  • 언어 번역과 자연어 처리: 최근에는 CNN이 텍스트 데이터의 패턴을 인식하는 데에도 사용되고 있습니다. 이를 통해 언어 번역의 정확도가 향상되었고, 감정 분석이나 의미 파악과 같은 복잡한 자연어 처리 작업에서도 뛰어난 성능을 보이고 있습니다.

이처럼 CNN은 단순히 이미지를 처리하는 것을 넘어서 다양한 데이터의 복잡한 패턴을 파악하고, 이를 기반으로 의미 있는 정보를 추출하는 데 광범위 하게 활용되고 있습니다. 이는 CNN이 단순한 기술이 아닌, 우리 삶의 여러 영역에서 중대한 발전을 가능하게 하는 핵심 기술로 자리 잡았음을 의미합니다.


4.CNN의 이해

4.1. CNN의 기본 아키텍처

합성곱 신경망(CNN)은 마치 예술가가 캔버스에 그림을 그리듯 이미지를 분석하고 이해합니다. 이미지 한 장 한 장을 신중하게 분석하여 그 속에 숨겨진 다양한 요소들을 드러내는 이 기술은, 각기 다른 각도에서 이미지의 다채로운 특징들을 파악하도록 설계된 많은 층을 쌓아 올려 만들어집니다.
이제 이 놀라운 기술, CNN이 구체적으로 어떻게 이 모든 과정을 수행하는지, 그 구조 속에서 무슨 일이 일어나는지 자세히 들여다볼 차례입니다.


4.2. 특징 추출(Feature Extractor)과 분류(Classifier) 과정 이해

 

눈 앞의 사진 속 강아지를 컴퓨터가 어떻게 인식하고 이해하는지, 함께 살펴보도록 하겠습니다. CNN은 이 과정을 두 단계로 나눠서 처리합니다. 먼저 특징 추출기(Feature Extractor)가 활동하고, 그 다음으로 분류기(Classifier)가 그 뒤를 이어갑니다.
특징 추출기(Feature Extractor) 단계에서, 신경망은 이미지를 살펴보고 강아지의 중요한 부분들을 살핍니다. 이때 필터라는 도구를 사용하는데, 이 필터는 사진 속 강아지의 눈이나, 코, 귀와 같은 특징을 걸러내는 일종의 패턴 인식기라고 생각할 수 있습니다. 이렇게 신경망은 사진을 구성하는 여러 요소들을 식별하여 강아지를 어떻게 구성하고 있는지를 이해합니다.
그 다음에 오는 분류기(Classifier) 단계에서는 이전에 추출된 특징들을 종합하여 신경망이 '이것은 강아지다' 또는 '고 양이다'와 같은 결정을 내리게 됩니다. 이 단계는 신경망이 이미지 속 객체를 정확히 분류하는 과정입니다.
우리가 일상에서 물건을 보고 이해하는 것처럼, 신경망도 이 두 단계를 거치면서 이미지를 '보고', '파악하고', '인식'하는 방법을 학습합니다.


5. 특징 추출기(Feature Extractor)

특징 추출기 부분은 주로 합성곱층(Convolutional Layers) 풀링층(Pooling Layers)으로 구성됩니다.


5.1. 합성곱 레이어 (Convolutional Layer)

합성곱 신경망(CNN)의 핵심은 합성곱 레이어로, 이미지의 중요한 특성을 추출해내는 기본 단위입니다. '합성곱'이라는 말은 사실 이미지와 일종의 필터를 겹쳐서 특징을 도출해내는 수학적 연산을 가리킵니다. 이미지를 분석할 때, 이 필터들을 이용해서 특징 맵 이라는 새로운 데이터를 생성합니다. 이 과정이 바로 이미지 위에서 필터를 움직여가며 특정 패턴을 찾아내는 작업입니다.


5.2. 필터(Filter/Kernel)

※ 2D 컨볼루션의 이해 (흑백 이미지에서의 필터 작용)
먼저, 2D 컨볼루션 작업을 이해하기 위해 필터 또는 커널의 역할을 설명하겠습니다.


위 그림에서 녹색 그리드는 흑백 이미지를 픽셀로 나타낸 것이고, 오렌지색 그리드는 '필터' 또는 '커널'이라고 불리는 것으로, 특정 패턴을 감지하는 데 사용됩니다.

 

위 그림에서 보듯이, 필터는 이미지의 특정 부분 즉 수용 영역(Receptive Field) 에 적용되어, 해당 영역의 특징을 감지하고, 이를 기반으로 특징 맵(feature map) 을 생성합니다. 이 과정은 이미지의 각 부분에서 중요한 정보를 추출하여, 특징 맵에 반영하는 방 식으로 진행됩니다.
그림에서는 2x2 크기의 필터가 이미지의 3x3 부분에 겹쳐집니다. 필터가 이미지 위를 이동할 때마다, 수용 영역(Receptive Field) 내의 각 입력 픽셀과 필터의 각 가중치가 곱해지고, 이렇게 계산된 모든 값들이 더해져 특징 맵(Feature Map)의 한 칸을 형성하게 됩니다. 이 과정은 필터가 이미지 전체를 슬라이딩(sliding) 하며 각각의 수용 영역에 대해 반복되어, 이미지의 여러 부 분에서 중요한 특성을 추출하게 됩니다.
예를 들어, 필터의 왼쪽 상단 '1'이 이미지의 왼쪽 상단 '1'과 곱해지는 것부터 시작하여, 필터의 모든 요소가 수용 영역 내 해당하는 픽셀과 곱해지고, 이러한 연산은 필터가 커버하는 모든 수용 영역에 대해 반복됩니다.
결과적으로, 이 특징 맵은 이미지의 원본 크기보다 작지만(3x32x2), 원본 이미지에서 중요한 정보만을 담고 있는 축소된 형태가 됩니다. 이 축소된 형태는 중요한 시각적 정보를 집약하여 보여주며, CNN이 깊은 층으로 정보를 전달할 때 이미지 내의 더 복 잡한 패턴을 감지하는 데 필수적인 기초 데이터로 활용됩니다.


※ 3D컨볼루션의 이해 (컬러 이미지에서의 필터 작용)

그런데 실제로 이미지는 3D 데이터 구조로 표현되는 경우가 많습니다. 특히, 컬러 이미지는 단순한 2D 행렬이 아닌 3D 데이터 구 조로 표현되며, 높이와 너비에 추가로 색상 채널이라는 깊이 차원이 포함됩니다. 이에 따라, 컨볼루션 필터 역시 3D 구조를 가지며, 필터의 깊이는 이미지의 채널 수와 일치합니다.


5x5x3 크기의 RGB 컬러 이미지에 대해, 2x2x3 크기의 필터를 적용하는 예를 생각해 보겠습니다. (입력 이미지 의 채널 수와, 필터의 채널 수는 동일해야 합니다.) 이 필터는 높이와 너비가 각각 2 픽셀이고, 깊이가 3인데, 이는 이미지의 RGB 각 채널에 해당하는 부분입니다.

컨볼루션 과정에서는 이 필터가 이미지 위를 한 칸씩 이동하면서, 각 위치에서 R, G, B 각 채널에 대한 연산을 수행합니다.

필터 내 각 요소는 이미지의 대응하는 픽셀과 곱해지고, 이러한 곱셈 결과는 채널별로 합쳐져서 최종적으로 특징 맵의 한 지점을 형성합니다.

 

이와 같이 단일 필터(필터 1개)를 사용한 경우, 최종적으로 얻어지는 특징 맵의 크기는 4x4x1입니다.

 

5.3. 다중 필터로 컨볼루션 이해하기

만약 여러 개의 필터를 적용하게 되면, 각각이 만들어낸 특징 맵들이 채널 차원에 걸쳐 쌓이게 되고, 컨볼루션 레이어의 출력은 이러한 특징 맵들을 깊이 방향으로 합쳐서 더 큰 깊이의 데이터 볼륨을 형성하게 됩니다. 이 과정을 통해 신경망은 이미지의 다양한 특성을 감지하고 이를 기반으로 이미지 분류나 기타 복잡한 작업을 수행할 수 있습니다.
두 개의 필터를 사용하여 컨볼루션을 수행하고 그 결과를 살펴보겠습니다.

 

첫 번째 필터(필터 1)가 이미지 위에 적용되면, 각 위치에서 필터의 각 요소는 해당하는 이미지의 픽셀과 곱해집니다. 이렇게 얻은 값들을 합산하여 4x4x1 크기의 첫 번째 특징 맵을 형성합니다. 두 번째 필터(필터 2) 역시 같은 방식으로 이미지 위를 이동하며 컨볼루션을 수행하고, 이를 통해 또 다른 4x4x1 크기의 특징 맵을 생성합니다.
이 두 개의 특징 맵은 깊이 방향(=채널 방향)으로 쌓이게 되며, 최종적으로 4x4x2 크기의 출력을 형성합니다.
만약 10개의 다른 필터를 사용한다면, 각 필터는 독립적으로 4x4x1 크기의 특징 맵을 생성하고, 이들을 깊이 차원에서 쌓아 최종적으로 4x4x10 크기의 출력 볼륨을 형성합니다.


※ 결론

합성곱 신경망(CNN)에서 필터는 이미지 분류와 특성 추출의 핵심적인 구성 요소입니다. 각 필터는 학습 과정을 통해 이미지의 중요한 특성을 감지하도록 최적화된 가중치의 집합으로 발전합니다.
이 필터들은 학습을 통해 업데이트되는 가중치로 구성되어 있으며, 학습 과정에서 반복적으로 조정됩니다. 이들은 네트워크의 출력이 목표에 더 가까워지도록 도와주는 학습 가능한 매개변수로서, 네트워크가 훈련 데이터로부터 중요한 특징을 추출하고 이해하는 데 필수적입니다.
필터의 역할은 분류 작업에서 중요한 특성을 강조하는 것입니다. 필터는 각기 다른 특성을 감지하기 위해 설계되며, 이는 이미지를 분석할 때 다양한 각도에서 접근할 수 있게 해줍니다. 어떤 필터는 이미지의 가장자리를 감지하는 반면, 다른 필터는 질감이나 특정 형태를 감지하는 데 사용됩니다. 이러한 다양한 필터들은 결합되어 이미지의 전체적인 특성을 파악하고, 이를 바탕으로 더 복잡한 이미지 분석 작업을 수행할 수 있습니다.