일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ICCV 2021
- GAN
- 파이토치
- paper review
- CVPR2023
- Paper
- Semantic Segmentation
- 논문리뷰
- Vae
- 논문
- Python
- 경희대
- IROS
- 2022
- docker
- pytorch
- CVPR
- 딥러닝
- ICCV
- Deep Learning
- panoptic segmentation
- 융합연구
- Computer Vision
- 논문 리뷰
- Neural Radiance Field
- NeRF paper
- linux
- NERF
- panoptic nerf
- 리눅스
- Today
- Total
윤제로의 제로베이스
합성곱과 풀링(Convolution and Pooling) 본문
01. 합성곱과 풀링(Convolution and Pooling)
합성곱 신경망(Convolutional Neural Network)은 이미지 처리에 탁월한 성능을 보이는 신경망입니다. 이번 챕터에서는 합성곱 신경망에 대해서 학습합니다. ...
wikidocs.net
합성곱 신경망(Convolutional Neural Network)은 이미지 처리에 탁월한 성능을 보이는 신경망이다.
합성곱 신경망은 크게 합성곱층(Convolution layer)와 풀링층(Pooling layer)으로 구성된다.
1. 합성곱 신경망의 대두
합성곱 신경망은 이미지 처리에 탁월한 성능을 보이는 신경망이다.
이미지 처리를 하기 위해서 앞서 배운 다층 퍼셉트론을 사용할 수 있지만 한계가 있었다.
다층 퍼셉트론은 몇가지 픽셀만 값이 달라져도 민감하게 예측에 영향을 받는다는 단점이 있다.
더 구체적으로 보자면, 손글씨를 다층 퍼셉트론으로 분류한다고 하면, 이미지를 1차원 텐서인 벡터로 변환하고 다층 퍼셉트론의 입력층으로 사용해야 한다.
1차원으로 변환된 결과는 사람이 보기에도 이게 원래 어떤 이미지였는지 알아보기가 어렵다.
이는 기계도 마찬가지이다.
위와 같이 결과는 변환 전에 가지고 있던 공간적인 구조 정보가 유실된 상태이다.
여기서 공간적 구조 정보란 거리가 가까운 어떤 픽셀들끼리 어떤 연간이 있고, 어떤 픽셀들끼리 값이 비슷하거나 등을 포함하고 있다.
결국 이미지의 공간적인 구조 정보를 보존하면서 학습할 수 있는 방법이 필요해졌고, 이를 위해 사용하는 것이 합성곱 신경망이다.
2. 채널(Channel)
이미지는 (높이, 너비, 채널)이라는 3차원 텐서이다.
여기서 높이는 이미지의 세로방향 픽셀수, 너비는 이미지의 가로 방향 픽셀수, 채널은 색 성분을 의미한다.
흑백 이미지는 채널수가 1이며, 각 픽셀은 0부터 255 사이의 값을 가진다.
컬러 이미지는 RGB 채널을 갖게되므로 채널수가 3이다.
3. 합성곱 연산(COnvolution operation)
합성곱층은 합성곱 연산을 통해서 이미지의 특징을 추출하는 역할을 한다.
합성곱은 영어로 Convolution이라고 불리는데 커널(Kernel) 또는 필터(filter)라는 n * m크기의 행렬로 높이 * 너비 크기의 이미지를 처음부터 끝까지 훑으면서 n * m 크기의 겹쳐지는 부분의 각 이미지와 커널의 우너소의 값을 곱해서 모두 더한 값을 출력으로 하는 것을 말한다.
이때 가장 왼쪽부터 오른쪽으로 순차적으로 훑는다.
위와 같이 입력으로부터 커널을 사용하여 합성곱 연산을 통해 나온 결과를 특성맵(feature map)이라고 한다.
커널의 크기가 위의 예시에서는 3 * 3이었지만 사용자가 지정할 수 있다.
또한 이 커널이 이동하는 범위 또한 지정할 수 있는데 이 이동 범위를 스트라이드(stride)라고 한다.
4. 패딩(Padding)
합성곱 연산의 결과로 얻은 특성맵은 입력보다 크기가 작아진다는 특징이 있다.
만약, 합성곱층을 여러개 쌓았다면 최종적으로 얻은 특성맵은 초기 입력보다 매우 작아진 상태가 되어버린다.
합성곱 연산 이후에도 특성맵 크기가 유지되길 원한다면 패딩을 사용하면 된다.
패딩은 합성곱 연산을 하기 전에 입력의 가장자리에 지정된 개수의 폭만큼 행과 열을 추가한다.
주로 0으로 채우는 제로 패딩을 사용한다.
만약 스트라이드가 1이고 3*3 커널을 사용한다면 1폭짜리 제로패딩을, 5*5 커널을 사용한다면 2폭짜리 제로 패딩을 사용하면 맵 크기를 보존할 수 있다.
5. 가중치와 편향
1) 합성곱 신경망의 가중치
다층 퍼셉트론으로 3 * 3 이미지를 처리한다고 가정해보자.
입력층은 9개의 뉴런을, 은닉층은 4개의 뉴런을 가진다고 하자.
이때 가중치는 9 * 4 = 36개이다.
그렇다면 합성곱 신경망으로 3*3 이미지를 처리한다고 했을 때를 비교해보자.
2 * 2 커널을 사용하여 스트라이드를 1로 한다면 아래와 같다.
최종적으로 이미지 전체를 훑으면서 사용되는 가중치는 4개 뿐이다.
그리고 합성곱 연산마다 이미지의 모든 픽셀을 사용하는 것이 아니라 커널과 매핑되는 픽셀만 입력으로 사용한다.
결국 합성곱 신경망은 다층 퍼셉트론을 사용할 때보다 훨씬 적은 수의 가중치를 사용하며 공간적 구조 정보를 보존한다는 특징이있다.
다층 퍼셉트론의 은닉층에서는 가중치 연산 후에 비선형성을 추가하기 위해서 활성화 함수를 통과시켰다.
합성곱 신경망의 은닉층에서도 마찬가지이다.
합성곱 연산을 통해 얻은 특성 맵은 다층 퍼셉트론 때와 마찬가지로 비선형성 추가를 위해서 활성화 함수를 지나게 된다.
이때 ReLU 함수나 변형들이 사용된다.
이와 같이 합성곱 연산을 통해서 특성 맵을 얻고, 활성화 함수를 지나는 연산을 하는 합성곱 신경망의 은닉층을 합성곱 신경망에서는 합성곱 층(convolution layer)이라고 한다.
2) 합성곱 신경망의 편향
합성곱 신경망에도 편향(bias)를 당연히 추가할 수 있다.
만약, 편향을 사용한다면 커널을 적용한 뒤에 더해진다.
편향은 하나의 값만 존재하며, 커널이 적용된 결과의 모든 원소에 더해진다.
6. 특성맵의 크기 계산 방법
'여기서 floor 함수는 소수점 발생 시 소수점 이하를 버리는 역할을 한다.
패딩의 폭을 P라고 하고 패딩까지 고려한 식은 다음과 같다.
7. 다수의 채널을 가질 경우의 합성곱 연산(3차원 텐서의 합성곱 연산)
다수의 채널을 가지는 입력 데이터를 가지고 합성곱 연산을 한다면 커널의 채널수도 입력 채널수만큼 존재해야한다.
다시 말해 입력 데이터의 채널수와 커널의 채널수가 같아야한다.
채널 수가 같으므로 합성곱 연산을 채널마다 수행한다. 그리고 그 결과를 모두 더하여 최종 특성 맵을 얻는다.
주의해야할 점은 커널이 3개가 아니라 3개의 채널을 가진 1개의 커널이라는 점이다.
8. 3차원 텐서의 합성곱 연산
9. 풀링(Pooling)
합성곱 층(합성곱 연산 + 활성화 함수) 다음에는 풀링층을 추가하는 것이 일반적이다.
풀링 층에서 특성 맵을 다운샘플링하여 특성맵의 크기를 줄이는 풀링 연산이 이루어진다
풀링 연산에는 일반적으로 최대 풀링(max pooling)과 평균 풀링(average pooling)이 사용된다.
풀링 연산에서도 합성곱 연산과 마찬가지로 커널과 스트라이드 개념을 갖는다.
합성곱 연산과 유사하지만 차이점은 학습해야할 가중치가 없으며 연산 후에는 채널 수가 변하지 않는다는 점이다.
'Background > Pytorch 기초' 카테고리의 다른 글
깊은 CNN으로 MNIST분로하기 (0) | 2022.01.19 |
---|---|
CNN으로 MNIST 분류하기 (0) | 2022.01.19 |
기울기 소실(Gradient Vanishing)과 폭주(Exploding) (0) | 2022.01.19 |
과적합(Overfitting)을 막는 방법들 (0) | 2022.01.17 |
비선형 활성화 함수(Activation function) (0) | 2022.01.17 |