방명록
- CNN 연산, Conv, Pooling, 컴퓨터 비젼2024년 03월 05일 06시 37분 32초에 업로드 된 글입니다.작성자: 재형이반응형
- 최근에 같이 조대협님의 프로젝트를 진행하면서 만난 팀원분께 좋은 말씀을 많이 듣고 있다
- 같이 프로젝트를 진행하면서 아마 인사이트가 많이 변할 것 같다
- 확실히 다양한 사람들을 만나면서 의견을 공유해보는게 많이 도움이 되는 것 같다
1. 컴퓨터 비젼의 주요 TASK
- 컴퓨터는 이미지를 이해하지 못한다
- 컴퓨터는 모든 것들을 숫자로 이해를 하기 때문에 (정확히는 이진법) 입력되는 데이터들을 숫자로 변환해서 넣어주어야 한다
- 이미지를 학습시키기 위해 입력값으로 넣어주려고 하는 경우에는 어떻게 할 수 있을까?
- 컬러 이미지는 RGB로 구성되어 있고 각각의 값들은 0과 255사이의 값들이다. 즉, 깊이 3을 가지는 행렬들의 모임이라고 할 수 있다
- 이런식으로 이미지든 문자이든 숫자로 표현해서 넣어주어야 한다
- 컴퓨터 비젼 Task는 크게 3가지로 분류할 수 있다
- Image Classification (Single object)
- Localization (Single object)
- Object Detection (Multiple object)
- 필요 사항에 따라 다양한 곳에 적용할 수 있다
- 셀카를 찍을 때 얼굴을 보정한다던지, 자율 주행할 때 사람, 차량, 신호등 등을 인식한다던지, 사진 식별 등 다양한 것을 할 수 있다
2. CNN (Convolutional Neural Network)
- CNN은 크게 Inputs, Feature Detection, Classifier로 구분할 수 있다
- CNN은 이미지 처리에만 사용되는 것은 아니지만, 특히 이미지 처리에 좋은 성능을 보여주고 있다
- 위 그림에서 볼 수 있듯이 Feature Detection에서 Convolution layer와 Pooling layer로 구성이 되어 있는데 목적에 따라 다양하게 조합하여 사용할 수 있다
3. CNN의 주요 연산 - Conv
- Convolution은 ReLU 액티베이션과 짝꿍이다
- 데이터의 특징을 추출하기 위해 다양한 필터(커널)을 적용할 수 있다
- 이미지의 특징점을 효과적으로 찾는데 활용
- 적은 수의 가중치로 이미지 처리를 효율적으로 할 수 있음
- Convolution 연산을 수행할수록 점점 복잡한 형태의 고차원 특징을 추출할 수 있다
- 즉, 인공 신경망이 깊어질수록 고차원 특징을 추출할 수 있다
- Convolution 연산 수행 시 여러개의 커널을 적용 → 다양한 특징을 추출
- 보통 Convolution 연산을 수행하면 Output의 크기가 줄어들게 되는데 이것을 방지하기 위해서 Padding이라는 기술을 사용할 수 있다
- 예를 들어 이미지를 단순히 blur만 시키고 싶다던가 할 때는 Padding을 통해 사이즈는 유지하면서 Conv를 적용할 수 있겠다
3-1. Convolution의 구성 요소
- 필터(Filter), 커널(Kernel)
- 이미지에 겹치는 작은 필터 3x3 또는 5x5 사용
- 학습을 통해 자동으로 적합한 필터 생성: 이미지의 특징을 추출하는 필터 학습
- 패딩(Padding)
- 입력 이미지 주변을 0으로 감싸서, 이미지 크기가 줄어드는 것을 보완
- 스트라이드(Stride)
- 필터를 몇 칸 씩 건너뛰며 적용할 지 조절하는 값
- 특징 맵(feature map)
- Convolution 연산을 거쳐 나온 새로운 이미지유형
4. CNN의 주요 연산 - Pooling
- 필터를 거친 여러 특징 중 가장 중요한 특징 하나를 선택하여 feature 수를 줄임 (Sub-sampling)
- Pooling 종류
- 평균값(average-pooling) Pooling
- 최대값(max-pooling) Pooling
- 학습해야 할 매개변수가 없고, 채널 수가 변하지 않음
5. CNN의 하이퍼 파라미터
- Convolution Layers
- Conv layers 개수
- Filter size : 일반적으로 홀수값을 설정
- Filters의 개수: Channel 수, 일반적으로 2의 배수로 설정
- Stride, padding…
- Pooling Layers
- Pooling layers 개수
- Pooling windows size
- Stride
- FC Layers
- FC layers 개수
- FC layer를 구성하는 노드의 개수
- 학습을 위한 하이퍼파라이터
- batch size, epcohs, learning rate, momentum coefficient …
6. 입출력 크기 및 메모리 사용량 계산
- 학습을 시키고 추론을 할 때 실질적으로는 컴퓨터의 리소스를 사용하기 때문에 해당 모델이 리소스를 얼마나 요구하는지를 미리 예측하는 것은 매우 중요하다
- 학습: 축적된 데이터를 바탕으로 신경망 내의 정보 전달 관련 Weight를 Update하여 모델을 만드는 과정
- 추론: 만들어진 모델을 활용해 주어진 Input에 대한 해석 결과를 내놓는 단계
- → 두 단계의 선후관계를 따져본다면 딥러닝 모델을 학습한 후 추론을 하게 된다
6-1. Feature Map Size
- Convolution 연산을 거치고 Output으로 나오는 Feature Map의 Size를 구하는 공식은 다음과 같다
- i : 입력 feature의 수
- o : 출력 feature의 수
- k : convolution kernel 사이즈
- p : convolution padding 사이즈
- s : convolution stride 사이즈
6-1-1. 참고할 점
- stride 값을 늘리면?
- 연산량이 줄어든다
- 출력 feature의 수가 줄어든다
- 정보의 손실이 발생한다
- padding을 1보다 큰 값으로 설정하면?
- feature의 수가 줄어드는 것을 막을 수 있다
6-2. Storage Complexity – Weight 수
- 신경망 학습 이후에 저장되어야 하는 값
- layer i의 가중치(weights) 수 = 학습을 통해 업데이트 되는 파라미터의 수 = 𝐤 × 𝐤 × 𝐜𝐢−𝟏 × 𝐜𝐢
- k: filter size
- 𝑐𝑖−1: 이전 레이어의 채널의 수
- 𝑐𝑖: 현재 레이어의 채널의 수
6-3. Storage Complexity – Memory
- 추론 과정에서 디바이스에 얼마나 메모리가 소요되는 정도
- layer i의 메모리 = 학습 결과 = 𝒎𝐢 × 𝒎𝐢 × 𝐜𝐢
- 𝑚𝑖: 현재 레이어의 feature map 사이즈
- 𝑐𝑖: 현재 레이어의 채널의 수
6-4. Computational Complexity – CPU
- layer i의 계산 복잡도 = 𝐤 × 𝐤 × 𝒎𝐢 × 𝒎𝐢 × (𝐜𝐢−𝟏 × 𝐜𝐢)
- k: filter size
- 𝑚𝑖: 현재 레이어의 feature map 사이즈
- 𝑐𝑖−1: 이전 레이어의 채널의 수
- 𝑐𝑖: 현재 레이어의 채널의 수
- 추론 과정에서 계산 복잡도 결정
- 학습 과정에서는 GPU등 하드웨어 리소스를 사용할 수 있으므로 계산 복잡도는 큰 고려요소는 아님
6-5. 예시) VGGNet 리소스 사용량 살펴보기
- Memory는 Convolution 초반에는 높았다가 점점 줄어든다
- Weight는 초반에는 작지만 후반에 갈수록 높아지다가 FC 첫번째에서 매우 많은 양을 필요로 한다
반응형'인공지능 > 인공지능 기초' 카테고리의 다른 글
신경망 성능 향상, 1D conv, Embedding (1) (2) 2024.03.07 VGGNet, GoogLeNet(Inception), ResNet, Transfer Learning (0) 2024.03.06 분류 알고리즘, 회귀 알고리즘 (0) 2024.03.04 군집 알고리즘 (0) 2024.03.03 RNN (0) 2024.03.02 다음글이 없습니다.이전글이 없습니다.댓글