CNN(Convolutional Neural Network, 합성곱 신경망)
- 개념 : 이미지 처리에 사용되는 딥러닝 모델
- 종류 : LeNet, AlexNet, GoogLeNet , VGG, ResNet, YOLO series
![]()
- 구조와 역할
![]()
- 구성 요소
CNN(Convolutional Neural Network) 구조 1
1-1. 합성곱 계층(convolution Layer)
- 역할 : 합성곱 연산을 통해 이미지에서 특징을 추출
- 특징(feature) : 물체들을 구별할 수 있는 성질 예) 윤곽선, 귀의 모양, 얼굴의 형태
- 필터(filter, mask, kernel) : 3X3 또는 5X5 크기의 행렬(2차원 배열) - 보통 3x3임
![]()
1-2. 합성곱 연산(convolution)
- 개념 : 필터를 일정한 간격으로 이동해 가면서, 입력 데이터와 필터에서 서로 대응되는 원소끼리 서로 곱한 후 그 값들을 모두 더해주는 연산
![]()
- 필터값은 랜덤임 == 가중치
- 필터를 일정한 간격으로 이동 : strides (간격은 매개변수로 조절 가능)
- 일반 행렬과 달리 이미지는 넓이(x) 높이(y) 임 (x > y순으로 이동)
- 계산을 통해 이미지의 특성이 담긴 새로운 배열 생성 (feature map)
- 똑같이 숫자배열이기 때문에 plt.imshow()를 통해 이미지로 변환 가능
1-3. 합성곱 연산의 결과(1) : 이미지 픽셀 값의 변화 → 특징(윤곽선 등) 검출
필터 시뮬레이터
- 인공지능 이전부터 사람들이 경험적으로 찾아낸 가중치 값
- blur : 이미지의 세부 사항을 흐릿하게 만드는 필터
- bottom sobel : 이미지에서 아래쪽 방향으로의 경계선을 감지하는 필터
- top sobel : 이미지에서 위쪽 방향으로의 경계선을 감지하는 필터
- emboss : 이미지에 3D 양각 효과를 추가해, 돌출된 것처럼 보이게 하는 필터
- identity : 이미지를 변화시키지 않고 원본을 그대로 유지시키는 필터
- left sobel : 이미지의 왼쪽 방향 경계선을 감지하는 필터
- right sobel : 이미지의 왼쪽 방향 경계선을 감지하는 필터
- outline : 이미지의 경계나 윤곽선을 강조하여 외곽을 추출하는 필터
- sharpen : 이미지의 경계와 디테일을 선명하게 만들어 강조하는 필터
1-4. 합성곱 연산의 결과(2) : 이미지 크기 축소
![]()
1-5. 합성곱 연산의 결과(2) : 이미지 크기 축소
![]()
- (조건) strides = S
1-6. 컬러 이미지(3차원 데이터)의 합성곱
![]()
- 각 채널마다 convolution 연산한 후 각 채널을 더해서 출력함 > 똑같이 2차원의 feature map이 생성됨
1-7. 3차원 데이터의 합성곱 : 블록(cube)으로 생각하기
- 입력 데이터와 필터를 아래의 그림처럼 직육면체의 블록으로 생각하면 쉽다.
- 3차원 데이터의 모양은 (높이, 너비, 채널) = (Height, Width, Channel) 순으로 표현한다
![]()
1-8. 어떤 필터가 최선일까?
CNN(Convolutional Neural Network) 구조 2
2-1. 패딩(padding)
- 개념 : 합성곱 연산을 수행하기 전에 입력데이터 주변을 특정 값(주로 0)으로 채워 넣는 것
- 목적 : feature map(특징 맵)의 크기를 입력 데이터의 크기와 동일하게 만드는 것
![]()
2-2. 패딩(padding) 후 합성곱 연산의 결과
![]()
3. 풀링(Pooling)
- 개념 : feature map(특징 맵)의 가로, 세로 방향의 크기를 줄이는 연산
- 종류 : Max Pooling, Average Pooling
- 효과 : 데이터 압축, 불필요한 노이즈 제거
![]()
4. 완전 연결 계층(fc, fully connected layer)
- 결과 값을 출력하는 위치(출력층)에서 사용
- 신경 세포(뉴런)의 기능 구현
- 입력 값과 출력 값이 100% 연결 된 상태 → 완전 연결 계층(fc, fully connected layer)
![]()
- 입력 : 특성 맵(feature map)
- 출력 : 분류의 결과
- 출력의 유형 : 이진 분류(binary classification), 다중 분류(multiclass classification)
![]()
5-1. 활성화 함수
- 개념 : 입력 신호(값)를 출력 신호(값)로 변환하는 함수
![]()
5-2. 출력층의 활성화 함수
- 이진 분류
![]()
- 다중 분류
+ 추가 설명 : 은닉층의 활성화 함수
- 은닉층(hidden layer)
- 입력층과 출력층 사이에 위치한 하나 이상의 계층
- 기능 : 특징 추출
- 구성 : convolution layer, pooling layer
![]()
- ReLU 함수
- 입력 값이 음수면 0으로 비활성화하고, 입력 값이 양수면 해당 값을 그대로 출력
참고자료