CV(computer vision)에서 기본이되는 아키텍처인 CNN을 소개합니다.
아이디어를 소개한 후, 용어를 익히고 프로세스를 볼게요.
컴퓨터에서 이미지는 pixel. 점으로 이루어져 있습니다. 동물의 눈을 모방하여, 이미지 특징을 부분적으로 추출하고 종합하고 결과적으로 어느 공간에 어떠한 물체가 있는지 맞추는 것을 목표로 해요. 이미지는 구조적 특징, 픽셀간 관계가 연관되어 공간 정보가 중요하고, 최대한 지키기 위해 이미지(2D) 그대로 진행합니다.
Convolution layer(필수), pooling layer(선택)를 반복, 마지막에 fully connected layer(필수)를 통과하면서 결과를 내게됩니다.
* 색상이 있는 이미지의 경우 RGB. (255,255,255) 3차원 Tensor로 표현됩니다.


용어
Convolution Layer
• Kernel (n*n): 이미지의 특징을 추출하는 필터
• Stride: 커널이 이동하는 보폭으로
• Padding: 입력 이미지 주변에 추가하는 픽셀로, 출력 크기를 조절하기 위해서 사용
• Feature Map: 컨볼루션 연산 결과
Pooling Layer
• Max, Average, Min: 특징 맵의 크기를 줄이는 방법 (각각 최대값, 평균값, 최소값)
Fully Connected Layer
• Flatten Layer: 2D 특징 맵을 1D 벡터로 변환
• Softmax Layer: 최종 출력을 확률 분포로 변환하는 활성화 함수
과정

아이디어에서 말했던 것처럼 conv,pool을 반복하다가 마지막에 1열로(flatten) 나열하여 어떠한 물체인지(cat or dog)를 판별하기 위해 가능성(softmax)이 가장 높은 분류명(y)을 찾습니다.
* pool 과정은 빠른 연산을 위해 size를 축소하는 과정으로 선택입니다.
Convolution layer

Kernel을 stride(보폭 단위)를 기준으로 움직이며 이미지의 각 부분에 적용합니다. Kernel*partial img와 연산하여 특정 공간에서의 특징을 추출합니다. 아래 이미지가 이해를 돕습니다.
* kernel은 선택적 공간에 특징을 추출하기 위한 것으로, 가중치를 가진다. 그리고 이 가중치에 따라 추출되는 정보도 다르므로, 특징추출을 위한 가중치 학습이 진행된다.

직선, 곡선, 원형 등 특정 이미지 부분의 특징을 추출할 수 있습니다. 그리고 convolution layer가 깊어질수록 더 복잡한 특징을 잡을 수 있습니다.

* kernel size, stride size는 feature map의 size를 결정하므로 태스크에 따라 적절한 값 조정이 필요합니다. Feature map의 크기가 클 수록 더 많은 특징을 담을 수 있지만, 그만큼 연산량이 많아지니 trade off 관계에 있습니다.

또한, convolution layer를 거칠수록 가장자리의 특징은 사라져, 보완하기 위해 padding을 사용합니다.

* Conv relu Con relu : 수업을 듣다보면 이와 같은 말을 듣게 되는데, 활성화 함수를 통해 비 선형성을 적용하기 위해서 입니다. 그중 relu가 가장 일반적으로 사용하는 함수라서 그렇습니다.
* 비선형성은 더 복잡한 패턴의 학습을 도와준다.

Pooling layer
이미지 크기를 유지한채, fully connected layer에서 flatten data 연산을 진행하게 되면, 연산량이 필요 이상으로 많을 수 있습니다. 필요에따라 정보를 압축하여 줄이고, 특정 feature를 강조할 수 있도록 하는 단계가 pooling 단계입니다.

위의 사진은 max. 최댓값을 기준으로 진행했는데요. min,average 등 다양한 방법을 사용할 수 있습니다.
* 일반적으로 stride size는 선택영역 사이즈와 같다.
* 이미지를 구성하는 요소들의 이동 및 회전 등에 의해 CNN의 출력값이 영향을 받는 문제를 완화할 수 있다 : 선택 영역 내부에서는 픽셀들이 이동 및 회전 등에 의해 위치가 변경되더라도 출력값을 동일하기 때문
* 학습 시간을 크게 절약할 수 있으며, 오버피팅 (overfitting) 문제 또한 어느정도 완화할 수 있다 : CNN이 처리해야하는 이미지의 크기가 크게 줄어들기 때문에 인공신경망의 파라미터 또한 크게 감소하기 때문
Connected layer
추출된 local-feature를 바탕으로 Flatten 후 결과를 출력합니다.
* Flatten은 단순히 2차원 공간을 1차원으로 피는 것이며 학습되지 않습니다.
* 공간적 특징을 소실할 수 있다.
* fully connected layer의 bias는 학습되는 파라미터이다.
마치며..
CNN은 컴퓨터 비전분야에서 오래된 아키텍처이지만, 여전히 유용하게 쓰이고 있습니다. Yolo, RCNN 등 높은 퍼포먼스를 보이는 기술도 이를 바탕으로 하여, 기초를 잡고 가면 좋습니다. 하지만 한계점도 분명했죠.
Flatten layer의 공간정보 소실, 이미지 전체를 바탕으로 정보를 추출하여 효율성이 떨어지는 점 등. 어떻게 보완할지 조금씩 알아봐요.
이 글은 아래 출처의 정보를 활용하여 작성했습니다.
https://rubber-tree.tistory.com/m/entry/%E3%85%81%E3%85%81
[AI/딥러닝] 진정한 딥러닝을 위한 3가지 분류 (Classification, Object Detection, Image Segmentation) 2탄
이 포스팅을 읽기 전 classification과 object detection의 성능 지표에 대해 설명한 아래 포스팅을 먼저 읽고 오면 도움이 된다. 2021.08.31 - [AI | 딥러닝/Concept] - [AI/딥러닝] 진정한 딥러닝을 위한 3가지 분
rubber-tree.tistory.com
https://youtube.com/watch?v=lDqn1UNwgrY&si=E5yvCtDZtRIT2uLk
'TECH > AI' 카테고리의 다른 글
| Introducing DEEPLABCUT (2) | 2024.11.11 |
|---|---|
| Multi CUDA - ubuntu 24.04 (1) | 2024.09.25 |
| RNN, LSTM, GRU | 자연어처리 #2 (0) | 2024.09.21 |
| Introducing RAG (0) | 2024.09.11 |
| 자연어의 특징| 자연어처리 #1 (0) | 2024.09.11 |