재형이의 성장통 일지
  • CNN 연산, Conv, Pooling, 컴퓨터 비젼
    2024년 03월 05일 06시 37분 32초에 업로드 된 글입니다.
    작성자: 재형이
    반응형
     

     

    • 최근에 같이 조대협님의 프로젝트를 진행하면서 만난 팀원분께 좋은 말씀을 많이 듣고 있다
    • 같이 프로젝트를 진행하면서 아마 인사이트가 많이 변할 것 같다
    • 확실히 다양한 사람들을 만나면서 의견을 공유해보는게 많이 도움이 되는 것 같다

     

     

     

     

     

     

     


     

     

     

     

     

     

     

     

    1. 컴퓨터 비젼의 주요 TASK

    • 컴퓨터는 이미지를 이해하지 못한다
    • 컴퓨터는 모든 것들을 숫자로 이해를 하기 때문에 (정확히는 이진법) 입력되는 데이터들을 숫자로 변환해서 넣어주어야 한다
    • 이미지를 학습시키기 위해 입력값으로 넣어주려고 하는 경우에는 어떻게 할 수 있을까?
    • 컬러 이미지는 RGB로 구성되어 있고 각각의 값들은 0과 255사이의 값들이다. 즉, 깊이 3을 가지는 행렬들의 모임이라고 할 수 있다
    • 이런식으로 이미지든 문자이든 숫자로 표현해서 넣어주어야 한다
    • 컴퓨터 비젼 Task는 크게 3가지로 분류할 수 있다
      1. Image Classification (Single object)
      2. Localization (Single object)
      3. Object Detection (Multiple object)

    • 필요 사항에 따라 다양한 곳에 적용할 수 있다
    • 셀카를 찍을 때 얼굴을 보정한다던지, 자율 주행할 때 사람, 차량, 신호등 등을 인식한다던지, 사진 식별 등 다양한 것을 할 수 있다

    Object Detection

    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를 구하는 공식은 다음과 같다

    [ ] 처럼 생긴 수식은 소수점 버림을 의미한다 ex) 2.3 → 2

    • 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 첫번째에서 매우 많은 양을 필요로 한다

     

     

     

     

     

     

     

     


     

     

     

     

     

     

     

     

    반응형
    댓글