Data Science/딥러닝

CNN

Boxya 2025. 4. 8. 22:11

[KT] AIVLE SCHOOL 10일차

 

컴퓨터 비전(Computer Vision) 이란?

  • 사람이 사물을 인식하듯이, 컴퓨터가 이미지를 분석하고 이해하는 기술
  • 카메라, 센서 등을 통해 입력된 이미지 데이터를 해석하여 의미 있는 정보를 추출

컴퓨터의 이미지 인식 과정

  1. 이미지 입력
    • 카메라나 파일을 통해 픽셀(pixel) 단위로 이미지 수집
    • 색상(RGB), 밝기(그레이 스케일) 등의 기본 정보로 변환
  2. 전처리
    • 노이즈 제거 : 불필요한 데이터 제거
    • 크기 조정 : 모델이 처리할 수 있도록 해상도 조절
    • 정규화 : 색상, 밝기 값의 범위를 일정하게 조정
  3. 특징 추출
    • 모서리, 패턴, 질감 등 사물의 특징을 추출
    • 고전적 방법 : SIFT, HOG, SURF 같은 알고리즘 사용
    • 딥러닝 방식 : CNN(합성곱 신경망)을 활용해 자동으로 특징 학습
  4. 분류 및 인식
    • 딥러닝 기반의 모델(CNN, ResNet 등)로 사물을 분석하고 분류
    • 예 : 개와 고양이를 구분하는 이미지 분류 모델
  5. 결과 출력
    • 예측된 결과를 확률 값과 함께 출력 (예 : 고양이 95% 확률)
    • 객체 인식(Object Detection) 또는 분할(Segmenttion)로도 활용 가능

CNN 컨셉

  • 우리는 고양이 사진을 보고 귀, 눈, 코, 수염 등을 보고 고양이인지 알 수 있다.
    • 이 모든 것은 특정 부분(영역)에서 얻어낸 특징(feature) 이다.
    • 이러한 특징으로부터 고양이인지 알 수 있다.
  • 귀를 잘 캐치해내는 필터
    • 귀 부분을 찾으면 숫자가 커지고 없으면 숫자가 거의 0에 가까워 짐
    • 왼쪽 위 끝에서부터 오른쪽으로 몇 칸씩 움직이며 '귀'를 찾음
    • 오른쪽 끝까지 이동한 후에 왼쪽으로 돌아와 아래로 몇 칸 내려와서 다시 오른쪽으로 이동
  • CCN 학습 : 고양이를 잘 맞추는 필터 여러 개를 만드는 것
    • 위 설명은 이해를 돕기 위한 것이며 실제로는 귀나 눈 등 우리가 이해하는 특징이 아닌 우리가 이해할 순 없지만
    • 고양이를 찾는데에 오차를 최소화하는 특징을 추출하는 필터를 만들어내게 됨 (학습)
    • 필터 = 특징 추출기
  • 예측 
    • 학습된 필터를 이용해 새로운 사진으로부터 특징을 추출하여 고양이인지 아닌지 판별

CNN 구조

  1. input_shape : 분석 단위인 이미지 한 장의 크기(픽셀 사이즈, 채널 * 세로 * 가로)
    • 흑백 : 채널 = 1
    • 칼라 : 채널 = 3
  2. Convolutional Layer : 필터로 지역적인 특성(feature)를 뽑는 과정
  3. Max pooling Layer : 뽑은 특징을 요약(압축)
  4. Flatten(펼쳐서) 후 Dense Layer에 연결

Conv2d

  • Conv2d : 이미지 분석에 주로 사용
    • 지역적(Local) 특징을 추출
    • 필터(커널)
      • 2차원으로 이동하며 Feature Map 구성
      • 입력(채널) 수 : 1, 출력(커널) 수 : 32
      • kernel_size = 3 : 세로 3, 가로 3
      • stride : 몇 칸 씩 이동할 것인지 지정 / stride = 1 -> 가로, 세로 이동 칸 수
      • padding : size 유지되도록 이미지 둘레에 0으로 덧대기 / padding =1 -> 1칸(픽셀) 덧대기
        nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
    • 합성곱(Convolution) 연산

MaxPooling

  • 목적 : 강조할 데이터만 남기고 크기 축소
  • kernel_size = 2 : 풀링 크기 2 X 2
  • stride = 2 : 2칸 씩 이동
  • 출력 크기 : Input Size // Pooling Size (나머지는 버림)
nn.MaxPool2d(kernel_size=2, stride=2)

 

데이터 크기 변화

nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1), # 1
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2), # 2
nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1), # 3
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2), # 4

 

 


Flatten과 Dense Layer

CNN + MaxPooling Layer로 특징을 추출한 후 

최종 예측 결과로 뽑기 위해서는 값을 펼치고(Flatten)

nn.Linear로 연결해야 함 (입력 데이터 크기는 이전 레이어의 출력 크기)

'Data Science > 딥러닝' 카테고리의 다른 글

Object Detection  (1) 2025.04.09
Early Stopping와 Dropout  (0) 2025.04.08
모델 성능 최적화  (0) 2025.04.07
분류 모델링(Classification)  (0) 2025.04.07
회귀 모델링(Regression)  (0) 2025.04.04