-합성곱 신경망(CNN)
이미지 처리에 탁월한 성능을 보이는 신경망이다. 내가 하는 업무가 이미지 처리 관련 분야이므로, 자주 사용하게 될 것.
-합성곱 신경망의 구성
합성곱층(Convolution layer)과 풀링층(Pooling layer)으로 구성된다.
이 사진에서 CONV는 '합성곱 연산'을 의미 하고, 그 연산의 결과가 활성화 함수 ReLU를 지난다. 이러한 과정을 합성곱층이라고 한다. 그 후에 POOL이라는 구간을 지나는데, 이는 풀링 연산을 의미하며 풀링층이라고 한다. 정리하자면,
CONV : 합성곱 연산
ReLU : 활성화 함수
CONV -> ReLU : 합성곱층
POOL : 풀링 연산
-다층 퍼셉트론과 합성곱 신경망의 차이
위의 사진처럼 알파벳 Y가 정자와 악필로 된 2가지 종류가 있을 경우, 악필 Y도 Y 인지를 판단하기 위해서 다층 퍼셉트론이나 합성곱 신경망을 사용할 수 있다.
그러나 이러한 이미지는 악필 Y처럼 휘어지거나 이동되는 등 다양한 변형이 존재한다. 다층 퍼셉트론으로 변환을 한다면,
이미지를 1차원 tensor인 vector로 변환하고, 다층 퍼센트론의 입력층으로 사용해야 한다. 이렇게 되면 몇 가지 픽셀 값만 달라져도 예측에 영향을 받는 단점이 생기게 된다. 즉, 변환 전에 가지고 있던 공간적인 구조 정보가 유실된 상태다.
그러므로, 이 문제를 해결하기 위해 공간적인 구조 정보를 보존함과 동시에 학습을 할 수 있는 방법이 필요해졌고, 그 결과 합성곱 신경망을 사용한다.
-채널
채널은 이미지 처리의 기본적인 용어.
이미지는 (높이(h),너비(w),채널(c) 이라는 3차원 텐서이다.
여기서 높이는 세로 방향 픽셀 수, 너비는 이미지의 가로 방향 픽셀 수, 채널은 색 성분을 의미한다. 채널이 만약 1일 경우, 흑백 이미지이며, 각 픽셀은 0~255값을 가진다. 정리하자면,
이미지는 높이(세로 픽셀), 너비(가로 픽셀), 채널(색 성분[0~255])로 이루어진 3차원 텐서.
그렇다면 위의 이미지는 흑백 이미지이므로 채널 수가 1 이기때문에 (28 x 28 x 1)의 크기를 가지는 3차원 텐서가 된다.
그러나, 이렇게 컬러 이미지의 경우 RGB로 이루어져 채널 수가 총 3개가 된다. 표현해보면 (28 x 28 x 3)의 크기를 가지는 3차원 텐서라고 말할 수 있다. 채널은 깊이(depth)로도 표현한다.
-합성곱 연산
합성곱층은 합성곱 연산을 통해서 이미지의 특징을 추출하는 역할을 한다.
-합성곱이란
합성곱은 Convolution이라고도 불리며, 커널(Kernel) 또는 필터(filter)라는 n X m 크기의 행렬로 높이 X 너비 크기의 이미지를 처음부터 끝까지 겹치며 훑으면서 겹쳐지는 부분의 각 이미지와 커널의 원소의 값을 곱해서 모두 더한 값을 출력하느 ㄴ것을 말한다. 순서는 이미지의 가장 왼쪽 위 => 오른쪽 아래까지 순차적으로 훑는다.
#일반적으로 커널은 3 x 3 또는 5 x 5 를 사용한다.
위 사진은 3 x 3 크기의 커널로 5 x 5 이미지 행렬에 합성곱 연산을 수행하는 과정이다. 이러한 방식으로 왼쪽 위 => 오른쪽 아래까지 순서대로 진행하여 출력 값을 모두 구할 수 있다.
위의 입력으로부터 커널을 사용하여 합성곱 연산을 통해 나온 출력 결과를 특성 맵(feature map)이라고 한다.
참고 문헌 : https://wikidocs.net/64066
'프로그래밍' 카테고리의 다른 글
PHP - ORACLE 연동 총 정리 (윈도우 환경) (0) | 2022.12.10 |
---|---|
PHP 버전 및 아키텍처 보는법 (1) | 2022.11.27 |
[PyTorch] 선형회귀(Linear Regression) (~ing) (0) | 2022.11.15 |
AttributeError: 'NoneType' object has no attribute 'loader' 오류 해결 방법 (1) | 2022.10.20 |
[Spring] 스프링 빈과 의존관계 (1) | 2022.10.05 |