4. HEVC 화면 간 예측 (Inter Prediction)

김범수·2022년 6월 2일
0

HEVC

목록 보기
4/5

화면 내 예측 (Intra Prediction)에서는 주변 블록 간의 상관도를 이용하여 현재 블록의 화소값을 예측했다면, 화면 간 예측 (Inter Prediction)에서는 이미 부호화된 픽쳐들과의 시간적 상관도를 이용하여 현재 블록의 화소값을 예측하게됩니다.

  • DPB (Decoded Picture Buffer)

Inter Prediction을 설명하기 앞서 DPB (Decoded Picture Buffer)에 대해 먼저 알아보겠습니다.

DPB는 부호화된 픽쳐들을 저장하는 역할을 수행하는데 용량이 유한하기 떄문에 RPS (Reference Picture Set)을 통해 DPB 내 사진들을 관리하게 됩니다.

DPB 내에는 세 종류의 픽쳐가 존재하게 됩니다

  • 분류1 : 현재 픽쳐에 대한 참조 픽쳐
  • 분류2 : 미래 픽쳐에 대한 참조 픽쳐
  • 분류3 : 출력 순서 조정을 위한 비참조 픽쳐

그림 1. DPB에서 범핑 예시

위 그림은 0213 순서의 POC (Picture Of Count)가 DPB에서 출력 순서를 조정되어 0123 순서로 출력되는 과정이며, 이러한 과정을 범핑이라고 합니다.

  • RPS의 참조 픽쳐 정보

DPB에서 RPS의 픽쳐 정보들을 읽어 참조 픽쳐로 사용하는 과정을 보면

그림 2. DPB에서 참조 픽쳐 결정

  • 플래그 -> 참조 픽쳐 결정
  • 리스트 -> 참조 픽쳐 리스트 추가
  • 픽쳐 단위로 전송하여 각 슬라이스에서 RPS 참조하여 사용

RPS의 플래그가 1이라면 현재 픽쳐를 예측하는데 사용되며, 0이라면 미래의 픽쳐를 예측하기 위해 사용됩니다. 만약 플래그가 주어지지 않는다면 그림 2의 POC 8처럼 일정 시간 후 제거되게 됩니다.

또한 리스트 정보를 통해 참조 픽쳐리스트에 추가되며, RPS 정보들은 픽쳐 단위로 전송되기 때문에 슬라이스의 RPS index를 통해 읽어 사용합니다.

  • 범핑 (Bumping)
  • 코덱 외부의 디스플레이 버퍼로 가장 작은 POC값을 갖는 복원 픽쳐 전달
  • If) 버퍼 내 픽쳐 > 지연 파라미터 -> 범핑

그림 3. 범핑 예시

범핑은 주어진 지연 파라미터보다 버퍼내 픽쳐들이 많아지면 디스플레이 버퍼로 가장 작은 수의 픽쳐를 전달합니다

표를 보시면 픽쳐 042까지는 버퍼에 저장이 되지만

픽쳐 1이 추가되면 지연 파라미터 수보다 버퍼 내 사진이 많아지므로 가장 낮은 즉 픽쳐 0이 디스플레이 버퍼로 전달되며 픽쳐 3이 들어오면 마찬가지로 픽쳐 1이 전달되게 됩니다.

  • 참조 픽쳐 리스트

참조 픽쳐 인덱스 사용으로 PU 단위로 전송되는 참조 픽쳐 정보를 줄이기 위해 사용합니다.

그림 4. 참조 픽쳐 리스트

참조 픽쳐 리스트란 각 PU마다 픽쳐 정보들을 보내기엔 비트량이 많이 소모되므로 참조 픽쳐 인덱스를 사용하게 됩니다.

분류1에 해당하는 현재 참조 픽쳐들을 추가하게 되며 리스트가 빌 경우 다른 리스트의 픽쳐를 채우게 됩니다.

예를 들어 픽쳐 2의 RPS 정보에는 리스트 0에는 픽쳐 0 리스트 1에는 픽쳐 4라는 정보가 있지만 실제 참조픽쳐리스트에는 둘 다 픽쳐 0, 4를 추가하여 사용하게 됩니다.

  • 리스트 수정
  • 순서 변경만을 위해 참조 픽쳐 정보를 반복적 전달하는 것은 비효율적
  • 빈번하게 사용되는 픽쳐에 작은 인덱스 할당

그림 5. 리스트 수정

매번 참조 픽쳐 리스트가 바뀔때 마다 픽쳐 정보들을 전달하는건 비효율적이므로 변경 유무 정보와 변경 위치 정보만으로 수정합니다.

또한 자주 사용하는 픽쳐에 낮은 인덱스를 할당하게 됩니다.

표를 보시면 플래그를 통해 변경 유무를 전달하고 그 위치에 몇번째 픽쳐가 올지 명시합니다.

  • Block Partition

그림 6. Inter 예측에서 블록 분할

Inter 예측에서는 Intra 예측에서 사용되지 않았던 직사각형 모양과 비대칭 모양의 블록 파티션들이 추가 사용하게 됩니다.

이러한 비대칭 블록은 갑자기 변하는 배경에서 효율적으로 사용됩니다.

N X N예측은 8 x 8이 아닌 최소 CU (sCU)에서만 사용되며 8 x 8에서는 8 x 8 8 x 4 4 x 8 예측 단위가 사용됩니다.

  • DCT-based Interpolation Filters

그림 7. DCT 보간 필터

기존에는 정수 단위 샘플을 사용했지만 DCT Interpolation을 사용하게 되면 픽쳐 와 픽쳐 사이 분수 단위 샘플을 사용하여 더 세밀한 예측이 가능하게 됩니다.

Luma 예측은 16배 Chroma 예측은 64배의 예측 샘플들이 생기며 같은 위치에 해당하는 샘플들로 예측 블록을 구성해 사용하게 됩니다.

  • HEVC에서는 DCT 기반의 Interpolation을 사용합니다.

그림 8. DCT 보간 계산

계산 과정은 4종류 8탭인 Luma를 기준으로 샘플과 계수를 쌍쌍히 곱한 후 다운 스케일하여 사용하게됩니다.

  • Inter Prediciton

그림 9. Inter Prediction

  • 인접 픽쳐의 주변 블록이 유사한 동일한 움직임의 물체일 확률
  • 시간이 지나도 물체가 움직이지 않을 가능성

==> 인접 픽쳐의 주변 블록의 MV (Motion Vector)를 예측 변수로 사용

설명드릴 Inter 예측의 예측 기법인 Merge와 AMVP는 공통적으로 현재 픽쳐와 시간적으로 인접한 픽쳐들은 유사한 움직임을 가지거나 물체가 움직이 않을 가능성이 높기 때문에 인접 픽쳐들의 MV들을 예측 변수로 사용합니다.

  • Merge
    • 공간 및 시간 인접 블록으로부터 merge candidates 구성
    • 움직임 벡터, 참조 픽처 번호, 단방향/양방향 예측 모드를 최적 merge candidate로부터 가져와서 그대로 사용
    • Motion Estimation X (복잡도 감소)
    • Decoder에서 받는 정보 : Merge_flag, Merge_index
  • Merge 과정 1.  4개의 공간적 후보 탐색 2.  중복 후보 제거 3.  1개의 시간적 후보 탐색 4.  후보 리스트 생성 5.  MRGCost = MRGError + λ *MRGBits  5번 실행 후 best 선택 MRGError = Hadamard (SATD) MRGBits = Truncated Unary Code, MaxNum is signaled at Slice header
  • Spatial Merge Candidate

그림 10. 대칭 Spatial Merge 후보

인접한 블록들이 유사한 움직임을 가진 동일한 이동 물체에 해당할 가능성이 높고, 물체의 움직임이 시간이 지남에 따라 갑자기 변화하지 않을 가능성이 높기 때문에  왼쪽과 위쪽 영역 각각의 후보의 예측 정보를 사용한다.

  • A0 → A1 → scaled A0 → scaled A1
  • B0 → B1 → B2 → scaled B0 → scaled B1 → scaled B2

그림 11. 비대칭 Spatial Merge 후보

  • PU가 정사각형이 아닐 때

(Nx2N, nLx2N, nRx2N / 2NxN, 2NxnU, 2NxnD )

  • 같은 CU 내의 블록 사용 X

=> 병렬적인 복호화 보장

  • Merge Skip

coded block flags (CBF) = 0 인 경우 잔차 신호없이 주변 블록 MV만 전송

=> 움직임이 거의 없는 영상에 효율적

  • AMVP
  • Spatial Candidate

그림 12. AMVP Spatial Candidate

  • 왼쪽과 위쪽 영역 각각의 후보
  • A0 → A1 → scaled A0 → scaled A1
  • B0 → B1 → B2 → scaled B0 → scaled B1 → scaled B2

그림 13. AMVP 후보 구성 과정

1.  A의 MV 이용 가능한가?

2.  tb = td 인가? (현재의 참조 = 후보의 참조)

3.  같으면 A, 다르면 scaled-A

4.  B의 MV 이용 가능한가?

5.  tb = td 인가?

6.  같고 A 이용 가능하다면  그냥 B

7.  같고 만약 A를 모두 이용할 수 없다면 후보 A에 B 할당, B에는 두번째(?) B 또는 scaled B할당

8.  다르고 A 이용 못한다면 scaled-B

A의 가용성으로 후보 B에 대한 Scaling 연산 줄임 (Scaling 은 하나하면 다 해서 부담큼)

  • Temporal Candidate

그림 14. Temporal Candidate

  • 공간 후보에서 왼쪽, 위쪽만 MVP 후보로 사용

(우측, 아래 쪽은 디코딩 X)

  • 우측 하단 블록 우선적 고려
  • CTU밖, Picture Boundary, Intra 예측 시 존재 X
  • Merge & AMVP

Merge• Merge_flag

  • Merge_index

=> 부호화 비트수가 적으며 움직임 추정 과정 필요 없음

AMVP

  • ref_idx_l0, ref_idx_l1, reference index
  • mvd info
  • mvp_l0_flag, mvp_l1_flag

=> 부호화 비트 수가 크지만 파라미터를 자유롭게 결정하여 부호화 가능, 움직임 추정 과정 필요

profile
iOS Developer

1개의 댓글

comment-user-thumbnail
2023년 1월 10일

관련 기술 번역 중인데 유용한 글이라서 너무 잘 읽었습니다!
질문 있는데요, inter prediction을 화면 간 예측으로 설명해주셨는데 혹시 inter-picture prediction도 같은 의미로 해석하면 될까요? 아니면 좀 다른 걸까요?

답글 달기