[Elice_AI_4기] 18주차 내용 정리- ① CNN

Hyes_y·2022년 5월 18일
0

엘리스_AI_4기

목록 보기
6/6
post-thumbnail

CNN 가즈아~!

CNN(Convolutional Neural Network)

🧐 이미지 데이터

✍ 이미지 데이터?

  • 이미지 데이터는 사진 또는 그림 등의 이미지를 컴퓨터에 저장한 데이터를 의미
  • *.jpg, *.png 등의 확장자를 가진 파일
  • Pixel(Pictures Elements) 로 이루어진 2차원 데이터
  • 각 Pixel은 색상이나 밝기 정보를 가짐
  • 색상은 RGB 3채널로 표현되며 각 채널은 8비트의 수로 이루어짐
  • 흑백 이미지의 경우 Pixel은 밝기 정보만 가지고 있으며 255: 흰색, 0: 검은색

✍ 딥러닝을 활용한 이미지 처리 사례

  • 사물 인식(Object Detection) ex> 자율 주행, 안면 인식 등
  • 이미지 캡셔닝(Image Captioning)
  • 이미지 합성 ex> 딥페이크
  • 화질 개선 ex> super resolution, NVIDIA DLSS
  • etc,.

✍ 이미지 처리 기법(except 딥러닝)

  • 형태 변환
    ex> crop(잘라내기) / rotate(회전) / resize(사이즈 재정의) / shearing(전단 변환) / rescale(비율 변환)

  • 색상 변환
    ex> brightness(밝기 조절) / contrast(대조 변환) / grayscale(흑백 변환)

  • 필터
    ex> sharpening / blur / edge-detection

  • Python의 경우 Pillow 혹은 OpenCV 로 이미지 전처리 가능

🧐 CNN (Convolutional Neural Network)

✍ CNN 등장 배경

  • 초기 모델인 Perceptron 의 경우 Fully Connected Layer(FC Layer)로 구성
  • FC Layer => 1차원 데이터 처리
  • 이미지 데이터(2차원)를 1차원으로 바꾸면 공간 정보가 소실됨
  • 2차원 데이터를 그대로 유지하면서 학습할 수 있는 CNN 등장

✍ CNN 구성 요소

  • Convolutional Layer ⭐⭐
  • Pooling Layer
  • Classifier (FC Layer)

1. Convolutional Layer ⭐⭐

Convolution 연산

2차원의 5 X 5 이미지 데이터와 3 X 3 커널(필터)이 있다고 할 때

아래와 같은 연산이 진행됨

# stride: 1
result[0][0] = 
	image[0][0] * kernel[0][0] +
    image[0][1] * kernel[0][1] +
    image[0][2] * kernel[0][2] +
    image[1][0] * kernel[1][0] + 
    ... +
    image[2][2] * kernel[2][2]
result[0][1] = 
	image[0][1] * kernel[0][0] +
    image[0][2] * kernel[0][1] +
    image[0][3] * kernel[0][2] +
    ... +
    image[2][3] * kernel[2][2]
 ...

이런 연산 방식을 convolution 연산이라고 하며
이미지 데이터와 커널의 convolution 연산을 통해 나온 결과 => feature map

  • RGB 채널에 연산을 수행할 경우 각 채널별로 convolution 연산을 수행한 후 결과를 더해서 하나의 feature map 생성
  • 커널(필터)이 n개인 경우 feature map도 n개 생성
  • 커널 => 학습 가능 => 커널의 각 값들이 가중치가 됨

Convolutional Layer

  • 학습 가능한 커널들로 이루어진 Layer

  • layer와 layer 내부 커널을 통해 이미지의 특정 feature를 추출할 수 있음
    -> 특정 feature를 추출하도록 커널 학습 가능

  • Hyperparameter
    - stride : 커널의 이동 폭
    - padding : 이미지의 padding
    (convolution 연산 수행시 feature map 크기가 줄어듦을 방지)

  • 하나의 커널이 픽셀 간 정보를 보며, 이미지 전체 영역을 학습하기 때문에 이미지 특징을 잘 뽑아낼 수 있음

  • 커널이 가진 parameter를 이미지의 모든 영역에서 공유하기 때문에
    FC Layer에 비해 parameter 수가 현저히 적으며 과적합 방지에 유리함

  • Convolution 또한 선형 연산이기 때문에 비선형성을 추가하기 위해 활성화 함수(주로 ReLU) 를 사용

2. Pooling Layer

  • 역할 : Feature Map 사이즈를 줄여서 Parameter 개수를 줄이는 것 -> 과적합 조절

  • 이미지나 Feature Map을 겹치지 않는 영역으로 분할한 후
    각 영역의 최대값 / 평균값 을 계산하여 새로운 Feature Map을 구성
    ( MaxPooling / Average Pooling)

  • 일반적으로 Max Pooling 을 사용

  • Feature Map의 채널이 여러 개인 경우 각 채널 별로 Pooling 연산 수행

  • Global Average Pooling / Global Max Pooling
    : 전체 Feature Map에서 하나의 평균값 / 최대값 을 계산
    => 여기선 Global Average Pooling을 많이 사용

3. Classifier (분류기)

  • 역할 : 이미지를 분류 하기 위해 Feature Map을 1차원으로 변환하여 FC Layer에 통과 시켜 분류를 수행

✍ CNN 모델 구성

  • convolutional Layer와 pooling layer는 짝꿍!
  • conv + pool 로 feature map을 뽑아낸 후 Dense(fc layer) 로 이미지 분류

Input Layer - (Convolutional Layer - ... - Pooling Layer) (repeat) - Dense Layer - ... - Output Layer


✍ 대표적인 CNN 모델

  • LeNet(1990) => 우편번호 인식을 위한 모델

  • AlexNet(2012) => imageNet challenge 우승 -> 기존 모델 성능을 큰 폭으로 상회
    => 딥러닝 모델 학습에 GPU를 활용

  • VGGNet(2014) => 커널 사이즈를 모두 3 x 3으로 통일
    parameter 수 증가를 억제하면서 모델 층을 더 많이 쌓을 수 있게 됨
    (층이 많을수록 성능이 향상됨)

  • ResNet(2015) => layer 개수를 최대 152개로 늘림
    => 이전 모델의 문제 : layer 개수가 많아지면 역전파시 vanishing gradient(기울기 소실) 문제 발생
    => residual connection 으로 해결

🤷‍♀️ Residual Connection ?
convolutional layer을 우회하는 연결
=> 입력 feature map이 우회로를 통과하여 convolutional layer의 feature map과 더해짐
=> 기울기가 항상 1 이상이 되어 기울기 소실 문제 해결

  • 이미지 분류 작업 외
    -> YOLO / R-CNN (객체인식) , U-Net (이미지 분할) 등



출처: 엘리스 학습 자료 및 강의

profile
나도 하고 싶다, 개발.

0개의 댓글