Altifigence Academy

13 / 24 · 개념

라인 버퍼와 3×3 창

W=8,H=6인 같은 창 생성기에서 저장 슬롯 수, 첫 유효 입력 인덱스와 총 창 개수는 무엇인가요?

중첩 입력을 가까운 곳에 보관하기

행 우선으로 픽셀을 하나씩 받는 3×3 연산에서 현재 픽셀은 같은 열의 이전 두 행 값과 함께 필요합니다. 라인 버퍼 두 개는 그 두 행을 지연시켜 공급합니다. 각 행의 샘플을 가로 시프트 레지스터에 넣으면 세 열씩의 창을 만들 수 있습니다. 입력 전체를 저장하지 않고 중첩 창을 만들지만 처음에는 이전 행과 열이 아직 채워지지 않았습니다. 데이터가 있다고 창이 곧바로 유효한 것은 아닙니다.

이 과정은 한 채널, 3×3 valid, stride 1, dilation 1의 창 생성기로 시작합니다. 폭 W의 라인 저장 두 개와 3×3 가로 창을 명시적으로 두면 저장 슬롯은 2W+9입니다. 이는 실습 모델의 슬롯 수이며 모든 구현의 최소 저장량이라는 주장은 아닙니다. dilation 2, padding, 여러 채널 또는 다른 stride를 지원하려면 필요한 지연과 유효 조건을 다시 설계해야 합니다.

도착 순서 계산 예제

입력이 4×4이고 값은 행 우선으로 1부터 16까지입니다. 0부터 세는 입력 인덱스 10, 즉 값 11이 도착하면 행 2,열 2가 됩니다. 처음으로 세 행·세 열을 모두 채웠으므로 창 [1,2,3;5,6,7;9,10,11]을 낼 수 있습니다. 다음 값 12에서는 [2,3,4;6,7,8;10,11,12]입니다. 다음 행의 값 13과 14는 열 0과 1이므로 아직 창을 출력하지 않습니다. 값 15와 16에서 나머지 두 창을 냅니다.

따라서 총 16입력에서 유효 창은 4개이며 인덱스 [10,11,14,15]에 대응합니다. 한 픽셀을 한 사이클에 받아도 시작 채움과 행 경계에서 유효 창이 없는 사이클이 생깁니다. 버퍼가 가득 찬 뒤 모든 사이클에 항상 창이 나온다고 보고하면 처리율을 과장합니다. 실제 출력률을 계산할 때 프레임 전체의 4/16과 유효 구간의 순간 출력률을 구분합니다.

행 경계를 처리하기

열 0에서 가로 창을 초기화하거나 앞 행의 열 값을 무효로 표시해야 합니다. 행 경계 뒤의 첫 두 열에서 이전 행 마지막 열을 이어 붙이면 틀린 창이 됩니다. 이 모델은 가로 창을 0으로 지운 뒤 열 2 이상에서만 유효를 냅니다. 라인 버퍼는 이전 행을 보존하므로 지우지 않습니다. 행과 열 카운터는 수락된 픽셀 수에 따라 움직이며 단순 클록 수로 움직이지 않습니다.

폭 W=4일 때 실습 저장량은 8+9=17샘플입니다. 큰 H를 저장하는 전체 프레임 버퍼 4H와 비교하면 높이에 의존하지 않는 장점이 보입니다. 하지만 두 출력 채널이 같은 창을 읽을 때 계산기가 그 창을 처리할 시간을 제공해야 합니다. 창 생성과 소비 사이의 흐름 제어는 다음 단원에서 다룹니다. 입력, 두 행 지연, 창과 연산기로 이어지는 단계는 아래 그림에서 살펴보세요.

3x3 유효 창의 처리 경로
  1. 입력 픽셀: 전송을 수락했을 때만 전진
  2. 두 행 지연: 앞선 두 행의 값을 공급
  3. 3x3 창: 행 2와 열 2부터 유효
  4. MAC 처리기: 완성된 창을 처리하거나 저장

직접 생각해 보기

W=8,H=6인 같은 창 생성기에서 저장 슬롯 수, 첫 유효 입력 인덱스와 총 창 개수는 무엇인가요?

해설 보기

저장은 2×8+9=25슬롯입니다. 첫 창은 행 2,열 2여서 인덱스 2×8+2=18입니다. valid 출력 모양은 4×6이며 창은 24개입니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.