딥러닝(1): 컨볼루션 연산

1. 컨볼루션 커널 및 풀링:

1.1 컨벌루션 커널:

입력 이미지의 작은 픽셀의 가중 평균 이 출력 이미지의 각 해당 픽셀이 되며, 여기서 가중치는 컨볼루션 커널(필터) 이라는 함수에 의해 정의됩니다 .

일반적으로 특정 부분의 가중합으로 볼 수 있는데 , 그 원리는 물체를 관찰할 때 각 픽셀이나 전체를 한꺼번에 관찰할 수 없고, 먼저 로컬 부분부터 이해하기 시작한다는 것입니다. 컨볼루션 . 컨볼루션 커널의 크기는 일반적으로 1x1, 3x3, 5x5 (보통 홀수 x 홀수) 의 크기를 가지고 있습니다.

1.2 풀링:

컨벌루션 기능은 종종 특정 로컬 기능에 해당합니다. 글로벌 기능을 얻으려면 글로벌 기능에 대한 집계를 수행해야 합니다 . 풀링(Pooling)은 그러한 작업입니다. 각 컨볼루션 채널에 대해 더 큰 크기(전역)에서 컨볼루션 기능을 풀링하여 더 많은 전역 기능을 얻을 수 있습니다. 여기서 풀링은 확실히 교차 영역에 해당합니다.

2. 컨벌루션 레이어 크기의 계산 원리:

2.1 컨볼루션 커널 입력 및 출력 레이어 수와 컨볼루션 커널 간의 관계

        컨볼루션 커널 채널 수 = 컨볼루션 입력 레이어의 채널 수

        컨볼루션 커널 수 = 컨볼루션 출력 레이어의 채널 수(깊이)

컨볼루션 입력 레이어의 입력이 H x W x C이고 C가 입력의 깊이(즉, 채널 수)라고 가정하면 컨볼루션 커널의 채널 수(레이어 수/깊이)는 다음과 같습니다. 또한 C.

컨볼루션 커널의 크기가 K x K라고 가정하면 컨볼루션 커널은 K x K x C입니다.

K x K x C의 P 컨볼루션 커널이 있다고 가정합니다. 각 컨볼루션 커널은 입력에 적용될 때 채널을 얻게 되며 출력에는 P 채널이 있습니다.

예: 입력 8x8x3(rgb 3개 채널), 출력은 5비트 깊이, 컨볼루션 커널 크기는 3x3입니다. 그런 다음 5개의 3x3x3 컨볼루션 커널이 필요합니다. 각 컨볼루션 커널에는 3개의 레이어가 있으며 각 레이어는 3x3입니다. 우리는 원본 이미지의 각 레이어(8x8)와 컨볼루션 커널의 각 레이어(3x3)를 컨벌루션한 다음 세 개의 새 이미지를 겹쳐서(산술 합산) 새로운 특징 맵을 만듭니다 . 각 컨볼루션 커널에 대해 이 작업을 수행하면 5개의 새로운 기능 맵을 얻을 수 있습니다. 구체적인 작업 과정은 아래 그림을 참조하세요.

결론: 입력 이미지의 깊이에 관계없이 컨볼루션 커널을 통과한 후에는 결국 깊이가 1인 특징 맵이 됩니다 . 다양한 컨볼루션 커널을 컨볼루션하여 다양한 기능 맵을 얻을 수 있습니다. 

위 그림의 6x6 결과는 그림 2의 계산식을 통해 구해집니다.

 

2.2 패딩:

출력 특성 맵의 길이와 너비 = 입력 특성 맵의 길이와 너비가 되도록 입력 특성 맵의 각 측면에 특정 수의 행과 열을 추가합니다.

(1) 채우는 것의 의미:

앞에서 볼 수 있듯이 입력 이미지를 컨볼루션 커널로 컨볼루션한 결과 일부 값이 손실되고 입력 이미지의 가장자리가 "잘라내립니다"(가장자리에서는 일부 픽셀만 감지되고 많은 정보가 손실됨). 그림의 경계에서 손실됩니다. ). 이는 가장자리의 픽셀이 컨볼루션 커널의 중심에 위치하지 않고 컨볼루션 커널이 가장자리 영역을 넘어 확장될 수 없기 때문입니다.

이 결과는 우리가 받아들일 수 없습니다. 때로는 입력 및 출력 크기가 일관되어야 하기도 합니다 . 이 문제를 해결하려면 컨볼루션 연산을 수행하기 전에 원래 행렬에 경계 패딩(Padding)을 수행하면 됩니다 . 즉, 행렬의 경계에 일부 값을 채워 행렬의 크기를 늘리는 것입니다. 일반적으로 "0" "는 패딩에 사용됩니다 . . 패딩 방법을 통해 컨볼루션 커널이 입력 데이터를 스캔할 때 가장자리를 넘어 의사 픽셀까지 확장할 수 있으므로 출력 크기와 입력 크기가 동일해집니다. 일반적으로 패딩은 0으로 수행됩니다.

(2) 일반적으로 사용되는 두 가지 충전재:

  • valid padding : 아무런 처리도 하지 않고 원본 이미지만 사용하며 컨볼루션 커널은 원본 이미지의 경계를 초과할 수 없습니다.

  • Same padding : 컨볼루션 커널이 원본 이미지의 경계를 초과하도록 패딩하고 컨볼루션 결과의 크기를 원본과 일치하게 만드는 것

2.3 단계 길이:

컨볼루션 커널을 슬라이딩할 때 입력의 왼쪽 상단부터 시작하여 한 열을 왼쪽으로 또는 한 행 아래로 슬라이드하여 매번 출력을 하나씩 계산하며, 슬라이딩할 때마다 행과 열의 수를 Stride라고 합니다. 이전 그림에서 아래 그림에서는 Stride=1이고, 아래 그림에서는 Stride=2입니다.

실제로 stride는 입력 특징 맵을 통한 컨볼루션 커널의 샘플링 간격 입니다 . 컨볼루션 과정에서 정보 손실을 방지하기 위해 패딩이 필요한 경우도 있고, 컨볼루션 시 설정된 스트라이드(Stride) 를 통해 정보의 일부를 압축하거나 출력 크기를 입력 크기보다 작게 만드는 경우도 있습니다.

Stride의 기능은 크기를 두 배로 늘리는 것이며 이 매개변수의 값은 감소의 특정 배수입니다. 예를 들어 stride가 2이면 출력은 입력의 1/2이고 stride가 3이면 출력이 됩니다. 입력의 1/3입니다.

위의 진술(스트라이드가 2일 때 출력은 입력의 1/2이고, 스트라이드가 3일 때 출력은 입력의 1/3입니다)은 그다지 엄격하지 않습니다. 이것은 정리가 아닙니다. 2는 한 쌍의 입력으로 이해될 수 있습니다. 특징 맵은 2배로 다운샘플링되었습니다. 우리가 바라는 것은 입력 매개변수를 줄이고 너무 많은 매개변수와 너무 많은 계산을 방지하는 것 입니다 . 이것이 stride를 2로 설정하는 목적입니다. 엄밀히 말하면 출력은 입력의 1/2이 아니라 1/3이라는 점을 특히 분명히 해야 합니다.

2.4 특징 맵 값 계산:

겹치는 부분은 가중치의 곱셈과 덧셈에 해당합니다.참조 링크: 3232548-ad8c1ead78877d28.gif (526×384) (jianshu.io)

그림에서 노란색 부분의 빨간색 글꼴은 컨볼루션 커널의 해당 가중치이고, 검은색 글꼴은 입력 이미지의 해당 부분의 값이며, 해당 위치의 모든 값을 곱하고 더해 줍니다. 오른쪽 분홍색 부분과 같은 특징 맵을 얻습니다.

3. 다중 채널 컨볼루션

실제로 실제 응용 분야에서 대부분의 입력 이미지는 RGB 3 채널입니다.

3.1 컨볼루션 커널과 필터

컨벌루션 커널필터

채널이 하나만 있는 경우 "컨볼루션 커널"은 "필터"와 동일하며 이 두 개념은 서로 바꿔 사용할 수 있습니다.

그러나 일반적인 경우(대부분의 입력 이미지는 RGB 3채널임) 완전히 다른 개념입니다. 각 "필터"는 실제로 다음과 같이 설명되는 "컨볼루션 커널"의 모음입니다 .

  • 컨볼루션 커널은 길이와 너비로 지정되며 이는 2차원 개념입니다.

  • 필터는 길이, 너비, 깊이로 지정되는 입체적인 개념입니다.

  • 필터는 컨볼루션 커널의 모음으로 볼 수 있습니다.

  • 필터는 컨볼루션 커널보다 차원이 하나 더 높습니다(깊이).

이전 다중 채널 컨볼루션을 예로 들면 컨볼루션 커널의 크기는 3x3이고 컨볼루션 커널의 수는 3개입니다. 이때 컨볼루션 커널의 크기는 3x3이고 필터의 크기는 3x3x3입니다. .

실제로 이전 컨볼루션 프로세스를 주의 깊게 분석하면 다음을 확인할 수 있습니다. 필터는 기능 맵에 해당합니다.

3.2 다중 채널 컨볼루션

자세한 내용은 2.1의 예를 참조하세요.

추천

출처blog.csdn.net/aimat2020/article/details/129486078