[CNN] 1. convolution

happy_quokka·2023년 12월 17일
0

딥러닝

목록 보기
5/18

CNN

Convolution Neural Networks

  • convolutioinal matrix
    • 주로 3x3, 5x5를 사용한다
    • sliding window 방식으로 이미지에서 특징을 추출한다

convolution

  • 같은 위치의 원소들의 곱의 합으로 계산
  • padding
    • 외곽에 0을 채우는 것
    • input과 output의 크기가 같기를 원할 때 사용
  • stride
    • kernel을 적용하는 간격
    • 커질수록 연산량이 줄고, output 크기도 작아진다
  • output 크기
    • output_height = (input_height - kernel_height + padding*2)//stride +1
    • output_width = (input_width - kernel_width + padding*2)//stride +1
  • 데이터 shape
    • input : [batch, in_channel, height, width]
    • weight : [out_channel, kernel_channel, kernel_height, kernel_width] (in_channel == kernel_channel)
    • output : [batch, out_channel, out_height, out_width]

convolution operation

  • convolution 연산량을 셀 때 MAC을 사용
  • MAC : Multiply Accumulation operation
  1. output의 픽셀 하나 연산량 = kernel_width kernel_height kernel_channel
  2. output의 한 행 연산량 = 1번 * out_channel
  3. output 하나의 연산량 = 2번 out_width out_height
  4. 전체 연산량 = 3번 * batch
  • 하지만 이 방법은 반복이 너무 많아서 비효율적이다

IM2COL & GEMM

  • 효율적인 연산 방법

IM2COL

  • n차원의 data를 2차원 matrix data로 변환
  • 메모리를 조금 더 많이 차지하지만 연산은 효율적이다

GEMM

  • General Matrix to Matrix Multiplication
  • 이 연산하는 과정을 의미

CNN 구현해보기

1. native 방법으로 구현해보기 (numpy만 사용)

2. IM2COL & GEMM 방법으로 구현해보기

  • 위의 그림과는 다르게 input * kernel로 진행된다 (따라서 row, col이 반대)

3. torch를 사용해서 구현해보기

3가지 time 비교

  • 동일하게 conv를 5번 수행하였을 때
  • native : 0.03708481788635254
  • IM2COL & GEMM : 0.0023488998413085938
  • torch : 0.0008263587951660156
  • IM2COL & GEMM 방법이 일반적인 방법보다 빠르지만 torch를 사용하는 것이 더 빠르다

0개의 댓글