KR20230140460A - 병렬 엔트로피 코딩 - Google Patents

병렬 엔트로피 코딩 Download PDF

Info

Publication number
KR20230140460A
KR20230140460A KR1020237029749A KR20237029749A KR20230140460A KR 20230140460 A KR20230140460 A KR 20230140460A KR 1020237029749 A KR1020237029749 A KR 1020237029749A KR 20237029749 A KR20237029749 A KR 20237029749A KR 20230140460 A KR20230140460 A KR 20230140460A
Authority
KR
South Korea
Prior art keywords
substream
bitstream
bit
encoding
bits
Prior art date
Application number
KR1020237029749A
Other languages
English (en)
Inventor
막심 보리소비치 시체브
안드레이 소로카
엘레나 알렉산드로브나 알시나
세르게이 유리에비치 아이코닌
Original Assignee
후아웨이 테크놀러지 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후아웨이 테크놀러지 컴퍼니 리미티드 filed Critical 후아웨이 테크놀러지 컴퍼니 리미티드
Publication of KR20230140460A publication Critical patent/KR20230140460A/ko

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6011Encoder aspects
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3068Precoding preceding compression, e.g. Burrows-Wheeler transformation
    • H03M7/3077Sorting
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/88Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving rearrangement of data among different coding units, e.g. shuffling, interleaving, scrambling or permutation of pixel data or permutation of transform coefficient data among different blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

데이터를 비트스트림으로 인코딩하고 비트스트림으로부터 데이터를 디코딩하는 방법 및 장치가 설명된다. 이 방법은 병렬 인코딩 및 디코딩을 효율적으로 수행할 수 있으며 서브스트림의 패딩을 방지하여 비트스트림 내의 비트 수량을 감소시킬 수 있다. 입력 데이터 채널의 부분은 다중화되어 서브스트림으로 인코딩된다. 다중화 중에 더 균일한 길이의 서브스트림을 획득하기 위해 셔플링 방법이 적용된다. 서브스트림 내의 비트 수량은 인코딩 프로세스의 후행 비트 내에 관련 중요 비트만을 포함함으로써 더 감소될 수 있다.

Description

병렬 엔트로피 코딩
본 개시는 엔트로피 인코딩 및 디코딩에 관한 것이다. 구체적으로, 본 개시는 병렬 엔트로피 코딩, 특히 인코딩된 서브스트림의 구성 및 비트스트림으로의 포함과 비트스트림으로부터의 파싱(parsing)에 관한 것이다.
비디오 코딩(비디오 인코딩 및 디코딩)은 예를 들어, 방송 디지털 TV, 인터넷 및 모바일 네트워크를 통한 비디오 전송, 픽처 채팅, 픽처 회의와 같은 실시간 대화 애플리케이션, DVD 및 블루레이(Blu-ray) 디스크, 비디오 컨텐츠 수집 및 편집 시스템, 모바일 장치 비디오 녹화 및 보안 애플리케이션의 캠코더와 같은 광범위한 디지털 비디오 애플리케이션에서 사용된다.
1990년의 H.261 표준에서 블록 기반 하이브리드 비디오 코딩 접근 방식이 개발된 이후, 새로운 비디오 코딩 기술 및 도구가 개발되어 새로운 비디오 코딩 표준의 기반을 형성하였다. 대부분의 비디오 코딩 표준의 목표 중 하나는 화질을 희생하지 않고 이전 버전에 비해 비트레이트 감소를 달성하는 것이었다. 추가적인 비디오 코딩 표준은 MPEG-1 비디오, MPEG-2 비디오, VP8, VP9, AV1, ITU-T H.262/MPEG-2, ITU-T H.263, ITU-T H.264/MPEG-4, Part 10, 진보된 비디오 코딩(Advanced Video Coding, AVC), ITU-T H.265, 고효율 비디오 코딩(High Efficiency Video Coding, HEVC), ITU-T H.266, 다목적 비디오 코딩(Versatile Video Coding, VCC) 및 이러한 표준의 확장성 및/또는 3차원 확장과 같은 확장을 포함한다.
상대적으로 짧은 비디오를 묘사하는 데 필요한 비디오 데이터의 수량은 상당할 수 있으며, 이로 인해 제한된 대역폭 용량으로 통신 네트워크를 통해 데이터를 스트리밍하거나 통신할 때 어려움이 발생할 수 있다. 따라서, 비디오 데이터는 일반적으로 최신 통신 네트워크를 통해 전달되기 전에 압축된다. 메모리 자원이 제한될 수 있기 때문에 비디오가 저장 장치에 저장될 때 비디오 크기도 문제가 될 수 있다. 비디오 압축 장치는 종종 소스에서 소프트웨어 및/또는 하드웨어를 사용하여 전송 또는 저장 전에 비디오 데이터를 코딩함으로써 디지털 비디오 이미지를 나타내는 데 필요한 데이터의 수량을 감소시킬 수 있다. 압축된 데이터는 비디오 데이터를 디코딩하는 비디오 압축해제 장치에 의해 목적지에서 수신된다. 제한된 네트워크 자원과 더 높은 비디오 품질에 대한 요구가 계속 증가함에 따라 화질을 거의 또는 전혀 희생하지 않고 압축률을 향상시키는 향상된 압축 및 압축해제 기술이 필요하다.
비디오의 인코딩 및 디코딩은 예를 들어 H.264/AVC, HEVC(H.265), VVC(H.266) 또는 다른 비디오 코딩 기술과 호환되는 표준 비디오 인코더 및 디코더에 의해 수행될 수 있다. 또한, 비디오 코딩 또는 그 일부는 신경망에 의해 수행될 수 있다.
모든 인코딩 또는 디코딩 또는 스틸 픽처나 이미지 또는 신경망의 특징 채널과 같은 기타 소스 신호에서, 엔트로피 코딩이 널리 사용되었다. 특히, 산술 코딩은 최신 코딩 접근 방식에서 중요성이 높아졌다. 따라서, 엔트로피 코딩의 효율을 높이는 것이 바람직할 수 있다.
본 개시의 실시예는 데이터를 비트스트림으로 산술적으로 인코딩하고 비트스트림으로부터 데이터를 산술적으로 디코딩하기 위한 장치 및 방법을 제공하며, 이는 코딩된 비트 및 선행하는 후행 비트(leading trailing bit)를 포함한다.
본 발명의 실시예는 독립 청구항의 특징에 의해 정의되고, 종속 청구항의 특징에 의해 실시예의 더 유리한 구현이 정의된다.
실시예에 따르면, 동일한 크기의 복수의 채널의 데이터를 비트스트림으로 엔트로피 인코딩하는 인코딩 방법이 제공되며, 복수의 채널의 각 채널로부터의 제1 크기의 부분을 다중화한 다음, 제1 크기의 다중화된 부분을 제1 서브스트림으로 인코딩하는 단계; 복수의 채널의 각 채널로부터의 제2 크기의 부분을 다중화한 다음, 제2 크기의 다중화된 부분을 제2 서브스트림으로 인코딩하는 단계를 포함하며, 인코딩은 제1 서브스트림 및 제2 서브스트림으로 독립적으로 수행되는 엔트로피 인코딩이다.
각 채널을 개별적으로 인코딩하는 대신에 상이한 채널의 부분을 다중화 및 인코딩하면 예를 들어, 보다 균일한 길이의 서브스트림을 획득하기 위해, 완성된 서브스트림을 더 빠르게 생성하고 및/또는 개별 서브스트림의 길이를 제어할 수 있다. 이는 복수의 서브스트림에 대해 병렬로 엔트로피 인코딩 및/또는 엔트로피 디코딩을 수행할 가능성을 열어준다.
예시적인 구현에서, 인코딩 방법은 동일한 크기의 복수의 채널을 획득하기 위해 상이한 크기의 복수의 채널의 데이터를 전처리하는 단계를 포함하여 동일한 크기의 복수의 채널을 생성하는 단계를 더 포함한다.
임의의 크기의 채널에서 동일한 크기의 채널을 획득하는 옵션은 다양한 종류의 입력 데이터에 대한 방법의 적용 가능성을 제공한다.
예를 들어, 인코딩 방법은 제1 서브스트림 및 제2 서브스트림을 제1 서브스트림의 길이를 지시하는 제1 서브스트림 길이 지시 및 제2 서브스트림을 지시하는 제2 서브스트림 길이 지시와 함께 비트스트림으로 다중화하는 단계를 더 포함한다.
비트스트림에서 서브스트림의 길이를 지시하면 다양한 크기의 서브스트림을 제공할 수 있어 보다 유연한 비트스트림 구성이 가능하다.
예시적인 실시예에서, 제1 서브스트림 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행하고, 제2 서브스트림 길이 지시는 비트스트림 내에서 제2 서브스트림에 선행한다.
이러한 특징은 개별 서브스트림을 추출하기 위해 전체 비트스트림을 버퍼링할 필요가 없다.
예를 들어, 제2 서브스트림 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행한다.
제1 서브스트림 전에 연결된 길이 지시를 포함하는 이러한 비트스트림 구조는 비트스트림으로부터 서브스트림의 보다 효율적인 추출을 제공할 수 있다.
예시적인 구현에서, 엔트로피 인코딩은 산술 인코딩이다.
산술 인코딩을 사용하면, 레이트(rate) 감소가 가능할 수 있는 효율적인 엔트로피 코딩 메커니즘이 제공될 수 있다.
예시적인 구현에서, 인코딩 방법은 제1 서브스트림 및 제2 서브스트림을 제1 서브스트림의 제1 후행 비트의 길이를 지시하는 제1 후행 비트 길이 지시 및 제2 서브스트림의 제2 후행 비트의 길이를 지시하는 제2 후행 비트 길이 지시와 함께 비트스트림으로 다중화하는 단계를 더 포함한다.
마지막 부분을 인코딩한 후 인코더의 상태인 후행 비트는 서브스트림과 별도로 시그널링될 수 있다. 이로써, 후행 비트의 추가 처리가 실현될 수 있다.
예를 들어, 제1 후행 비트 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행하고, 제2 후행 비트 길이 지시는 비트스트림 내에서 제2 서브스트림에 선행한다.
이러한 비트스트림 구조의 장점은 복수의 서브스트림 및 각각의 지시를 버퍼링할 필요 없이 서브스트림을 즉시 인코딩할 수 있다는 것이다.
예를 들어, 제2 후행 비트 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행한다.
이러한 비트스트림 구조는 비트스트림의 개별 부분을 더 빠르게 추출할 수 있는 추가 가능성을 제공한다.
예시적인 구현에서, 인코딩 방법은 제1 서브스트림 다음의 비트스트림에 제1 후행 비트를 추가하는 단계, 및 제2 서브스트림 다음의 비트스트림에 제2 후행 비트를 추가하는 단계를 더 포함한다.
이러한 비트스트림 구조는 다른 서브스트림을 추출하지 않고도 제1 서브스트림과 대응하는 후행 비트를 디코딩할 수 있게 한다.
예를 들어, 제1 후행 비트는 비트스트림 내에서 제2 서브스트림을 따른다.
이러한 비트스트림 구조는 비트스트림에서 후행 비트를 추출하기 전에 개별 서브스트림의 디코딩을 시작할 수 있게 한다.
예시적인 구현에서, 인코딩 방법은 미리 결정된 바이트 수량의 정수배와 일치하도록 비트스트림 길이를 정렬하기 위해, 제1 서브스트림 길이 지시, 제2 서브스트림 길이 지시, 제1 후행 비트 길이 지시, 제2 후행 비트 길이 지시, 제1 서브스트림, 제2 서브스트림, 제1 후행 비트 및 제2 후행 비트를 포함하는 비트스트림을 미리 결정된 값을 갖는 비트로 패딩(padding)하는 단계를 더 포함한다.
이러한 구현은 예를 들어 네트워크 적응 계층 유닛 또는 기타 패킷으로의 캡슐화와 같은 추가 처리를 위해 적절하게 정렬된 비트스트림을 제공할 수 있다.
예를 들어, 제1 크기는 제2 크기와 동일하다.
동일한 크기의 부분을 사용하면 성능이 더 효율적일 수 있다. 예를 들어, 하드웨어 및 소프트웨어 구현에 적합한 메모리 유닛이 사용될 수 있다.
예시적인 구현에서, 제1 서브스트림에 포함된 모든 부분 및 제2 서브스트림에 포함된 모든 부분은 복수의 채널의 상기 데이터 심볼의 정수배(K)이고, K는 1보다 크다.
이러한 접근 방식은 소프트웨어 및/또는 하드웨어에서 효율적인 구현을 제공할 수 있다.
예를 들어 심볼는 비트이다.
예시적인 구현에서, 인코딩 방법은 제1 크기의 부분 및 제2 크기의 부분의 다중화를 위한 셔플링 방법을 선택한 다음 적용하는 단계를 더 포함하며, 셔플링 방법은, 미리 정의된 셔플링 방법의 세트 중에서 선택되고, 제1 크기의 부분 및 제2 크기의 부분의 순서를 지정한다.
서브스트림 크기의 보다 균일한 분포를 달성하기 위해 부분이 셔플링될 수 있다.
예를 들어, 셔플링 방법은 제1 크기의 부분에 대해 제2 크기의 부분의 순환 순열(cyclic permutation)을 수행한다.
이러한 셔플링 방법은 바람직하게는 그러한 균일한 길이의 서브스트림의 간단한 구현뿐만 아니라 보다 균일한 길이의 서브스트림을 초래할 수 있다.
예를 들어, 인코딩 방법은 반복적으로 수행되며, 셔플링 방법은 현재의 제1 서브스트림의 길이와 과거의 제1 서브스트림의 길이에 기초한 통계값 사이의 차이, 및/또는 현재의 제2 서브스트림의 길이와 과거의 제2 서브스트림의 길이에 기초한 통계값 사이의 차이에 따라 선택된다.
셔플링은 시간에 따른 서브스트림 간의 길이 차이를 감소시키기 위해 인코딩될 부분에 대해 반복적으로 수행될 수 있다.
예를 들어, 통계값은 추정 평균, 중앙값, 최소값, 최대값 또는 성장 속도 중 적어도 하나에 기초한다.
이러한 통계는 셔플링을 제어하는 적절한 수단을 제공할 수 있으므로, 서브스트림 크기 제어를 개선할 수 있다. 또한, 이것은 스트리밍 프로세스 내에서 보다 균일한 로딩을 허용할 수 있다.
예시적인 구현에서, 엔트로피 인코딩은 산술 인코딩이고, 셔플링 방법은 산술 인코딩의 범위 간격의 현재 상태에 따라 선택된다.
이러한 방법은 산술 인코더에 대한 간격의 현재 범위의 값이 미리 정해진 인코딩을 위한 최소 범위에 가까운지 여부를 고려할 수 있다. 따라서, 인코딩 중에 재정규화가 회피될 수 있다.
예시적인 구현에서, 엔트로피 인코딩은 제1 엔트로피 인코더로 제1 서브스트림을 생성하고 제2 엔트로피 인코더로 제2 서브스트림을 생성하는 것을 포함하고, 제1 엔트로피 인코더 및 제2 엔트로피 인코더를 사용한 엔트로피 인코딩은 적어도 부분적으로 병렬로 수행된다.
서브스트림의 병렬 인코딩으로 인해 전체 비트스트림을 더 빠르게 인코딩할 수 있다.
예를 들어, 채널은 신경망의 출력 채널 또는 잠재 표현 채널이다.
신경망은 일반적으로 동일한 크기 또는 적어도 고정된 크기의 채널을 제공하며, 이는 위의 실시예 및 예를 이러한 채널에 특히 적합하고 쉽게 적용할 수 있게 한다.
예시적인 구현에서, 엔트로피 인코딩은 산술 인코딩이고, 이 방법은, 다중화된 부분의 제1 서브스트림 또는 제2 서브스트림으로의 인코딩을 위해, 다중화된 부분을 코딩된 비트 및 인코더 상태 비트로 산술적으로 인코딩하는 단계 ― 코딩된 비트는 서브스트림을 형성함 ―; 산술적으로 인코딩된 입력 데이터의 간격의 최소값 및 최대값을 결정하는 단계; 선행하는 후행 비트의 수량을 결정하는 단계 ― 선행하는 후행 비트는 연속적인 인코더 상태 비트이고, 결정된 최대값을 나타내는 제1 최상위 비트(Most Significant Bit, MSB) 내에서 결정된 최소값을 나타내는 제2 MSB 내에서와 동일한 값을 가지며, 후행 비트는 선행 인코더 상태 비트임 ―; 및 후행 비트 길이 지시 내에서 선행 인코더 상태 비트의 결정된 수량을 지시하는 단계를 포함한다.
전체 후행 비트 대신에 선행하는 후행 비트를 비트스트림에 포함하는 것은 비트스트림 내의 비트의 수량을 감소시킬 수 있으므로, 레이트를 감소시킬 수 있다. 예를 들어, 동일한 품질에서 시그널링되는 레이트로 비트의 수량을 감소시킬 수 있다.
예를 들어, 선행 인코더 상태 비트의 수량인 NumTrailingBits는 NumTrailingBits = CLZ((LOW + RANGE - 1) XOR LOW)에 의해 결정되며, CLZ()는 선행하는 0의 카운트이고, LOW는 간격의 최소값이며, RANGE는 간격의 범위이다.
선행하는 후행 비트의 수량은 예를 들어 가장 가까운 바이트 경계로 반올림하는 대신에 정확하게 결정될 수 있으며, 이는 비트스트림 내의 비트 수량을 추가로 감소시킬 수 있다.
예시적인 구현에서, 값이 1인 하나의 비트가 비트스트림에 포함되기 전에 선행 인코더 상태 비트에 포스트펜드(postpend)된다.
이러한 접근 방식은 1-값 비트를 생략하는 대신 사용되는 일반적인 관행을 따를 수 있다.
예를 들어, 산술 인코딩 중에 간격의 현재의 최소값 및 현재의 최대값이 미리 구성된 크기의 메모리에 저장되고, 코딩된 비트를 비트스트림에 포함시키는 것은 안정적인 비트 중 미리 정의된 수량의 비트를 메모리로부터 비트스트림으로 이동시키는 것을 포함하며, 안정적인 비트는 현재의 최소값 및 현재의 최대값의 이진 표현의 MSB에서 동일한 값을 갖는 연속적인 비트이다.
2개의 개별 서브스트림에 대한 방법의 이러한 독립적인 적용은 병렬화를 위한 전제 조건을 제공한다.
예시적인 구현에서, 산술 인코딩 중에 선행 인코더 상태의 수량과 안정적인 비트 중 미리 정의된 비트의 수량 사이의 차이가 미리 정의된 임계값 미만인 경우, 후행하는 코딩된 비트는 안정적인 비트 중 미리 정의된 수량의 비트까지 0이 뒤따르는 값이 1인 하나의 비트를 포스트펜딩함으로써 선행 인코더 상태로부터 생성되고, 후행하는 코딩된 비트는 코딩된 비트를 비트스트림에 포함시키기 전에 코딩된 비트에 포함되며, 0인 선행 인코더 상태 비트의 지시가 비트스트림에 포함된다.
따라서, 높은 처리 노력에 대응하는 후행 비트의 수량의 지시와 함께 많은 선행하는 후행 비트의 시그널링이 회피될 수 있다. 대신에, 더 많은 코딩된 비트와 신호 0인 선행하는 후행 비트를 갖기 위한 처리 노력이 적을 수 있다.
예시적인 구현에서, 산술 인코딩은 범위 인코딩이다.
따라서, 산술 인코딩을 사용하는 제한된 레지스터 또는 일반적으로 빠른 메모리 크기를 갖는 하드웨어 및 소프트웨어 아키텍처가 개선될 수 있다.
실시예에 따르면, 비트스트림을 동일한 크기의 복수의 채널의 데이터로 엔트로피 디코딩하는 디코딩 방법이 제공되며, 이 방법은, 제2 서브스트림과 독립적으로 제1 서브스트림을 엔트로피 디코딩하는 단계; 및 제1 서브스트림 및 제2 서브스트림으로부터의 제1 크기의 부분 및 제2 크기의 부분을 동일한 크기의 복수의 채널로 역다중화하는 단계를 포함한다.
각 채널을 개별적으로 인코딩하는 대신에 다른 채널의 부분을 다중화 및 인코딩하면 보다 균일한 길이의 서브스트림을 디코딩할 수 있다. 이것은 복수의 서브스트림에 대해 병렬로 엔트로피 디코딩을 수행할 가능성을 열어준다.
예를 들어, 디코딩 방법은 상이한 크기의 복수의 채널의 데이터를 획득하기 위해 동일한 크기의 복수의 채널을 후처리하는 단계를 더 포함한다.
동일한 크기의 채널에서 임의의 크기의 채널 데이터를 획득하는 옵션은 다양한 종류의 데이터에 대한 방법의 적용 가능성을 향상시킨다.
예시적인 구현에서, 디코딩 방법은 제1 서브스트림의 길이를 지시하는 제1 서브스트림 길이 지시 및 제2 서브스트림의 길이를 지시하는 제2 서브스트림 길이 지시와 함께 비트스트림으로부터 제1 서브스트림 및 제2 서브스트림을 추출하는 단계를 더 포함한다.
비트스트림에서 서브스트림의 길이를 지시하면 다양한 크기의 서브스트림을 제공할 수 있어 보다 유연한 비트스트림 구성이 가능하다.
예시적인 구현에서, 제1 서브스트림 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행하고, 제2 서브스트림 길이 지시는 비트스트림 내에서 제2 서브스트림에 선행한다.
이러한 비트스트림 구조의 장점은 복수의 서브스트림 및 각각의 지시를 버퍼링할 필요 없이 서브스트림의 즉각적인 인코딩 또는 디코딩 가능성일 수 있다.
예를 들어, 제2 서브스트림 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행한다.
서브스트림 앞에 연결된 길이 지시를 제공하면 비트스트림의 개별 부분을 더 빠르게 추출할 수 있다.
예시적인 구현에서, 엔트로피 디코딩은 산술 디코딩이다.
산술 인코딩은 레이트 감소에 기여할 수 있는 효율적인 엔트로피 인코딩이다.
예시적인 구현에서, 디코딩 방법은 제1 서브스트림의 제1 후행 비트의 길이를 지시하는 제1 후행 비트 길이 지시 및 제2 서브스트림의 제2 후행 비트의 길이를 지시하는 제2 후행 비트 길이 지시와 함께 비트스트림으로부터 제1 서브스트림 및 제2 서브스트림을 추출하는 단계를 더 포함한다.
비트스트림에서 서브스트림의 길이를 지시하면 다양한 크기의 서브스트림을 제공할 수 있어 보다 유연한 비트스트림 구성이 가능하다.
예를 들어, 제1 후행 비트 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행하고, 제2 후행 비트 길이 지시는 비트스트림 내에서 제2 서브스트림에 선행한다.
이러한 비트스트림 구조의 장점은 복수의 서브스트림 및 각각의 지시를 버퍼링할 필요 없이 서브스트림을 즉시 디코딩할 수 있다는 것이다.
예를 들어, 제2 후행 비트 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행한다.
이러한 비트스트림 구조는 비트스트림의 개별 부분을 더 빠르게 추출할 수 있는 추가 가능성을 제공한다.
예시적인 구현에서, 제1 후행 비트는 비트스트림 내에서 제1 서브스트림을 뒤따르고, 제2 후행 비트는 비트스트림 내에서 제2 서브스트림을 뒤따른다.
이러한 비트스트림 구조는 다른 서브스트림을 추출하지 않고도 제1 서브스트림과 대응하는 후행 비트를 디코딩할 수 있게 한다.
예를 들어, 제1 후행 비트는 비트스트림 내에서 제2 서브스트림을 뒤따른다.
이러한 비트스트림 구조는 비트스트림에서 후행 비트를 추출하기 전에 개별 서브스트림의 디코딩을 시작할 수 있게 한다.
예시적인 구현에서, 제1 크기는 제2 크기와 동일하다.
동일한 크기의 부분을 사용하면 예를 들어 하드웨어 및 소프트웨어 구현에 적합한 메모리 유닛이 사용될 수 있으므로 보다 효율적인 성능을 얻을 수 있다.
예를 들어, 제1 서브스트림에 포함된 모든 부분 및 제2 서브스트림에 포함된 모든 부분은 복수의 채널의 상기 데이터 심볼의 정수배(K)이고, K는 1보다 크다.
이러한 접근 방식은 소프트웨어 및/또는 하드웨어에서 효율적인 구현을 제공할 수 있다.
예를 들어 심볼은 비트이다.
예시적인 구현에서, 인코딩 방법은 제1 서브스트림 길이 지시, 제2 서브스트림 길이 지시, 제1 후행 비트 길이 지시, 제2 후행 비트 길이 지시, 제1 서브스트림, 제2 서브스트림, 제1 후행 비트 및 제2 후행 비트를 추출한 후 비트스트림의 나머지 비트를 폐기하는 단계를 더 포함한다.
이러한 접근 방식은 예를 들어 네트워크 적응 계층 유닛 또는 기타 패킷으로의 캡슐화와 같은 추가 처리를 위해 적절하게 정렬된 비트스트림을 제공할 수 있다.
예시적인 구현에서, 디코딩 방법은 제1 크기의 부분 및 제2 크기의 부분의 역다중화를 위한 셔플링 방법을 결정하여 적용하는 단계를 더 포함하며, 셔플링 방법은 미리 정의된 셔플링 방법의 세트 중 하나이고, 제1 크기의 부분 및 제2 크기의 부분의 순서를 지정한다.
서브스트림 크기의 보다 균일한 분포를 달성하기 위해 부분이 셔플링될 수 있다.
예를 들어, 셔플링 방법을 결정하는 것은 비트스트림에 포함된 제어 정보에 기초한다.
디코더 측의 부분을 정확하게 셔플링하기 위해, 인코더 측에서 사용되는 셔플링 방법이 비트스트림 내에서 시그널링될 수 있다.
예시적인 구현에서, 엔트로피 디코딩은 제1 엔트로피 디코더로 제1 서브스트림을 디코딩하고 제2 엔트로피 디코더로 제2 서브스트림을 디코딩하는 것을 포함하고, 제1 엔트로피 디코더 및 제2 엔트로피 디코더를 사용한 엔트로피 디코딩은 적어도 부분적으로 병렬로 수행된다.
서브스트림의 병렬 디코딩은 전체 비트스트림의 더 빠른 디코딩을 초래할 수 있다.
예를 들어, 채널은 신경망의 출력 채널 또는 잠재 표현 채널이다.
신경망은 일반적으로 동일한 크기 또는 적어도 고정된 크기의 채널을 제공하며, 이는 위의 실시예 및 예를 이러한 채널에 특히 적합하고 쉽게 적용할 수 있게 한다.
예시적인 구현에서, 엔트로피 디코딩은 산술 디코딩이고, 이 방법은, 제1 서브스트림 또는 제2 서브스트림으로부터의 다중화된 부분의 디코딩을 위해, 후행 비트 길이 지시로부터 선행 인코더 상태 비트의 수량을 추출하는 단계 ― 서브스트림은 코딩된 비트를 포함하고 후행 비트는 선행 인코더 상태 비트임 ―; 추출된 선행 인코더 상태 비트에 인코더 상태 비트의 미리 결정된 최대 길이까지 0을 포스트펜딩하는 것을 포함하는 인코더 상태 비트를 결정하는 단계; 및 코딩된 비트 및 결정된 인코더 상태 비트를 포함하는 비트로부터 다중화된 부분을 산술적으로 디코딩하는 단계를 포함한다.
선행 인코더 상태 비트에서 후행 비트의 재구성은 비트스트림 내의 더 적은 수량의 비트를 사용하여 코딩된 비트 및 후행 비트로부터 디코딩을 제공한다.
예를 들어, 인코더 상태 비트를 결정하는 단계는 추출된 선행 인코더 상태 비트에 인코더 상태 비트의 미리 결정된 최대 길이까지 0이 뒤따르는 값 1을 가진 하나의 비트를 포스트펜드하는 단계를 포함한다.
이러한 접근 방식은 산술 인코더의 전체 출력을 재구성할 수 있게 하여 산술 디코더에 적절한 입력을 제공한다.
예시적인 구현에서, 산술 디코딩은 범위 디코딩이다.
범위 인코딩은 제한된 레지스터 또는 일반적으로 빠른 메모리 크기를 가진 하드웨어 및 소프트웨어 아키텍처에 특히 적합할 수 있다.
예시적인 구현에서, 컴퓨터 프로그램은 비일시적 매체에 저장되고, 하나 이상의 프로세서에서 실행될 때 하나 이상의 프로세서로 하여금 전술한 방법 중 어느 하나의 단계를 실행하게 하는 코드 명령어를 포함한다.
실시예에 따르면, 동일한 크기의 복수의 채널의 데이터를 비트스트림으로 엔트로피 인코딩하는 장치는 처리 회로를 포함하며, 처리 회로는, 복수의 채널의 각 채널로부터의 제1 크기의 부분을 다중화한 다음, 제1 크기의 다중화된 부분을 제1 서브스트림으로 인코딩하며, 복수의 채널의 각 채널로부터의 제2 크기의 부분을 다중화한 다음, 제2 크기의 다중화된 부분을 제2 서브스트림으로 인코딩하도록 구성되며, 인코딩은 제1 서브스트림 및 제2 서브스트림으로 독립적으로 수행되는 엔트로피 인코딩이다.
실시예에 따르면 비트스트림을 동일한 크기의 복수의 채널의 데이터로 엔트로피 디코딩하는 장치는 처리 회로를 포함하며, 처리 회로는, 제2 서브스트림과 독립적으로 제1 서브스트림을 엔트로피 디코딩하고, 제1 서브스트림 및 제2 서브스트림으로부터의 제1 크기의 부분 및 제2 크기의 부분을 동일한 크기의 복수의 채널로 역다중화하도록 구성된다.
이 장치는 전술한 방법의 장점을 제공한다.
본 발명은 하드웨어(hardware, HW) 및/또는 소프트웨어(software, SW) 또는 이들의 조합으로 구현될 수 있다. 또한, HW 기반 구현은 SW 기반 구현과 결합될 수 있다.
하나 이상의 실시예의 세부 사항은 첨부된 도면과 아래 설명에서 개시되어 있다. 다른 특징, 목적 및 이점은 상세한 설명, 도면 및 청구범위로부터 명백해질 것이다.
이하에서, 첨부된 도면을 참조하여 본 발명의 실시예가 보다 상세히 설명된다:
도 1은 산술 코딩으로 2개의 심볼을 갖는 알파벳을 사용하는 메시지의 인코딩을 도시한 개략도이다.
도 2는 8개의 심볼을 갖는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제1 단계의 개략도이다.
도 3은 8개의 심볼을 갖는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제2 단계의 개략도이다.
도 4는 8개의 심볼을 갖는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제3 단계의 개략도이다.
도 5는 8개의 심볼을 갖는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제4 단계의 개략도이다.
도 6은 8개의 심볼을 갖는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 최종 단계의 개략도이다.
도 7a-d는 이진수로 표현된 코딩 단계 동안 범위의 최소값 및 최대값을 도시한 개략도이다.
도 8은 예시적인 산술 디코딩을 도시한 개략도이다.
도 9는 예시적인 인코딩 방법을 도시한 흐름도이다.
도 10은 예시적인 디코딩 방법을 도시한 흐름도이다.
도 11은 픽처 인코딩에서 일부 실시예의 산술 인코딩을 채용하는 것을 나타내는 블록도이다.
도 12는 픽처 디코딩에서 일부 실시예의 산술 인코딩을 채용하는 것을 나타내는 블록도이다.
도 13은 입력 데이터의 채널을 단일 스트림으로 인코딩하는 단일 인코더의 개략도이다.
도 14는 입력 데이터의 채널을 서브스트림으로 인코딩하고 서브스트림을 비트스트림으로 연결하는 다중 코어 인코더의 개략도이다.
도 15는 입력 데이터의 채널을 서브스트림으로 인터리빙 및 인코딩하고 서브스트림을 비트스트림으로 연결하는 다중 코어 인코더의 개략도이다.
도 16은 동일한 리딩 후행 비트의 결정을 도시한 개략도이다.
도 17은 길이 지시, 코딩된 비트 및 리딩 후행 비트를 포함하는 비트스트림의 개략도이다.
도 18은 입력 데이터로부터 동일한 크기의 채널을 얻기 위한 전처리 및 인터리빙되고 인코딩된 서브스트림을 형성하기 위한 셔플링 프로세스의 개략도이다.
도 19는 본 발명의 실시예를 구현하도록 구성된 비디오 코딩 시스템의 예를 도시한 블록도이다.
도 20은 본 발명의 실시예를 구현하도록 구성된 비디오 코딩 시스템의 다른 예를 도시한 블록도이다.
도 21은 인코딩 장치 또는 디코딩 장치의 예를 도시한 블록도이다.
도 22는 인코딩 장치 또는 디코딩 장치의 다른 예를 도시한 블록도이다.
다음의 설명에서, 본 개시의 일부를 형성하고 본 발명의 실시예의 특정 측면 또는 본 발명의 실시예가 사용될 수 있는 특정 측면을 예시로서 보여주는 첨부된 도면을 참조한다. 본 발명의 실시예는 다른 측면에서 사용될 수 있고 도면에 도시되지 않은 구조적 또는 논리적 변화를 포함할 수 있다는 것이 이해된다. 따라서, 이하의 상세한 설명은 제한적인 의미로 받아들여져서는 안되며, 본 발명의 범위는 첨부된 특허청구범위에 의해 정의된다.
예를 들어, 설명된 방법과 관련된 개시 내용은 해당 방법을 수행하도록 구성된 해당 장치 또는 시스템에 대해서도 참일 수 있고 그 반대도 마찬가지라는 것이 이해된다. 예를 들어, 하나 또는 복수의 특정 방법 단계가 기술된 경우, 해당 장치는 하나 이상의 유닛이 도면에 명시적으로 설명되거나 예시되지 않더라도, 설명된 하나 또는 복수의 방법 단계를 수행하기 위한 하나 또는 복수의 유닛, 예를 들어 기능 유닛(예를 들어, 하나 또는 복수의 단계를 수행하는 하나의 유닛, 또는 복수의 단계 중 하나 이상을 각각 수행하는 복수의 유닛)을 포함할 수 있다. 한편, 예를 들어, 특정 장치가 하나 또는 복수의 유닛, 예를 들어 기능 유닛에 기초하여 설명되는 경우, 해당 방법은 하나 또는 복수의 단계가 도면에 명시적으로 기술되거나 예시되지 않더라도, 하나 또는 복수의 유닛의 기능을 수행하기 위한 하나의 단계(예를 들어, 하나 또는 복수의 유닛의 기능을 수행하는 하나의 단계, 또는 복수의 유닛 중 하나 이상의 기능을 각각 수행하는 복수의 단계)를 포함할 수 있다. 또한, 본 명세서에 기술된 다양한 예시적인 실시예의 특징 및/또는 측면은 달리 구체적으로 언급되지 않는 한 서로 조합될 수 있음이 이해된다.
비디오 코딩은 일반적으로 비디오 또는 비디오 시퀀스를 형성하는 픽처의 시퀀스의 처리를 지칭한다. 픽처라는 용어 대신 프레임 또는 이미지라는 용어가 비디오 코딩 분야에서 동의어로 사용될 수 있다. 비디오 코딩은 비디오 인코딩과 비디오 디코딩의 두 부분으로 구성된다. 비디오 인코딩은 소스 측에서 수행되며, 일반적으로 (보다 효율적인 저장 및/또는 전송을 위해) 비디오 픽처를 표현하는 데 필요한 데이터의 수량 줄이기 위해 원래 비디오 픽처를 (예를 들어, 압축에 의해) 처리하는 것을 포함한다. 비디오 디코딩은 목적지 측에서 수행되며 일반적으로 비디오 픽처를 재구성하기 위해 인코더와 비교하여 역처리를 포함한다. 비디오 픽처(또는 일반적으로 나중에 설명되는 픽처)의 "코딩"을 참조하는 실시예는 비디오 픽처의 "인코딩" 및 "디코딩" 모두와 관련된 것으로 이해되어야 한다. 인코딩 부분과 디코딩 부분의 조합은 또한 코덱(COding 및 DECoding, CODEC)으로 지칭된다.
무손실 비디오 코딩의 경우, 원래 비디오 픽처가 재구성될 수 있다. 즉, 재구성된 비디오 픽처는 원래 비디오 픽처와 동일한 품질을 갖는다(저장 또는 전송 중에 전송 오류 또는 기타 데이터 손실이 없다고 가정). 손실 비디오 코딩의 경우, 예를 들어, 양자화에 의한 추가 압축이 디코더에서 완전히 재구성될 수 없는 비디오 픽처를 나타내는 데이터의 수량을 줄이기 위해 수행된다. 즉, 재구성된 비디오 픽처의 품질이 원래 비디오 픽처의 품질에 비해 낮거나 더 나쁘다.
산술 인코딩
엔트로피 코딩은 일반적으로 무손실 코딩으로서 사용된다. 산술 코딩은 메시지를 나타내는 간격(범위) 내에서 메시지를 이진 실수로 인코딩하는 엔트로피 코딩의 한 종류이다. 여기서, 메시지라는 용어는 심볼의 시퀀스를 지칭한다. 심볼은 미리 정의된 심볼의 알파벳 중에서 선택된다. 예를 들어, 알파벳은 0과 1의 두 값으로 구성될 수 있다. 이러한 알파벳을 사용하는 메시지는 비트 시퀀스이다. 심볼(0과 1)은 서로 다른 빈도로 메시지에 나타날 수 있다. 즉, 심볼 확률이 불균일할 수 있다. 실제로, 분포가 덜 균일할수록 일반적으로 엔트로피 코드, 특히 산술 코드에 의해 달성 가능한 압축률이 높아진다. 산술 코딩은 알파벳의 각 심볼에 대한 심볼 확률을 지정하는 선험적으로 알려진 확률 모델을 사용한다.
알파벳은 이진수일 필요가 없다. 오히려, 알파벳은 0 내지 7까지의 8개 값으로 구성될 수 있다. 일반적으로, 임의의 크기의 임의의 알파벳이 사용될 수 있다. 일반적으로, 알파벳은 코딩된 데이터의 값 범위로 주어진다.
메시지를 나타내는 간격은 메시지가 코딩되는 알파벳 심볼의 확률에 따라 초기 범위를 분할함으로써 획득된다.
예를 들어, 현재 간격을 시작에서 초기 간격 [0, 1)이라고 한다. 메시지의 각 심볼에 대해, 다음의 두 단계가 수행된다.
1) 현재 간격을 각 가능한 알파벳 심볼에 대해 하나씩 서브 간격으로 세분한다. 심볼의 서브 간격 크기는 (심볼 소스의) 확률 모델에 따라 심볼이 메시지의 다음 심볼이 될 것으로 추정되는 확률에 비례한다.
2) 메시지에서 다음에 실제로 발생하는 심볼에 대응하는 서브 간격을 선택하고, 선택된 서브 간격을 새로운 현재 간격으로 만든다.
제3 단계로서, 현재 간격을 다른 모든 가능한 간격과 구별하기에 충분한 비트가 출력된다. 이러한 단계는 단계 1과 단계 2의 인코딩 중에 이미 수행되거나, 또는 전체 메시지의 인코딩 후에 수행될 수 있다. 메시지의 모든 심볼에 대해 단계 1) 및 2)를 반복한 후 획득되는 간격의 길이는 개별 심볼의 확률의 곱과 명확하게 동일하며, 이는 메시지의 특정 심볼 시퀀스의 확률이기도 하다.
이론적으로, 산술 코더는 간격을 0에서 1로 재귀적으로 분할하여 임의의 길이의 메시지를 인코딩하므로, 간격이 점점 더 작아진다. 실제로, 시스템은 유한한 비트 깊이로 제한되며 이산 값만이 표현될 수 있다. 따라서, 간격이 작을수록 더 높은 정밀도의 산술이 필요하다. 또한, 전체 메시지가 읽혀질 때까지 출력이 생성되지 않는다. 이러한 두 가지 문제에 대한 해결수단은 일부 비트가 알려지자마자 그들을 출력한 다음 각 출력 비트에 대한 현재 간격의 길이를 두 배로 늘려 간격의 (여전히) 알려지지 않은 부분만을 반영하도록 하는 것이다. 실제로, 산술 연산은 부동 소수점이나 정확한 유리수가 아닌 충분히 긴 정수로 현재 간격을 저장함으로써 수행될 수 있다.
실제 사용을 위해 개선된 산술 코더의 변형은 범위 코더로 지칭되며, 이는 간격 [0,1)을 사용하지 않지만 정수의 유한한 범위, 예를 들어 0에서 255까지를 사용한다. 이러한 범위는 알파벳 심볼의 확률에 따라 분할된다. 모든 알파벳 심볼을 확률에 따라 설명하기 위해 나머지 범위가 너무 작아지면 범위가 다시 정규화될 수 있다.
본 명세서에서 사용되는 용어에 관하여, 현재 간격은 최소값(LOW로 표시됨) 및 최대값(HIGH로 표시됨)으로 주어진다. 간격의 길이는 RANGE로 표시된다. 일반적으로, HIGH = LOW + RANGE이며, RANGE는 최소 크기(구별 가능한) 서브 간격의 수로 표현된다. 심볼 인코딩의 최소 범위는 BOTTOM이다. 이러한 최소 범위는 가능성이 가장 낮은 심볼이 여전히 최소 1의 유효한 범위를 갖도록 보장한다. 즉, BOTTOM은 알파벳 심볼과 해당 확률을 기반으로 결정될 수 있는 설계 파라미터이어서 범위가 여전히 모든 알파벳 심볼에 해당하는 구별 가능한 간격으로 분할될 수 있음을 보장한다.
HIGH 위치는 초기 최대 범위를 커버하는 데 필요한 비트 수량을 지시한다. BOTTOM 위치는 다른 심볼을 인코딩하기 위한 최소 범위를 커버하는 데 필요한 비트 수량을 지시한다. HIGH 위치와 미리 결정된 TOP 위치 사이의 비트의 수량은 비트스트림으로 스트리밍(삽입)될 수 있고 코딩된 비트가 되는 비트의 최소 부분에 대응한다.
도 1은 산술 코딩의 예시적인 절차를 개략적으로 도시한다. 코딩될 메시지는 2개의 가능한 심볼 A와 B를 갖는 알파벳으로 제공된다. 알파벳 {A, B}의 심볼은 확률 P(A)=2/3 및 P(B)=1/3을 갖는다. 인코딩될 메시지는 AABA를 나타낸다.
단계 0은 처음에 LOW=0(단계 0에서 low0 = 0)이기 때문에 여기에서 HIGH에 대응하는 길이 Range0(110)의 초기 간격을 나타낸다. Range0의 하위 절반에서, Range0 내의 숫자의 이진 표현의 선행 비트는 1(111)인 반면, Range0의 상위 절반에서 선행 비트는 0(112)이다. 즉, 초기 범위의 상위 절반에 속하는 경우 단계 중 어느 하나에서의 현재 간격은 제1 선행 비트 0을 갖는 반면, 초기 범위의 하위 절반에 속하는 현재 간격은 제1 선행 비트 1을 가질 것이다. 초기 범위 내의 임의의 숫자(코드 값)는 8비트로 표현 가능하며, 그 범위는 0에서 255까지이므로 HIGH=255일 수 있음이 여기에서 가정된다.
단계 1에서, Range0이 확률에 따라 그리고 제1 심볼 A0을 인코딩하기 위해 분할된다. 본 예에서, 초기 간격은 총 범위 크기의 크기 1/3(122)(심볼 B0에 대응함) 및 2/3(121)(심볼 A0에 대응함)를 갖는 2개의 간격으로 분할된다. 확률에 따라 분할하는 것은 초기 간격이 알파벳의 심볼 개수(여기서는 2개의 심볼 A와 B)와 같은 개수의 서브 간격으로 분할되고 간격의 크기는 간격으로 표현된 심볼의 각 확률에 비례한다는 것을 의미한다. 그런 다음, 메시지 심볼 A0에 대응하는 상위 서브 간격 Range1 = P(A0) * Range0이 다음 단계에 대한 현재 간격으로서 선택된다.
단계 2에서, 심볼 A0의 범위인 Range1(120)은 확률에 따라 분할된다. 다음의 메시지 심볼은 A이다. 메시지 A0A1(131)을 설명하는 나머지 Range2 = P(A1) * Range1은 비트 0으로 인코딩될 Range0의 상위 절반 내에 완전히 있으므로 인코딩된 비트스트림에 비트 0 추가가 수행된다. 구체적으로, 예시적인 구현에서, 비트는 될 수 있는 대로 비트스트림에 추가되고, 해상도를 두 배로 늘리기 위해 재정규화(140)가 수행된다. 현재 최대 범위는 이제 단계 0의 초기 범위의 상위 절반이다. 이러한 현재 최대 범위의 상위 절반은 비트 0에 할당되고 현재 최대 범위의 하위 절반은 비트 1에 할당된다.
단계 3의 메시지 A0A1B2(141)는 Range3이 비트 1(현재 최대 범위의 대응하는 하위 절반)뿐만 아니라 비트 0(현재 최대 범위의 대응하는 상위 절반)과 겹치기 때문에 여전히 명확하게 인코딩될 수 없으므로, 운반(carry)(150)이 수행된다. 아무것도 스트리밍되지 않는다(비트스트림에 비트가 포함되지 않음). Range3은 알파벳 심볼의 확률에 따라 단계 4에서 분할된다.
이제 인코딩될 메시지는 A0A1B2A3(151)을 나타낸다. Range4는 여전히 가능한 두 비트와 겹치고 인코딩할 추가 심볼이 없으므로, 단계 5 및 6에서, 마무리(160)가 수행된다. 이는 메시지 AABA에 대한 명확한 코드 0011을 생성하기 위해 수행되는 몇 가지 재정규화를 포함한다.
도 2 내지 도 7은 표준 정규 분포에 대한 확률 밀도 함수(probability density function, PDF)(230)에 따라 알파벳(220)의 8개 심볼 {0, 1, 2, 3, 4, 5, 6, 7}이 확률을 갖는 범위 인코더에 대한 예를 나타낸다. 심볼은 누적 분포 함수(cumulative distribution function, CDF)(240)에 의해 범위에 매핑된다. 인코딩될 메시지는 4420을 나타낸다. 인코딩을 위한 최대 시작 범위 HIGH는 본 예에서 코드 값 255에 해당하는 8비트로 표시된다. 본 예에서 심볼을 인코딩하기 위한 최소 범위는 BOTTOM=16이다. 이러한 최소 범위는 누적 분포 함수가 적용될 때 확률이 가장 낮은 심볼 "0" 및 "7"도 여전히 최소 1의 유효한 범위를 갖도록 보장한다. 예를 들어, 정규 분포는 8개의 심볼당 가장 작은 간격의 개수인 1, 1, 2, 3, 4, 2, 2, 1을 생성한다.
도 2는 초기 범위(210) Range0 = HIGH = 255 = 1111 1111.b(여기서 .b는 숫자의 이진 표현임)가 가우시안 확률 밀도 함수(PDF)(230)에 따라 알파벳의 심볼(220)에 매핑되는 것을 도시한다. Range0의 분할은 누적 분포 함수(CDF)(240)에서 획득된다. 이는 인코딩될 메시지의 제1 심볼, 즉 "4"가 하위 끝점(250) Low1 = 71 = 0100 0111.b 및 제외된 상위 끝점(260) Low1 + Range1 = 199 = 1100 0111.b를 갖는 간격의 코드 값 중 어느 하나에 의해 표현되며, 이는 Range1 = 128에 대응함을 암시한다. total = const = 16(270)은 작업 정밀도가 1/16임을 의미한다. 이는 가능성이 가장 낮은 심볼에 할당된 서브 범위가 현재 범위의 1/total = 1/16임을 지시한다. total(270)은 누적 분포 함수에 의해 결정된다.
이러한 간격의 이진 표현은 HIGH, TOP 및 BOTTOM 위치의 지시와 함께 도 7a에 표시된다. HIGH 위치(740)는 초기 최대 범위(이 경우 8)를 커버하는 데 필요한 비트 개수를 지시한다. BOTTOM 위치(760)는 다른 심볼(이 경우 4)을 인코딩하기 위한 최소 범위를 커버하는 데 필요한 비트 개수를 지시한다. HIGH 위치(740)와 미리 결정된 TOP 위치(750) 사이의 비트 수량은 비트스트림에 스트리밍(삽입)되어 코딩된 비트가 될 수 있는 비트의 최소 부분에 대응한다. 도 1을 참조하여 위에서 설명된 산술 코딩의 경우, HIGH 위치(740)와 TOP 위치(750) 사이에 단지 1비트가 있다. 본 예의 범위 코딩의 경우, HIGH 위치(740)와 TOP 위치(750) 사이에 2비트가 있다. 도 7a(및 도 7b-7d)에서, 간격(720a-d)의 최소와 간격(710a-d)의 최대는 이진법으로 표현된다. 이것은 실제로 현재 간격과 인코딩의 현재 결과를 저장하기 위해 사용되는 2개의 레지스터에 대응할 수 있다.
도 3에서, 누적 분포 함수(CDF)(340)는 Low1 = 71에서 시작하여 Range1 = 128에 적용되어 알파벳(220)의 심볼을 해당 범위에 매핑한다. 메시지의 다음 심볼은 "4"이다. 이는 메시지 44를 나타내는 새로운 현재 간격(350-360)을 초래한다. 도 7b에 도시된 바와 같은 이러한 간격은 새로운 하한(현재 최소)(720b) Low2 = 106 = 0110 1010.b 및 새로운 상한(현재 최대)(710b) Low2 + Range2 = 170 = 1010 1010.b를 갖는다. 새로운 Range2(320)는 64이다.
도 4 및 도 7c는 인코딩 절차의 다음 단계를 나타낸다. Range2(320)가 여전히 BOTTOM보다 크므로, 이러한 범위는 누적 분포 함수(440)에 따라 다시 분할된다. 이것은 심볼 2에 대해 Low3 = 111 = 0110 1111.b 및 Range3 = 4(410)의 낮은 값(720c)을 생성한다. 따라서, 메시지(442)는 Low3에서 Low3 + Range3 = 115 = 0111 0011.b(710c)까지의 범위로 표시된다.
HIGH 위치와 TOP 위치 사이의 두 비트(730)가 같기 때문에, 이들은 코딩된 비트로서 스트림(731)으로 출력될 수 있으며, 도 7d를 참조한다.
도 5는 Range3 = 4(410)가 BOTTOM = 16보다 작기 때문에 범위에 심볼을 제대로 매핑할 수 없어 재정규화 절차가 필요함을 나타낸다. 도 7d는 새로운 Range4가 BOTTOM보다 크거나 같을 때까지 모든 비트 표현이 좌측으로 쉬프트되는 것을 보여준다. 따라서, 새로운 Range4 = (4<<2) = 16(610)에 도달한다. 새로운 상한(710e)은 좌측으로 두 번 쉬프트된 후 현재(710d)에서 획득된다. 이미 스트림 Low4 = 188 = 1011 1100.b(720d)의 일부인 2개의 코딩된 비트를 제외하고 동일한 쉬프트가 Low3에 적용된다.
메시지(442)는 이제 444 = 01 1011 1100.b와 460 = 01 1100 1100.b 사이의 값 중 하나에 의해 인코딩된다.
도 6은 마지막 심볼 "0"의 인코딩을 나타낸다. 확률 분포는 Low5 = 188 = 1011 1100.b(650) 및 Range5 = 1(620) 간격의 낮은 값을 산출한다. 인코딩될 추가 심볼이 없으므로, Low5 및 Range5는 후행 비트의 범위 간격을 설명하며, 이는 (코딩된 비트와 함께) 인코딩된 메시지를 나타낸다. 일반적으로, 간격으로부터의 임의의 값은 간격 및 코딩된 메시지(심볼 시퀀스)를 나타내기 위해 사용될 수 있다(비트스트림에 포함됨). 따라서, 후행 비트는 이러한 최종 범위 간격에서 임의로 선택될 수 있다. 현재 예에서, Range5 = 1620은 후행 비트에 대한 단일 값, 즉 Low5 = 188 = 10111100.b(650)을 생성한다. 따라서, 메시지 4420은 후행 비트를 코딩된 비트에 추가하여 인코딩됨으로써, 코딩된 값 444 = 01 1011 1100.b를 생성한다.
산술 디코딩
도 8은 예시적인 디코딩 프로세스를 도시한다. 디코더는 코딩된 값(비트)을 순차적으로 수신한다. 수신된 코딩된 값(820)은 전체 Range0 = HIGH = 255(810) 내에 있다. 확률 분포 함수는 디코더 측에서 알려져 있으므로 누적 분포 함수(830)에 의해 심볼(220)을 범위로 매핑한다. 디코더는 이러한 매핑의 역을 알지 못하므로, 심볼의 결정은 검색 프로세스를 필요로 한다. 디코더는 가장 가능성이 높은 심볼 "4"를 선택하여 인코딩된 심볼에 대해 첫 번째 추측(840)을 하고, 이러한 심볼에 대응하는 범위의 Low 값(841)을 계산하며 수신된 코딩된 값(820)이 이러한 Low 값(841)보다 높은지를 확인한다.
수신된 코딩된 값(820)이 첫 번째 추측(840)의 Low 값(841)보다 작기 때문에, 다음 추측(850)은 범위 내의 더 낮은 값에 매핑된 심볼, 즉 심볼 "0", "1", "2" 또는 "3" 중 하나이다. 남은 심볼 간격의 대략 중간에서 Low 값을 선택하면, 정확한 심볼을 획득하는 데 필요한 단계가 줄어들기 때문에 디코딩 프로세스가 더 빨라진다. 본 예에서, 비교를 위해 선택된 다음 Low 값(851)은 심볼 "2"에 대응한다.
심볼 "2"에 대한 테스트는 수신된 코딩된 값이 심볼 "2"를 인코딩하는 범위의 Low(851)보다 높다는 결과를 산출한다. 따라서, 수신된 코딩된 값은 심볼 "2" 또는 "3"을 나타낼 수 있다. 최종 확인(860)은 "3"에 대응하는 범위의 Low 값(861)이 코딩된 값(820)보다 높다는 것을 나타낸다. 따라서, 수신된 코딩된 값(820)은 심볼 "2"로 디코딩된다.
다수의 채널의 엔트로피 코딩
도 13은 단일 인코더(1320)의 방식을 도시한다. 여기서, "단일 인코더"라는 용어는 인코더가 직렬로 작동한다는 사실을 지칭한다. 즉, 병렬이 아닌 순차적으로 입력을 인코딩한다. 입력 데이터는 다수의 채널(1310)로 구성되거나 이를 포함할 수 있다. 이러한 예시적인 인코딩 프로세스에서, 각각의 채널의 일부는 따라서 순차적으로 인코딩된다. 각각의 채널(1330)로부터의 제1 부분 크기의 일부가 인코딩되고(상이한 채널로부터의 동일한 제1 크기의 부분의 다중화를 초래함) 이어서 각각의 채널(1340)로부터의 제2 부분 크기의 일부가 인코딩되어 다른 채널에서 동일한 제2 크기 부분의 다중화를 초래함). 마지막 부분의 인코딩 이후에 인코더에 남아 있는 후행 비트(1350)는 메인 단일 스트림에 포스트펜드된다(post-pended).
단일(또는 단일 코어) 엔트로피 인코더에서, 코딩 끝에 하나의 마무리 단계만 있으며 스트림은 바이트 정렬을 위해 0비트로 채워진다. 몇 가지 추가 비트를 시그널링하는 데 문제가 없다. 그러나, 이러한 인코딩과 이에 상응하는 디코딩도 병렬화하는 것은 어렵다.
도 14는 병렬(예를 들어, 멀티 코어) 인코더(1420)의 예시적인 방식을 도시한다. 각각의 입력 데이터 채널(1410)은 코딩된 비트(1430-1433) 및 후행 비트(1440-1443)를 포함하는 개별 서브스트림으로 인코딩될 수 있다. 서브스트림(1450)에 대한 길이가 시그널링된다.
병렬 처리 구현에서, 비트스트림은 최종 단계에서 연결되는 여러 서브스트림으로 구성된다. 각 서브스트림은 최종화될 필요가 있다. 이는 서브스트림이 서로 독립적으로 인코딩되기 때문에 하나의 서브스트림의 인코딩(및 그에 따른 디코딩도 또한)이 다른 하나 이상의 서브스트림의 이전 인코딩(또는 디코딩)을 필요로 하지 않도록 할 수 있다.
엔트로피 인코딩, 특히 산술 인코딩의 마무리는 하나 이상의 후행 비트로의 인코딩 및/또는 가장 가까운 바이트 경계 또는 미리 정의된 비트 수량으로의 패딩을 포함할 수 있다. 그러나, 다수의 서브스트림이 병렬로 인코딩되는 경우, 패딩으로 인해 엄청난 양의 의미 없는 패딩 비트가 포함될 수 있다. 이러한 문제는 각 스레드의 후행 비트 수량이 가장 가까운 바이트 경계로 반올림되지 않고 후행 비트 중에서 중요한 선행 비트가 결정되고 그 수량이 비트스트림 내에서 지정되면 해결될 수 있다.
이것은 도 15에 예시적으로 도시되어 있으며, 후행 비트(1540-1543)는 코딩된 데이터(1530-1533) 바로 뒤에 오는 비트스트림(1570)에 추가된다. 후행 비트(1560)의 길이도 비트스트림(1570)에 포함된다. 본 예시적인 실시예에서 멀티 코어 인코더는 여러 입력 데이터 채널(1510)의 일부를 복수의 서브스트림으로 인코딩하기 전에 다중화하고 가능하면 셔플링한다.
서브스트림을 생성하기 위한 완전한 부분 다중화는 서브스트림을 인코딩하기 전에 형성될 필요가 없음에 유의한다. 반대로, 엔트로피 인코더는 다른 채널에서 부분을 직접 수신하여 서브스트림으로 처리할 수 있다. 셔플링이라는 용어는 다중화 내(따라서 다중화를 인코딩한 후 서브스트림 내에서도) 부분의 시퀀스(순서)를 지칭한다.
입력 데이터 채널은 신경망에서 일부 데이터를 처리함으로써 획득되는 채널을 지칭할 수 있다. 예를 들어, 입력 데이터는 신경망의 출력 채널 또는 잠재 표현 채널과 같은 특징 채널일 수 있다. 예시적인 구현에서, 신경망은 심층 신경망 및/또는 컨벌루션 신경망 등이다. 신경망은 픽처(정지 또는 이동)를 처리하도록 훈련될 수 있다. 처리는 픽처 인코딩 및 재구성을 위한 것일 수 있거나 또는 객체 인식, 분류, 분할 등과 같은 컴퓨터 비전을 위한 것일 수 있다. 일반적으로, 본 개시는 임의의 특정 종류의 작업 또는 신경망에 제한되지 않는다. 본 개시는 신경망의 인코딩 및 디코딩 채널에 쉽게 적용 가능하지만, 그러한 애플리케이션에 제한되지 않는다. 오히려, 본 개시는 일반적으로 임의의 데이터 소스로 이해되는 복수의 채널로부터 오는 임의의 종류의 데이터를 인코딩하는 데 적용 가능하다. 또한, 채널은 소스 데이터의 전처리에 의해 제공될 수 있다.
도 18은 서로 다른 크기를 갖는 Ch0, Ch1, Ch2 및 Ch3으로 표시되는 입력 데이터 채널(1810)의 전처리를 그들의 대응하는 확률 분포(1820)(ProbCh0, ProbCh1, ProbCh2 및 ProbCh3로 표시됨)와 함께 예시적으로 도시한다. 여기서 크기라는 용어는 채널의 비트, 심볼 또는 엘리먼트의 개수(수량)를 지칭한다. 신경망 채널과 같은 일반적인 채널에서, 수직 및 수평과 같은 더 많은 차원을 가질 수 있지만, 일반적으로 채널 엘리먼트에 대해 직렬(순차적으로) 수행되는 엔트로피 코딩에서 역할을 하지 않는다. 엔트로피 코딩 및 채널 유형에 따라, 인코딩은 채널 비트, 채널 심볼 또는 일반적으로 채널 엘리먼트에 기반할 수 있다(예: 확률 모델이 제공될 수 있음). 그러나, 본 개시는 채널을 하나 이상의 차원에서 동일한 크기의 새로운 채널로 분할하는 데에도 적용될 수 있다.
서로 다른 크기의 이러한 입력 채널(1810)은 동일한 크기(1830)의 채널을 획득하기 위해 전처리된다. 따라서, 필요한 크기보다 큰 입력 채널은 분할(1812)될 수 있다. 도 18에 도시된 바와 같이, 예를 들어, 채널 중 적어도 하나(여기서는 2개의 채널 Ch1 및 Ch2)가 2개의 채널(예: ch0a 및 ch0b, 및 ch2a 및 ch2b)로 분할된다. 분할은 생각할 수 있는 모든 방식으로 발생할 수 있다. 예를 들어, 채널은 n개로 분할된다(n은 연속적인 부분보다 큰 정수이다. 다르게는, 부분은 연속적이지 않고 채널의 각 심볼 또는 각 k개의 심볼을 하나 또는 새로운 채널에 반복적으로 할당하여 형성된다(채널 부분을 새로운 채널로 인터리빙함).
분할된 채널 Ch0 및 Ch2의 대응하는 확률 분포는 동일한 크기의 새로운 채널 ch0a, ch0b, ch2a 및 ch2b에 적응된다. 즉, 새로운 채널(예: ch0a 및 ch0b)은 그들이 추론된 원래 채널(예: Ch0)의 분포와 다른 분포를 가질 수 있다.
채널(예: Ch3)이 상기 동일한 크기보다 작은 경우, 분할 후 동일한 크기의 새로운 채널을 생성하기 위해 0(1813)으로 패딩될 수 있다. 다르게는, 패딩은 분할 후에 수행될 수 있다. 예를 들어, 분할 채널의 마지막 부분이 동일한 크기보다 작으면, 도 18에 도시된 바와 같이 0으로 패딩될 수 있다. 그러나, 패딩은 마지막 새로운 채널에서만 수행될 필요는 없으며, 더 많은 새로운 채널에 삽입될 수 있다. 예를 들어, 새로운 채널 사이에 분포된다.
예를 들어, 채널(Ch0 및 Ch2와 같음)은 n개의 새로운 채널로 분할되어야 하지만, n으로 나누어지지 않는 크기를 가질 수 있다(예를 들어, 도 18의 경우 2로 나누어지지 않음). 이러한 경우, 채널(Ch0 또는 Ch2)의 데이터만으로는 동일한 크기의 n개의 채널을 형성할 수 없다. 이러한 문제를 극복하기 위해, 채널 또는 n개의 새로운 채널 중 하나 이상이 패딩될 수 있다. 일부 예시적인 구현에서 패딩에 대한 추가 이유가 있을 수 있다. 예를 들어, 채널(Ch0 또는 Ch2)의 데이터는 비트 기반이 아닌 그러나 예를 들어 바이트 또는 심볼 또는 기타 크기와 같은 심볼을 기반으로 새로운 채널(ch0a, ch0b, ch2a, ch2b)로 분할될 수 있다. 그런 다음, 비트 단위가 아닌 심볼 단위의 채널 크기가 n으로 분할될 필요가 있을 것이다.
0에 의한 패딩은 하나의 예시적인 옵션일 뿐이다. 패딩은 임의의 값의 비트 또는 심볼로 수행될 수 있다. 채널 비트 또는 심볼 등의 반복에 의해 패딩될 수 있다.
디코더 측에서, 새로운 채널이 디코딩될 것이다. 크기가 다른 채널(예: Ch0, Ch2)을 형성하기 위해, 디코더 측에서 패딩이 제거되어야 한다. 이를 달성하기 위해, 디코더는 이러한 전처리 단계에 관한 정보를 필요로 한다. 예를 들어, 디코더는 크기가 다른 채널(들)의 크기에 대한 지식을 기반으로 패딩을 제거하도록 구성된다. 예를 들어, 채널 크기는 표준에 의해 정의되거나 부가 정보 등에 의해 구성될 수 있다. 전처리 단계에 관한 정보는 또한 새로운 채널의 크기를 포함할 수 있다.
전처리 후, 동일한 크기의 각 채널은 여러 부분으로 분할된다. 제1 단계에서, 제1 크기의 부분(1840)은 각 채널에서 취해지고 이러한 부분(아마도 대응하는 분포와 함께)이 다중화된다. 이러한 다중화는 제1 서브스트림(1530)으로 엔트로피 인코딩된다. 또한, 각각의 채널로부터의 제2 크기의 부분(1841)은 다중화되고 이어서 제2 서브스트림(1531)으로 인코딩된다. 제1 크기 및 제2 크기는 동일하거나 상이할 수 있다. 엔트로피 인코딩은 제1 서브스트림(1530) 생성과 제2 서브스트림(1531) 생성을 위해 별도로 수행된다. 전술한 바와 같이, 채널 부분은 각각의 확률 모델 부가 정보와 함께 다중화될 수 있다. 예시적인 실시예에서, 그러한 부가 정보는 초우선(hyper prior) 서브네트워크를 갖는 변형 자동 인코더에 의해 획득된 초우선에 대응할 수 있다. 그러나, 확률 모델이 채널 부분과 함께 다중화된 부가 정보로서 제공될 필요가 없는 실시예 및 구현이 있을 수 있다. 예를 들어, 확률 모델은 이전에 인코딩 및/또는 디코딩된 데이터 등에 기초하여 상황 적응 방식으로 업데이트될 수 있다.
각 채널을 개별적으로 인코딩하는 대신 다른 채널의 일부를 다중화 및 인코딩하면 예를 들어, 보다 균일한 길이의 서브스트림을 획득하기 위해 완성된 서브스트림을 더 빠르게 생성하고 및/또는 개별 서브스트림의 길이를 제어할 수 있는 확률을 제공한다. 이는 복수의 서브스트림에 대해 병렬로 엔트로피 인코딩 및/또는 엔트로피 디코딩을 수행할 가능성을 열어준다.
본 개시는 동일한 크기의 부분만을 제공하거나 또는 제1 크기 및 제1 크기와 다른 제2 크기의 부분만을 제공하는 것에 한정되지 않는다. 또한, 다른 크기, 예를 들어, 제3 크기(1842) 및/또는 제4 크기(1843)의 부분이 제1 서브스트림 또는 제2 서브스트림으로 포함될 수 있다. 이러한 제3 크기는 제1 크기 또는 제2 크기와 같을 수 있다. 이것은 i번째 채널(chi)이 4개의 부분 portion.i0, portion.i1, portion.i2 및 protion.i3으로 분할되는 도 18에 도시되어 있다. 모든 채널을 같은 크기의 부분으로 분할한 후 다른 채널의 부분을 포함하는 서브스트림을 형성함으로써, 서브스트림의 크기가 제어될 수 있다. 이것은 동적 분할로 지칭될 수 있다.
예를 들어, 개별 서브스트림은 더 많은 부분을 포함하여 길이로 확장될 수 있으며, 여전히 원하는 길이로 조정될 수 있다. 제1 서브스트림과 제2 서브스트림을 형성하는 부분의 다중화가 동일한 크기를 가질 수 있지만, 제1 서브스트림과 제2 서브스트림을 엔트로피 인코딩한 후에는 다른 크기를 가질 수 있다. 따라서, 그들의 분산을 줄이기 위해 예를 들어, 다중화에 포함될 부분의 크기 및/또는 개수를 구성함으로써 서브스트림 크기를 조정하는 것이 바람직할 수 있다. 예를 들어, 더 긴 개별 서브스트림이 더 적은 경우, 더 적은 길이 지시를 시그널링해야 하거나 또는 더 적은 패딩이 필요하다.
엔트로피 인코딩은 산술 인코딩 또는 범위 인코딩일 수 있다. 이러한 경우, 인코딩 결과는 코딩된 비트(1530-1533) 및 (존재하는 경우) 후행 비트(1540-1543)가 된다. 이러한 후행 비트는 마지막 부분을 인코딩한 후 인코더의 상태이다. 본 개시는 코딩된 비트 및 후행 비트를 비트스트림에 개별적으로 임베딩하는 것으로 제한되지 않는다. 모든 비트를 코딩된 비트로서 비트스트림으로 출력하는 인코더가 있을 수 있다. 독립적인 인코딩 및 디코딩에 기반한 본 서브스트림은 이러한 인코더 및 디코더에도 적용 가능하다.
서브스트림은 각각의 서브스트림의 길이를 지시하는 서브스트림 길이 지시(1550)와 함께 비트스트림(1570)으로 다중화된다.
실시예(도 15에 도시된 바와 같음)에서, 서브스트림 길이 지시(1550)는 비트스트림(1570) 내의 각각의 서브스트림에 선행한다. 또한, 제2 서브스트림 길이 지시는 또한 제1 서브스트림(1530)에 선행할 수 있다. 즉, 복수의 서브스트림 길이 지시는 복수의 서브스트림 전에 연결되어 비트스트림(1570)에 포함된다. 복수의 서브스트림은 예를 들어, 하나의 픽처 또는 픽처 부분 또는 미리 결정된 개수의 픽처 또는 채널 데이터의 또 다른 컨테이너에 관한 채널로부터 생성된 서브스트림의 일부 또는 전부일 수 있다. 얼마나 많은 서브스트림이 복수에 포함되는지는 또한 미리 정의된 개수로 구성되거나 고정될 수 있으며, 이는 동일한 크기의 채널 개수에 대응할 필요는 없다.
또한, 후행 비트는 길이 지시와 함께 시그널링될 수 있다. 각 서브스트림에 대한 후행 비트, 즉 제1 후행 비트와 제2 후행 비트가 있다. 따라서, 제1 후행 비트 길이 지시 및 제2 후행 비트 길이 지시가 비트스트림(1570)에 포함될 수 있다. 후행 비트 길이 지시(1560)는 비트스트림(1570) 내의 각각의 서브스트림에 선행할 수 있다. 제2 후행 비트 길이 지시는 또한 제1 서브스트림(1530)에 선행할 수 있다. 따라서, 연결된 후행 비트 길이 지시(1560)는 제1 서브스트림(1530)에 선행한다. 서브스트림 길이 지시(들) 및 후행 비트 길이 지시의 순서는 인코더와 디코더 모두가 비트스트림을 규정에 맞게 형성하고 파싱할 수 있도록 미리 정의되어야 한다.
이러한 모든 길이 지시를 비트스트림에 포함하면 개별 서브스트림 및/또는 후행 비트의 패딩이 방지된다. 특히, 일부 구현에서, 패딩은 복수의 서브스트림 및 대응하는 지시가 비트스트림에 포함된 후에 수행될 수 있다. 그러나, 본 개시는 비트 또는 심볼의 특정 래스터(raster)에 대한 이러한 정렬을 필요로 하지 않는 비트스트림 구조 또는 프로토콜이 있을 수 있기 때문에 패딩을 필요로 하지 않는다.
다수의 서브스트림에 대한 지시를 집중시키는 대신에, 실시예에서, 제1 서브스트림(1540)의 후행 비트는 제1 서브스트림(1530) 다음의 비트스트림에 포함될 수 있고, 제2 서브스트림(1541)의 후행 비트는 비트스트림(1570) 내에서 제2 서브스트림(1531)을 따를 수 있다. 이러한 비트스트림 구조의 장점은 복수의 서브스트림 및 각각의 지시를 버퍼링할 필요 없이 서브스트림의 즉각적인 인코딩 또는 디코딩 가능성일 수 있다. 또한, 제1 후행 비트(1540)는 제2 서브스트림(1531)을 따를 수 있다.
위의 임의의 예시적인 실시예에서와 같이 구성되는 비트스트림(1570)은 바이트, 워드 또는 더블워드 등과 같은 미리 결정된 수량의 비트의 정수배와 일치하도록 비트스트림 길이를 정렬하도록 패딩될 수 있다. 이러한 접근 방식은 예를 들어 네트워크 적응 계층 유닛 또는 기타 패킷으로의 캡슐화와 같은 추가 처리를 위해 적절하게 정렬된 비트스트림을 제공할 수 있다.
복수의 채널(1510)의 데이터는 심볼, 예를 들어 비트로 구성된다. 제1 서브스트림(1530)에 포함된 모든 부분 및 제2 서브스트림(1531)에 포함된 모든 부분은 이들 심볼의 정수배 K일 수 있고, K는 1보다 크다.
이 부분들은 서브스트림 크기의 보다 균일한 분포를 달성하기 위해 셔플링될 수 있다. 셔플링은 도 18을 참조하여 이미 언급되었다. 이것은 인코딩 및 디코딩 측에서 동기적으로 수행되는 부분의 인터리빙에 대응한다. 즉, 인코딩과 디코딩 사이의 준수를 보장하기 위해 인코딩 및 디코딩 측에서 동일한 규칙을 사용한다. 셔플링 방법은 미리 정의된 방법 세트 중에서 선택되고 이어서 제1 크기의 부분과 제2 크기의 부분의 순서를 지정하기 위해 적용된다. 부분(1860)(예를 들어, portion 0a0, portion 0b0, portion 1a0, portion 2a0, portion 2b0 및 portion 3a0)은 동시에 셔플링된다. 도 18의 예시적인 방식은 부분의 순환 순열(cyclic permutation )(1850)을 나타낸다. 또한, 각각의 부분과 연관된 대응하는 확률 분포(1861)(예를 들어, Prob prt.0a0, Prob prt.0b0, Prob prt.1a0, Prob prt.2a0, Prob prt.2b0 및 Prob prt.3a0)는 엔트로피 코딩(예: 산술 코딩)에 적용되어야 한다. 따라서, 부분 및 연관된 확률 부분(모델)은 동기식으로 셔플링된 것으로 볼 수 있다.
셔플링(및 가능하게는 셔플링 방법 선택)은 인코딩된 제1 서브스트림과 인코딩된 제2 서브스트림 사이 ― 일반적으로 시간 경과에 따른 서브스트림 사이 ―의 길이 차이를 줄이기 위해 인코딩될 부분에 대해 반복적으로 수행될 수 있다. 따라서, 셔플링 방법은 현재(예를 들어, 제1 또는 제2) 서브스트림의 길이와 과거 서브스트림의 길이에 따른 통계값 사이의 차이 및/또는 현재 서브스트림의 길이와 과거 서브스트림 길이에 따른 통계값을 고려할 수 있다. 이러한 셔플링 방법은 부분의 임의의 셔플링(1852), 즉 임의의 가능한 재정렬을 초래할 수 있다.
이것은 과거 서브스트림 길이의 분포를 획득하기 위해 과거 서브스트림의 통계 측정값을 수집하는 것을 포함할 수 있다. 이러한 분포는 양쪽이 이전에 동일한 서브스트림을 처리했기 때문에 인코더와 디코더 측에서 동시에 획득되고 사용될 수 있다.
통계값은 예를 들어, 과거 및/또는 현재 서브스트림 길이의 추정된 평균, 중앙값, 최소값 또는 최대값, 또는 서브스트림 길이의 성장 속도, 또는 서브스트림 길이의 감소 속도, 또는 이들의 조합, 또는 다른 통계 측정값(추정기)에 기초할 수 있다.
엔트로피 인코딩이 산술 인코딩인 경우, 셔플링 방법도 산술 인코딩 프로세스에서 범위 간격의 현재 상태를 고려할 수 있다.
범위 간격의 현재 상태는 또한 서브스트림 길이의 세부 정보를 제공할 수 있으며 특정 채널에 기초하여 서브스트림의 성장 속도 추정이 고려될 수 있다. 특히, 범위 간격의 현재 상태가 작은 경우, 서브스트림 길이가 더 크다는 지시이며 그 반대도 마찬가지이다. 이러한 성장 추정을 바탕으로, 적절한 셔플링 방법이 선택될 수 있다.
전술한 바와 같이, 적절한 셔플링은 다음 예에서 설명되는 바와 같이 몇 가지 이점을 제공할 수 있다. 여기서 셔플링이 채널의 원형 회전(순환 순열)일 수 있다고 가정한다. 본 예에서, 세 개의 채널 Ch1, Ch2 및 Ch3이 있으며 각각 다른 성장 속도의 서브스트림 크기(여기서는 길이로도 지칭됨)를 갖는다. 서브스트림은 Ch1에서 부분당 10바이트씩, Ch2에서 부분당 2바이트씩 그리고 Ch3에서 부분당 20바이트씩 성장한다. 따라서, 처음 세 부분을 셔플링 없이 서브스트림 S1, S2 및 S3에 병렬로 인코딩한 후, 다음의 스트림 길이가 달성된다.
- 각 채널의 제1 부분은 Ch1, Ch2, Ch3 순으로 셔플링 없이 인코딩된다. 이것은 각각의 S1, S2 및 S3에 대해 10, 2 및 20바이트의 세 가지 병렬 스트림 크기를 생성한다.
- 제2 부분이 셔플링 없이 인코딩되면, Ch1, Ch2, Ch3의 동일한 순서에서, 3개 채널 각각으로부터의 제2 부분을 포함한 후 20, 4 및 40 바이트의 병렬 스트림 크기가 달성된다.
- 제3 부분이 셔플링 없이 인코딩되면, Ch1, Ch2, Ch3의 동일한 순서에서, 3개 채널 각각으로부터의 제3 부분을 포함한 후 30, 6 및 60의 병렬 스트림 크기가 획득된다.
본 예에서 알 수 있는 바와 같이, 병렬 서브스트림의 길이는 상당히 다르다. 이것은 일부 애플리케이션에서 바람직하지 않을 수 있다. 이러한 상황을 개선하기 위해, 셔플링이 수행될 수 있다. 특히, 각 채널에서 부분이 취해지는 순서가 변경될 수 있다.
동일한 성장 속도로 전술한 바와 같이 동일한 채널 Ch1, Ch2 및 Ch3을 가정할 수 있다. 채널 순서 Ch1, Ch2, Ch3의 순환 쉬프트에 의한 셔플링이 수행되는 경우, 다음과 같은 결과가 획득된다.
- 제1 부분은 위의 예와 같은 순서로 3개의 채널에서 취해진다. 즉, 순서는 Ch1, Ch2, Ch3이다. 그 결과, 10, 2 및 20바이트의 동일한 병렬 스트림 크기가 생성된다.
- 제2 부분은 셔플링된 순서, 특히 순환 쉬프트된 순서(우측으로 하나씩 쉬프트): Ch3, Ch1 및 Ch2로 취해진다. 그 결과, 각 스트림 크기가 30, 12 및 22바이트가 된다. 이러한 스트림 크기는 이전 단계에서 길이가 10, 2 및 20바이트인 스트림에 셔플링된 채널에 해당하는 크기 20, 10 및 2를 추가함으로써 획득된다. 알 수 있는 바와 같이, 제2 부분 이후에, 셔플링 후 크기 30, 12 및 22는 20, 4 및 40바이트를 셔플링하지 않은 이전 예시의 크기보다 더 낮은 분산을 나타낸다.
- 제3 부분은 다시 셔플링된 순서로 취해진다. 본 예에서, 반복된 우측 순환 쉬프트에 의해, 채널 Ch2, Ch3 및 Ch1의 순서가 발생된다. 3개의 병렬 스트림의 결과 스트림 크기는 32, 32 및 32이다. 이러한 크기는 이전 단계(제2 부분 추가)의 스트림 크기 30, 12 및 22바이트에 각각 2, 20 및 10을 더한 결과이다. 알 수 있는 바와 같이, 두 번째 셔플링 후에, 병렬 스트림(위에서 설명한 서브스트림에 대응함)의 길이가 균등화된다.
실제 적용에서, 성장은 그렇게 쉽고 정확하게 예측될 수 없을 수 있다. 특히, 위의 예와 같이 반드시 고정되어 있지는 않다. 그럼에도 불구하고, 셔플링은 서브스트림 길이(크기)의 균등화를 개선할 수 있다. 그러기 위해서는 성장 속도를 추정하는 것이 성능에 기여할 수 있다. 전술한 바와 같이, (인코딩된) 서브스트림의 성장은 이전에 코딩된(디코딩된) 부분 또는 서브스트림에 기초하여 추정될 수 있다. 그러나, 범위 간격의 현재 상태에 의해 훨씬 더 가까운 지시가 제공될 수 있다. 범위 간격이 크면, 서브스트림의 길이가 더 짧고 성장 속도에 기여도가 낮다는 것을 지시한다. 범위 간격이 작으면, 서브스트림의 길이가 더 크게 지시되며, 이는 성장 속도에 대한 기여도가 더 크다는 것에 대응한다. 즉, 범위 간격의 길이는 스트림의 성장 속도에 반비례한다. 비례가 반드시 선형일 필요는 없다.
따라서, 인코딩 및 디코딩 중에 셔플링 메커니즘이 적용될 수 있다. 셔플링은 전술한 바와 유사할 수 있다. 예를 들어, 각 채널의 k번째 부분을 k번째 순서의 채널로 인코딩한 후, 각 채널로부터의 (k+1)번째 부분이 (k-1)번째 순서의 채널로 인코딩된다. 예시적인 구현에서, (k+1)번째 순서는 k번째 순서를 순환 쉬프트함으로써 k번째 순서로부터 획득된다. 순환 쉬프트는 우측 또는 좌측일 수 있다. 1채널씩 쉬프트하는 것이 유리할 수 있다. 그러나, 본 개시는 이에 한정되지 않으며 쉬프트 단계는 1과 다를 수 있다. 이미 전술한 바와 같이, 셔플링 순서가 또한 구체적으로 선택되어 시그널링될 수 있다.
다른 예시적인 실시예에서, 더 긴 길이 및 더 빠른 성장 속도를 갖는 서브스트림으로 인코딩된 채널의 부분은 더 짧은 길이 및 더 낮은 성장 속도를 갖는 서브스트림으로 인코딩되는 채널의 부분과 교환, 즉 셔플링될 수 있다. 특히, 이 방법은 서브스트림의 길이 및 서브스트림의 길이 성장 속도를 결정할 수 있다. 이러한 결정의 결과에 따라 이 방법은 해당 부분을 셔플링한다. 위의 예에서, 이것은 채널 Ch2와 채널 Ch3의 교환에 대응한다. 이러한 교환은 더 빠른 성장 속도(부분당 20바이트)에 기여하는 Ch3의 부분을 더 작은 길이의 서브스트림 S2로 인코딩한다. 더 작은 성장 속도(부분당 5바이트)에 기여하는 Ch2의 부분은 더 큰 길이의 서브스트림 S3으로 인코딩된다. 이것은 S2의 성장을 증가시키고 S3의 성장을 감소시킨다. 따라서, 전술한 인코딩된 서브스트림 간의 길이 차이가 감소될 수 있다. 실제 적용에서, 성장은 위의 예에서와 같이 반드시 정지되지 않을 수 있다.
제1 서브스트림(1530) 및 제2 서브스트림(1531)으로의 엔트로피 인코딩은 예를 들어 도 14 및 도 15의 멀티 코어 인코더(1420, 1520) 중 하나에 의해 병렬로 수행될 수 있다. 일부 구현에서, 엔트로피 인코딩의 일부만이 병렬로 수행될 수 있다.
디코딩 방법은 제1 서브스트림(1530) 및 제2 서브스트림(1531)을 다중화된 부분으로 엔트로피 디코딩하는 것을 포함한다. 엔트로피 디코딩은 제1 서브스트림과 제2 서브스트림에 대해 별도로 수행된다. 복수의 채널(1810)은 제1 크기(1840) 부분과 제2 크기(1841) 부분을 역다중화하는 것으로부터 획득된다. 제1 크기와 제2 크기는 동일할 수 있다. 동일한 크기의 채널(1620)은 서로 다른 크기의 복수의 채널(1810)을 획득하기 위해 후처리될 수 있다. 이러한 후처리는 분할된 채널을 추가(연결)하는 것을 포함한다. 0으로 패딩된 채널은 입력 데이터를 획득하기 위해 클리핑된다(clipped). 즉, 패딩이 제거된다. 이러한 단계에 대한 정보는 동일한 크기의 채널에 포함된다. 모든 크기의 채널은 신경망의 출력 채널 또는 잠재 표현 채널이 될 수 있다.
엔트로피 디코딩은 예를 들어, 위의 산술 인코딩 섹션에 설명된 바와 같이 산술 디코딩 또는 범위 디코딩일 수 있다. 그러나, 서브스트림의 형성에 관한 본 개시는 산술 인코더 및 디코더의 적용에 제한되지 않는다. 오히려, 임의의 엔트로피 코딩 및/또는 런(run) 길이 코딩 등이 채널 데이터에 적용될 수 있다. 엔트로피 코딩은 상황 적응적일 수 있다. 이들 실시예는 전술한 인코딩 예에 대응한다.
서브스트림은 제1 서브스트림의 길이를 지시하는 제1 서브스트림 길이 지시 및 제2 서브스트림의 길이를 지시하는 제2 서브스트림 길이 지시와 함께 비트스트림(1570)으로부터 추출된다. 예를 들어, 추출하기 전에 서브스트림의 길이 지시가 알려져 있는 경우 서브스트림이 추출될 수 있다.
따라서, 서브스트림 길이 지시(1550)는 비트스트림(1570) 내의 각각의 서브스트림에 선행할 수 있다. 또한, 제2 서브스트림 길이 지시는 제1 서브스트림(1530)에 선행할 수도 있다.
서브스트림 전에 연결된 길이 지시를 시그널링함으로써, 디코더는 서브스트림을 동시에 추출할 수 있다.
제1 후행 비트의 길이를 지시하는 제1 후행 비트 길이 지시 및 제2 후행 비트의 길이를 지시하는 제2 후행 비트 길이 지시가 비트스트림(1570)에서 추출될 수 있다. 후행 비트 길이 지시(1560)는 비트스트림(1570) 내에서 각각의 서브스트림에 선행할 수 있다. 제2 후행 비트 길이 지시는 또한 제1 서브스트림(1530)에 선행할 수 있다.
제1 서브스트림(1540)의 후행 비트는 제1 서브스트림(1530)에 후속하는 비트스트림에 포함될 수 있고, 제2 서브스트림(1541)의 후행 비트는 비트스트림(1570) 내에서 제2 서브스트림(1531)에 후속할 수 있다. 또한, 제1 후행 비트(1540)는 제2 서브스트림(1531)에 후속할 수 있다.
복수의 채널(1510)의 데이터는 비트일 수 있는 심볼로 구성된다. 제1 서브스트림(1530)으로부터 디코딩되고 역다중화된 모든 부분 및 제2 서브스트림(1531)으로부터 디코딩되고 역다중화된 모든 부분은 이들 심볼의 정수배 K일 수 있고, K는 1보다 크다.
제1 서브스트림 길이 지시, 제2 서브스트림 길이 지시, 제1 후행 비트 길이 지시, 제2 후행 비트 길이 지시, 제1 서브스트림(1530), 제2 서브스트림(1531), 제1 후행 비트(1541) 및 제2 후행 비트(1541)를 추출한 후, 남은 비트가 있을 수 있다. 마지막 후행 비트 추출 후 비트스트림(1570)에 남는 비트는 예를 들어, 네트워크 적응 계층 유닛 또는 기타 패킷으로의 캡슐화와 같은 추가 처리를 위해 적절하게 정렬된 비트스트림을 제공하기 위해 미리 결정된 개수의 비트의 정수와 일치하도록 전체 비트스트림(1570)을 패딩한 결과이다. 나머지 비트는 폐기될 수 있다.
인코딩 프로세스에서 부분을 다중화하는 중에, 셔플링 방법이 적용될 수 있다. 예를 들어, 이러한 방법은 비트스트림에 포함된 제어 정보 내에서 시그널링된다. 따라서, 디코더는 비트스트림으로부터 셔플링 방법 지시를 파싱할 수 있다. 이 지시는 예를 들어 표준에 의해 정의되거나 표준에 따라 구성 가능하고 가능하게는 셔플링 방법 지시 자체보다 덜 자주 비트스트림에서 시그널할 수 있는 셔플링 방법 목록에 대한 인덱스일 수 있다.
따라서, 셔플링 방법은 미리 정의된 셔플링 방법의 세트로부터 결정될 수 있고 제1 크기의 부분(1840)과 제2 크기의 부분(1841)의 역다중화를 위해 적용될 수 있다. 셔플링 방법은 서브스트림 내의 부분 순서를 지정한다. 또한, 셔플링 방법은 부분 길이가 변할 수 있는 예시적인 구현에서 서브스트림 부분의 길이를 정의할 수도 있다. 일부 실시예에서, 부분 길이는 채널에 걸쳐 및/또는 서브스트림에 걸쳐 동일할 수 있다.
엔트로피 디코딩은 예를 들어 멀티 코어 디코더에 의해 병렬로 수행될 수 있다. 또한, 엔트로피 디코딩의 일부만이 병렬로 수행될 수 있다.
후행(trailing) 비트 처리
도 9는 비트스트림(1750)으로의 입력 데이터의 산술 코딩을 위한 예시적인 방법을 도시한 흐름도이다. 인코딩된 비트스트림(1750)에 대한 예가 도 17에서 주어진다.
이 방법은 인코더에 의해 사용되는 초기 범위를 초기화할 수 있다(S910). 예를 들어, 그러한 초기 범위는 전술한 바와 같이 도 2의 초기 범위(210)에 대응할 수 있다. 인코딩은 인코딩될 메시지의 제1 심볼로 시작하여 메시지의 모든 심볼을 거쳐 코딩된 비트를 획득한다.
단계 S920에서, 메시지로부터의 현재 심볼은 예를 들어 도 2 내지 도 7을 참조하여 설명된 바와 같이 산술 코드로 코딩된다.
코딩 루프 S920-S950 이후에, 코딩된 비트는 비트스트림(1570)에 포함된다. 그러나, 레지스터에는 인코더의 상태를 지시하는 후행 비트가 여전히 남아 있다. 후행 비트를 설명하는 간격은 마지막 심볼을 인코딩하고 코딩된 비트(1730-1731)를 스트리밍한 후에 남아 있는 현재 범위이다. 산술적으로 코딩된 데이터를 코딩된 비트(1730-1731)와 함께 형성하는 후행 비트는 일반적으로 이러한 간격으로부터 임의로 선택될 수 있다.
그러나, 후행 비트는 선행하는 후행 비트 내에서 후행하는 0의 수량을 최대화하는 방식으로 선택될 수 있다. 이러한 후행하는 0은 비트스트림(1750)에 포함되지 않을 수 있으므로 클리핑될 수 있다.
이러한 간격의 결정된 최소값과 최대값(S960)은 동일한 수량의 최상위 비트(Most Significant Bit, MSB)를 포함할 수 있다. 이러한 동일한 선행 비트는 연속적인 후행 비트이다. 즉 그들은 연속적인 후행 비트 세트를 형성한다. 이들 선행하는 후행 비트(1740-1741)의 수량은 S970에서 결정될 수 있다.
이러한 동일한 선행 비트 및 선행하는 후행 비트의 결정된 수량의 지시는 비트스트림(S980)에 포함될 수 있다.
선행하는 후행 비트의 수량인 NumTrailingBits는,
NumTrailingBits = CLZ((LOW + RANGE - 1) XOR LOW)
에 의해 결정되며,
여기서 CLZ()는 선행하는 0의 카운트이고, LOW는 간격의 최소값이며, RANGE는 간격의 범위이다. XOR은 배타적 논리 OR 연산을 나타낸다.
동일한 선행 비트(1740-1741) 및 그 수량의 결정에 대한 예가 도 16에 도시되어 있다. 마지막 심볼을 인코딩하고 코딩된 비트(1730-1731)를 비트스트림(1750)에 포함시킨 후, 인코더 내에 남아 있는 16개의 후행 비트가 있다. 후행 비트는 현재 최소값(1610) Low = 1123 및 현재 간격의 범위(1620), Range = 67로 표시된다.
도 16에서, 이러한 값은 이진 표현으로 주어진다. 현재 최대값(1630) High - 1 = (Low + Range - 1) = (1123+67-1)은 현재 최소값(1610)과 현재 범위(1620)로부터 결정된다.
(High - 1) XOR Low(1640)는 LOW(1610)와 HIGH-1(1630)의 비트가 동일한 위치에 0비트를 생성하고 그렇지 않으면 비트 1을 생성한다.
이러한 값(1640) 내의 선행하는 0은 후행 비트 내의 동일한 선행 비트를 지시한다. 따라서, 선행하는 0 CLZ()의 카운트는 CLZ((low + range - 1) XOR low)=8이 된다.
본 예에서, 8개의 동일한 선행 비트가 있다. 현재 간격 내의 후행 비트(1650)는 Low와 High-1이 다른 제1 비트 이후의 모든 비트를 0으로 하여 Low와 High-1 사이의 값으로 선택되므로, 0b.0000.0100.1000.0000(1650)에 도달한다.
전술한 바와 같이, 후행하는 제로(1680)는 Low 및 High-1에서 상이한 제1 비트인 비트 1(1670)과 함께 클리핑될 수 있는데, 이는 이러한 비트가 항상 1이고 시그널링될 필요가 없기 때문이다. 따라서, 본 예에서 선행하는 후행 비트(1660)는 8비트 0000 0100으로 형성된다.
결정된 선행하는 0의 개수는 선행 비트의 수량의 지시에 포함된다. 이러한 지시는 비트스트림(1750) 내에서 코딩된 비트(1730-1731) 및 선행하는 후행 비트(1740-1741)보다 선행한다(1720).
그러나, 선행하는 후행 비트(1740-1741)는 값 1을 갖는 비트(1670)와 함께 비트스트림(1570)에 포함될 수 있으며, 이는 선행하는 후행 비트(1660) 바로 다음에 추가된다. 이러한 포스트펜드된(postpended) 비트는 Low와 High-1에서 상이한 제1 비트이다. 선행하는 후행 비트(1720)의 수량의 지시는 이 경우에 추가 비트 1을 포함한다.
산술 인코딩 방법은 다수의 서브스트림에 대해 개별적으로 수행될 수 있다. 예시적인 실시예가 도 14에서 주어진다. 전술한 방법은 제1 서브스트림 및 제2 서브스트림에 예시적으로 적용되어 제1 코딩된 비트(1430a), 제2 코딩된 비트(1431), 제1 선행하는 후행 비트(1440a) 및 제2 선행하는 후행 비트(1441)를 생성한다. 비트스트림(1750)은 도 17에 개략적으로 도시된 바와 같이 제1 선행하는 후행 비트(1740) 및 제2 선행하는 후행 비트(1741)가 뒤따르는 제1 코딩된 비트(1730) 및 제2 코딩된 비트(1731)를 비트스트림(1750)에 삽입함으로써 이들 조각으로 형성된다. 제1 선행하는 후행 비트(1740)는 제2 코딩된 비트(1731)를 직접 따르며, 패딩이 필요하지 않다.
제1 및 제2 서브스트림으로부터 형성되는 비트스트림(1750)은 또한 제1 코딩된 비트(1710) 및 제2 코딩된 비트(1711)에 대한 길이 지시를 포함할 수 있다. 이러한 제1 및 제2 길이 지시(1710-1711)는 비트스트림(1750) 내의 각각의 코딩된 비트(1730-1731)에 선행할 수 있다.
또한, 제2 길이 지시(1711)는 또한 제1 코딩된 비트(1730)에 선행할 수 있다. 이것은 도 17에 예시적으로 도시되어 있다. 길이 지시(1710-1711)는 각각의 코딩된 비트(1730-1731)에 대해 연결되고 코딩된 비트(1730-1731) 전에 비트스트림에 포함된다.
제2 선행하는 후행 비트(1721)의 수량의 지시는 비트스트림(1750) 내에서 제1 코딩된 비트(1730)에 선행할 수 있다. 도 17의 예는 제1 코딩된 비트(1730-1731) 바로 뒤에 오는 연결된 지시(1720-1721)를 포함한다.
위의 임의의 예시적인 실시예에서와 같이 함께 결합된 비트스트림(1750)은 미리 결정된 바이트 수량의 정수배와 일치하도록 비트스트림 길이를 정렬하기 위해 패딩될 수 있으며, 예를 들어 이것은 워드 또는 더블워드일 수 있다.
제1 및 제2 서브스트림의 산술 인코딩은 예를 들어 도 14 및 도 15의 멀티 코어 인코더(1420, 1520) 중 하나에 의해 병렬로 수행될 수 있다. 일부 구현에서, 산술 인코딩의 일부만이 병렬로 수행될 수 있다.
위에서 언급된 바와 같이 산술 인코딩 방법은 범위 인코딩으로서 구현될 수 있다. 이러한 범위 코딩은 미리 정의된 전체 범위를 가질 수 있고, 미리 구성된 메모리 크기는 전체 범위를 나타내는 비트 개수(전체 범위의 log_2)보다 크거나 같다.
메모리는 현재 범위 간격의 최소값과 최대값을 보유할 수 있다. 예를 들어, 유한 레지스터의 이러한 최소값은 도 7a-d의 이진 표현(720c)에 대응할 수 있고, 유한 레지스터의 이러한 최대값은 이진 표현(710c)을 가질 수 있다. 인코딩 루프를 한 번 이상 반복한 후, 현재 최소값과 현재 최대값의 이진 표현의 MSB에서 동일한 값을 갖는 연속 비트인 안정적인 비트가 있을 수 있다. 이러한 안정적인 비트의 미리 결정된 수량은 메모리에서 비트스트림으로 이동된다. 이것은 예를 들어 도 7a-d에서 HIGH와 TOP 위치 사이의 2비트에 해당한다. 예시적인 구현에서, HIGH와 TOP 위치 사이에는 16비트가 있을 수 있다. 본 발명은 이러한 예에 제한되지 않는다.
선행하는 후행 비트의 수량과 HIGH 위치와 TOP 위치 사이의 안정적인 비트 중 미리 정의된 비트 수량 사이의 차이가 미리 정의된 임계값 미만일 수 있다. 예를 들어, HIGH와 TOP 위치 사이에는 16 비트가 있을 수 있고 15개의 선행하는 후행 비트일 수 있다. 이 경우, 선행하는 후행 비트를 코딩된 비트에 포함시키는 것이 더 효율적이다. 따라서, 선행하는 후행 비트에서 후행 코딩된 비트가 생성된다. 비트 1(1670)은 선행하는 후행 비트(1660)에 추가되어야 하고 비트는 안정적인 비트의 미리 정의된 개수에 도달하기 위해 0으로 패딩될 수 있다. 따라서, 후행 비트 수량의 지시와 함께 많은 선행하는 후행 비트의 값비싼 시그널링이 회피된다. 예를 들어, 15개의 선행하는 후행 비트를 시그널링하기 위해 최소 4비트가 필요하다. 대신에, 더 많은 코딩된 비트와 신호 0 선행하는 후행 비트를 갖는 것이 더 저렴할 수 있다. 그것들은 예를 들어, 자주 발생하는 경우 효율적으로 인코딩될 수 있다.
위에서 언급된 미리 정의된 임계값은 경험적으로 결정될 수 있다. 예를 들어, HIGH와 TOP 위치 사이의 비트 수량과 선행하는 후행 비트의 길이를 지시하는 데 사용되는 시그널링의 수량을 고려한다.
도 10은 비트스트림(1750)으로부터 데이터의 산술 디코딩을 위한 예시적인 방법을 도시하는 흐름도이다. 디코더는 코딩된 비트의 길이의 지시가 추출(S1020)될 수 있는 비트스트림을 수신한다(S1010). 코딩된 비트(1730-1731)는 비트스트림으로부터 추출되고 연속적으로 디코딩된다(S1040-S1060). 모든 코딩된 비트가 디코딩될 때, 선행하는 후행 비트(1740-1741)는 또한 비트스트림으로부터 추출될 수 있는 그들의 수량 지시(1720-1721)(S1030)에 따라 추출된다(S1070). 선행하는 후행 비트(1660)로부터, 전체 후행 비트(1650)가 디코딩되기 위해 복원될 필요가 있다(S1080). 선행하는 후행 비트(1660)는 후행 비트의 미리 정의된 최대 길이까지 0으로 패딩된다. 복원된 후행 비트는 디코딩될 수 있다(S1090).
또 다른 예시적인 구현은 사용 가능한 메모리가 충분하면 디코딩 전에 전체 서브스트림이 형성될 수 있다는 것이다. 코딩된 비트와 선행하는 후행 비트는 비트스트림에서 추출된다. 후행 비트는 위에서 설명한 대로 복원할 수 있다. 서브스트림에 대한 코딩된 비트 및 결정된 후행 비트. 전체 서브스트림은 이후에 디코딩된다.
그러나, 본 발명은 이러한 예시적인 구현에 제한되지 않는다.
후행 비트(1650) 내에서 동일한 선행 비트(1660) 다음에 오는 비트 1(1670)이 시그널링되지 않은 경우, 후행 비트의 결정 프로세스에 포함되어야 한다. 패딩(1680) 전에 비트 1(1670)이 선행하는 후행 비트(1660)에 추가된다.
선행하는 후행 비트(1720-1721)의 수량의 지시는 선행하는 후행 비트(1740-1741)뿐만 아니라 비트스트림(1750) 내의 코딩된 비트(1730-1731)에도 선행할 수 있다.
산술 복호화 방법은 다수의 서브스트림에 대해 개별적으로 수행될 수도 있다. 디코딩을 위한 개별 서브스트림을 복원하기 위해, 제1 선행하는 후행 비트(1740) 및 제2 선행하는 후행 비트(1741)가 뒤따르는 제1 코딩된 비트(1730) 및 제2 코딩된 비트(1731)가 추출된다. 제1 코딩된 비트(1730) 및 제1 선행하는 후행 비트(1740)는 제1 서브스트림을 형성하고, 제2 코딩된 비트(1731) 및 제2 선행하는 후행 비트(1741)는 제2 서브스트림을 형성한다. 각 서브스트림에 대해, 후행 비트는 단일 서브스트림에 대해 위에서 설명한 대로 결정된다. 각 서브스트림은 개별적으로 디코딩된다.
제1 코딩된 비트(1730) 및 제2 코딩된 비트(1731)는 제1 길이 지시(1710) 및 제2 길이 지시(1720)로 불리는 각각의 길이에 대한 지시와 함께 추출될 수 있다.
코딩된 비트(1710)의 제1 길이 지시는 비트스트림(1750) 내의 제1 코딩된 비트(1730)에 선행할 수 있고, 제2 길이 지시(1711)는 제2 코딩된 비트(1731)에 선행할 수 있다. 또한, 제2 길이 지시(1711)는 또한 제1 코딩된 비트(1730)에 선행할 수 있다.
제2 후행 비트(1721)의 수량의 지시는 또한 제1 코딩된 비트(1730)에 선행할 수 있다.
제1 코딩된 비트(1730), 제2 코딩된 비트(1731), 제1 선행하는 후행 비트(1740) 및 제2 선행하는 후행 비트(1741)를 추출한 후 폐기될 수 있는 나머지 비트가 있을 수 있다. 마지막 후행 비트 추출 후 비트스트림(1750)에 남아있는 비트는 전체 비트스트림(1750)을 미리 결정된 개수의 비트의 정수와 일치하도록 패딩한 결과이다.
산술 디코딩은 예를 들어 멀티 코어 디코더에 의해 병렬로 수행될 수 있다. 또한, 산술 디코딩의 일부만이 병렬로 수행될 수도 있다.
산술 디코딩 방법은 범위 인코딩로 구현될 수 있다.
본 개시의 산술 코딩은 신경망의 특징 맵의 인코딩 또는 고전적인 픽처(스틸 또는 비디오) 인코딩 및 디코딩에 쉽게 적용될 수 있다. 신경망은 임의의 목적을 위해, 특히 인코딩 및 디코딩 또는 픽처(스틸 또는 동영상)에 대해, 또는 모션 흐름 또는 모션 벡터 또는 기타 파라미터와 같은 픽처 관련 데이터의 인코딩 및 디코딩을 위해 사용될 수 있다. 신경망은 또한 이미지 분류, 깊이 검출, 분할 맵 결정, 식별의 객체 인식 등과 같은 컴퓨터 비전 애플리케이션에도 사용될 수 있다.
상기 섹션에서 설명된 다수의 채널의 엔트로피 코딩 방법은 본 섹션에서 설명되는 후행 비트 처리와 결합될 수 있다. 제1 및 제2 서브스트림은 각각 제1 및 제2 코딩된 비트에 의해 형성되며, 이는 다중화되고 인코딩된 부분을 포함한다. "다수의 채널의 엔트로피 코딩"에서 언급되는 후행 비트는 선행 인코더 상태 비트인 선행하는 후행 비트에 대응될 수 있다. 선행 인코더 상태 비트의 결정된 수량은 후행 비트 길이 지시 내에서 지시된다.
픽처 코딩 내의 구현
하나의 가능한 배치는 도 11 및 12에서 볼 수 있다.
도 11은 본 출원의 기술을 구현하도록 구성된 예시적인 비디오 인코더(20)의 개략적인 블록도를 도시한다. 도 11의 예에서, 비디오 인코더(20)는 입력(201)(또는 입력 인터페이스(201)), 잔차 계산 유닛(204), 변환 처리 유닛(206), 양자화 유닛(208), 역양자화 유닛(210) 및 역변환 처리 유닛(212), 재구성 유닛(214), 루프 필터 유닛(220), 디코딩된 픽처 버퍼(decoded picture buffer, DPB)(230), 모드 선택 유닛(260), 엔트로피 인코딩 유닛(270) 및 출력(272)(또는 출력 인터페이스(272))를 포함한다. 엔트로피 코딩(270)은 전술한 바와 같은 산술 코딩 방법 또는 장치를 구현할 수 있다.
모드 선택 유닛(260)은 인터 예측 유닛(244), 인트라 예측 유닛(254) 및 분할 유닛(262)을 포함할 수 있다. 인터 예측 유닛(244)은 모션 추정 유닛 및 모션 보상 유닛(도시되지 않음)을 포함할 수 있다. 도 11에 도시된 바와 같이 비디오 인코더(20)는 또한 하이브리드 비디오 인코더 또는 하이브리드 비디오 코덱에 따른 비디오 인코더로 지칭될 수 있다.
인코더(20)는 예를 들어, 입력(201)을 통해, 픽처(17)(또는 픽처 데이터(17)), 예를 들어, 비디오 또는 비디오 시퀀스를 형성하는 픽처 시퀀스의 픽처를 수신하도록 구성될 수 있다. 수신된 픽처 또는 픽처 데이터는 또한 전처리된 픽처(19)(또는 전처리된 픽처 데이터(19))일 수 있다. 간단하게 하기 위해, 다음의 설명은 픽처(17)를 참조한다. 픽처(17)는 현재 픽처 또는 코딩될 픽처(특히, 현재 픽처를 다른 픽처와 구별하기 위한 비디오 코딩에서, 예를 들어 동일한 비디오 시퀀스, 즉 또한 현재 픽처를 포함하는 비디오 시퀀스의 이전에 인코딩된 그리고/또는 디코딩된 픽처)로 지칭될 수 있다,
(디지털) 픽처는 강도(intensity) 값이 있는 2차원 어레이 또는 샘플 매트릭스로 간주되거나 간주될 수 있다. 어레이의 샘플은 또한 픽셀(픽처 엘리먼트의 짧은 형태) 또는 펠(pel)로서 지칭될 수 있다. 어레이 또는 픽처의 수평 및 수직 방향(또는 축)에 있는 샘플의 개수는 픽처의 크기 및/또는 해상도를 정의한다. 컬러 표현을 위해, 일반적으로 세 가지 컬러 성분이 사용된다. 즉, 픽처는 세 가지 샘플 어레이로 표현되거나 포함할 수 있다. RBG 포맷 또는 컬러 공간에서, 픽처는 대응하는 빨강, 초록 및 파랑 샘플 어레이를 포함한다. 그러나, 비디오 코딩에서 각각의 픽셀은 일반적으로 휘도 및 색차 포맷 또는 컬러 공간, 예를 들어 Y로 지시된 휘도 성분(때로는 대신 L이 사용됨)과 Cb 및 Cr로 지시된 두 개의 색차 성분을 포함하는 YCbCr로 표현된다. 휘도(또는 짧게는 루마(luma)) 성분 Y는 밝기 또는 그레이 레벨 강도(예를 들어, 그레이 스케일 픽처에서와 같음)를 나타내는 반면, 두 가지 색차(또는 짧게는 크로마(chroma)) 성분 Cb 및 Cr은 색도 또는 컬러 정보 성분을 나타낸다. 따라서, YCbCr 포맷의 픽처는 휘도 샘플 값(Y)의 휘도 샘플 어레이와 색차 값(Cb 및 Cr)의 두 개의 색차 샘플 어레이를 포함한다. RGB 포맷의 픽처는 YCbCr 포맷으로 변경되거나 변환될 수 있으며 그 반대의 경우도 마찬가지이며, 그 프로세스는 또한 컬러 변환 또는 변경으로서 알려져 있다. 픽처가 단색이면, 픽처는 휘도 샘플 어레이만 포함할 수 있다. 따라서, 픽처는 예를 들어 단색 포맷의 루마 샘플 어레이 또는 루마 샘플 어레이와 4:2:0, 4:2:2 및 4:4:4 컬러 포맷의 두 개의 대응하는 크로마 샘플 어레이일 수 있다.
비디오 인코더(20)의 실시예는 픽처(17)를 복수의(전형적으로 중첩되지 않는) 픽처 블록(203)으로 분할하도록 구성된 픽처 분할 유닛(도 11에 도시되지 않음)을 포함할 수 있다. 이러한 블록은 또한 루트 블록, 매크로 블록(H.264/AVC) 또는 코딩 트리 블록(coding tree block, CTB) 또는 코딩 트리 유닛(coding tree unit, CTU)(H.265/HEVC 및 VVC)으로서 지칭될 수 있다. 픽처 분할 유닛은 비디오 시퀀스의 모든 픽처 및 블록 크기를 정의하는 대응하는 그리드에 대해 동일한 블록 크기를 사용하거나, 또는 픽처 또는 픽처의 서브 세트 또는 그룹 사이의 블록 크기를 변경하고 각각의 픽처를 대응하는 블록으로 분할하도록 구성될 수 있다. 약어 AVC는 고급 비디오 코딩(Advanced Video Coding)을 나타낸다.
추가 실시예에서, 비디오 인코더는 픽처(17)의 블록(203), 예를 들어, 픽처(17)를 형성하는 하나, 몇몇개 또는 모든 블록을 직접 수신하도록 구성될 수 있다. 픽처 블록(203)은 또한 현재 픽처 블록 또는 코딩될 픽처 블록으로 지칭될 수 있다.
픽처(17)와 같이, 픽처 블록(203)은 픽처(17)보다 작은 차원이지만 강도 값(샘플 값)을 갖는 2차원 어레이 또는 샘플의 매트릭스로 다시 간주되거나 간주될 수 있다. 즉, 블록(203)은 예를 들어, 하나의 샘플 어레이(예를 들어, 단색 픽처(17)의 경우 루마 어레이, 컬러 픽처의 경우 루마 또는 크로마 어레이) 또는 3개의 샘플 어레이(예를 들어, 컬러 픽처(17)의 경우 루마 및 두 개의 크로마 어레이) 또는 적용된 컬러 포맷에 따라 다른 임의의 다른 개수 및/또는 종류의 어레이를 포함할 수 있다. 블록(203)의 수평 및 수직 방향(또는 축)의 샘플의 개수는 블록(203)의 크기를 정의한다. 따라서, 블록은 예를 들어 샘플의 MxN(M열 × N행) 어레이 또는 변환 계수의 MxN 어레이일 수 있다.
도 11에 도시된 비디오 인코더(20)의 실시예는 블록 단위로 픽처(17)를 인코딩하도록 구성될 수 있다. 예를 들어, 인코딩 및 예측은 블록(203)마다 수행된다.
도 11 도시된 바와 같은 비디오 인코더(20)의 실시예는 슬라이스(비디오 슬라이스로도 지칭됨)를 사용하여 픽처를 분할하고 및/또는 인코딩하도록 추가로 구성될 수 있으며, 여기서 픽처는 하나 이상의 슬라이스(일반적으로 비 중첩)를 사용하여 분할되거나 또는 인코딩될 수 있고, 각각의 슬라이스는 하나 이상의 블록(예를 들어, CTU)을 포함할 수 있다.
도 11에 도시된 바와 같은 비디오 인코더(20)의 실시예는 타일 그룹(비디오 타일 그룹으로도 지칭됨) 및/또는 타일(비디오 타일로도 지칭됨)을 사용하여 픽처를 분할하고 및/또는 인코딩하도록 추가로 구성될 수 있으며, 여기서 픽처는 하나 이상의 타일 그룹(일반적으로 비 중첩)을 사용하여 분할되거나 또는 인코딩될 수 있고, 각각의 타일 그룹은 예를 들어 하나 이상의 블록(예를 들어, CTU) 또는 하나 이상의 타일을 포함할 수 있으며, 각각의 타일은 예를 들어 직사각형 형상일 수 있고, 하나 이상의 블록(예를 들어, CTU), 예를 들어 완전하거나 또는 단편 블록을 포함할 수 있다.
도 12는 본 출원의 기술을 구현하도록 구성된 비디오 디코더(30)의 예를 도시한다. 비디오 디코더(30)는 예를 들어 디코딩된 픽처(331)을 획득하기 위해 인코더(20)에 의해 인코딩된, 인코딩된 픽처 데이터(21)(예를 들어 인코딩된 비트스트림(21))를 수신하도록 구성된다. 인코딩된 픽처 데이터 또는 비트스트림은 인코딩된 픽처 데이터를 디코딩하기 위한 정보, 예를 들어, 인코딩된 비디오 슬라이스(및/또는 타일 그룹 또는 타일) 및 연관된 신택스 엘리먼트의 픽처 블록을 나타내는 데이터를 포함한다.
엔트로피 디코딩 유닛(304)은 비트스트림(21)(또는 일반적으로 인코딩된 픽처 데이터(21))을 파싱하고, 예를 들어, 양자화된 계수(309) 및/또는 디코딩된 코딩 파라미터(도 12에서 도시되지 않음), 예를 들어 인터 예측 파라미터(예를 들어, 참조 픽처 인덱스 및 모션 벡터), 인트라 예측 파라미터(예를 들어, 인트라 예측 모드 또는 인덱스), 변환 파라미터, 양자화 파라미터, 루프 필터 파라미터, 및/또는 다른 신택스 엘리먼트 중 임의 또는 모두를 획득하기 위해 인코딩된 픽처 데이터(21)에 대한 엔트로피 디코딩을 수행하도록 구성된다. 엔트로피 디코딩 유닛(304)은 인코더(20)의 엔트로피 인코딩 유닛(270)과 관련하여 설명된 바와 같은 인코딩 방식에 대응하는 디코딩 알고리즘 또는 방식을 적용하도록 구성될 수 있다. 엔트로피 디코딩 유닛(304)은 인터 예측 파라미터, 인트라 예측 파라미터 및/또는 다른 신택스 엘리먼트를 모드 적용 유닛(360)에게 그리고 다른 파라미터를 디코더의 다른 유닛에게 제공하도록 추가로 구성될 수 있다. 비디오 디코더(30)는 비디오 슬라이스 레벨 및/또는 비디오 블록 레벨에서 신택스 엘리먼트를 수신할 수 있다. 슬라이스 및 각각의 신택스 엘리먼트에 추가로 또는 대안으로서, 타일 그룹 및/또는 타일 및 각각의 신택스 엘리먼트가 수신되고 그리고/또는 사용될 수 있다. 엔트로피 디코딩은 전술한 산술 디코딩 방법 또는 장치 중 임의의 것을 구현할 수 있다.
재구성 유닛(314)(예를 들어, 가산기 또는 합산기(314))은 예를 들어, 재구성된 잔차 블록(313)의 샘플 값과 예측 블록(365)의 샘플 값을 더함으로써, 샘플 도메인에서 재구성된 블록(315)을 획득하기 위해 재구성된 잔차 블록(313)을 예측 블록(365)에 추가하도록 구성될 수 있다.
도 12에 도시된 비디오 디코더(30)의 실시예는 슬라이스(비디오 슬라이스로도 지칭됨)를 사용하여 픽처를 분할하고 및/또는 디코딩하도록 구성될 수 있으며, 여기서 픽처는 하나 이상의 슬라이스(일반적으로 비 중첩)를 사용하여 분할되거나 또는 디코딩될 수 있고, 각각의 슬라이스는 하나 이상의 블록(예를 들어, CTU)을 포함할 수 있다.
도 12에 도시된 비디오 디코더(30)의 실시예는 타일 그룹(비디오 타일 그룹으로도 지칭됨) 및/또는 타일(비디오 타일로도 지칭됨)을 사용하여 픽처를 분할하고 및/또는 디코딩하도록 구성될 수 있으며, 여기서 픽처는 하나 이상의 타일 그룹(일반적으로 비 중첩)을 사용하여 분할되거나 또는 디코딩될 수 있고, 각각의 타일 그룹은 예를 들어 하나 이상의 블록(예를 들어, CTU) 또는 하나 이상의 타일을 포함할 수 있으며, 각각의 타일은, 예를 들어 직사각형 형상일 수 있고, 하나 이상의 블록(예를 들어, CTU), 예를 들어 완전하거나 또는 단편의 블록을 포함할 수 있다.
비디오 디코더(30)의 다른 변형이 인코딩된 픽처 데이터(21)를 디코딩하는 데 사용될 수 있다. 예를 들어, 디코더(30)는 루프 필터링 유닛(320) 없이 출력 비디오 스트림을 생성할 수 있다. 예를 들어, 비 변환 기반 디코더(30)는 특정 블록 또는 프레임에 대해 역변환 처리 유닛(312) 없이 직접 잔차 신호를 역양자화할 수 있다. 다른 구현에서, 비디오 디코더(30)는 단일 유닛으로 결합된 역양자화 유닛(310) 및 역변환 처리 유닛(312)을 가질 수 있다.
인코더(20) 및 디코더(30)에서, 현재 단계의 처리 결과가 추가로 처리될 수 있으며, 그 후 다음 단계로 출력될 수 있음이 이해되어야 한다. 예를 들어, 보간 필터링, 모션 벡터 도출 또는 루프 필터링 후, 클립(Clip) 또는 쉬프트와 같은 추가 연산이 보간 필터링, 모션 벡터 도출 또는 루프 필터링의 처리 결과에 대해 수행될 수 있다.
하드웨어 및 소프트웨어의 구현
다음은 하드웨어 및 소프트웨어의 일부 추가 구현에 대해 설명한다.
도 19-22를 참조하여 전술한 임의의 인코딩 장치는 각각의 채널로부터 제1 크기 부분의 다중화를 수행하고 각각의 채널로부터 제2 크기 부분의 다중화를 수행하기 위한 수단을 제공할 수 있다. 임의의 이들 예시적인 장치 내의 처리 회로는 다중화된 부분을 서브스트림으로 후속적으로 인코딩하고 이러한 엔트로피 코딩을 독립적으로 제1 서브스트림 및 제2 서브스트림으로 수행하도록 구성된다.
도 19-22의 임의의 디코딩 장치는 디코딩 방법을 수행하도록 구성된 처리 회로를 포함할 수 있다. 전술한 바와 같은 방법은 제2 서브스트림과 독립적으로 제1 서브스트림을 엔트로피 디코딩하고, 제1 서브스트림 및 제2 서브스트림으로부터 제1 크기의 부분 및 제2 크기의 부분을 복수 채널의 데이터로 역다중화하는 단계를 포함한다.
요약하면, 데이터를 비트스트림으로 인코딩하고 비트스트림으로부터 데이터를 디코딩하는 방법 및 장치가 설명된다. 이 방법은 병렬 인코딩 및 디코딩을 효율적으로 수행할 수 있으며 서브스트림의 패딩을 방지하여 비트스트림 내의 비트 수량을 줄일 수 있다. 입력 데이터 채널의 부분은 다중화되어 서브스트림으로 인코딩된다. 다중화 중에 더 균일한 길이의 서브스트림을 획득하기 위해 셔플링 방법이 적용된다. 서브스트림 내의 비트 수량은 인코딩 프로세스의 후행 비트 내에 관련 중요 비트만을 포함함으로써 추가로 감소될 수 있다.
실시예에 따르면, 입력 데이터를 비트스트림으로 산술적으로 인코딩하기 위한 방법이 제공되며, 입력 데이터를 코딩된 비트 및 후행 비트로 산술적으로 인코딩하는 단계; 코딩된 비트를 비트스트림에 포함시키는 단계; 산술적으로 인코딩된 입력 데이터의 간격의 최소값과 최대값을 결정하는 단계; 연속적인 후행 비트이고, 결정된 최소값을 나타내는 제2 최상위 비트(Most Significant Bit, MSB) 내에서와 같이 결정된 최대값을 나타내는 제1 MSB 내에서 동일한 값을 갖는 선행하는 후행 비트의 수량을 결정하는 단계; 및 비트스트림에 선행하는 후행 비트 및 선행하는 후행 비트의 결정된 수량의 지시를 포함시키는 단계를 포함한다.
전체 후행 비트 대신에 선행하는 후행 비트를 비트스트림에 포함시키는 것은 비트스트림 내의 비트의 수량을 감소시킬 수 있으므로, 예를 들어 동일한 품질에서 레이트를 감소시킬 수 있다. 즉, (나머지 후행 비트 없이) 결정된 선행하는 후행 비트만으로도 범위 간격을 정의하기에 충분하므로, 나머지 후행 비트는 비트스트림에 포함될 필요가 없으며 선행하는 후행 비트의 지시된 수량에 기초하여 디코더에서 재구성될 수 있다. 이렇게 하면 품질 저하 없이 레이트를 절약할 수 있다.
예시적인 구현에 따르면, 이 방법은 선행하는 후행 비트의 수량인 NumTrailingBits가 NumTrailingBits = CLZ((LOW + RANGE - 1) XOR LOW)에 의해 결정되는 단계를 포함하며, CLZ()은 선행하는 0의 카운트이고, LOW는 간격의 최소값이며 RANGE는 간격의 범위이다.
선행하는 후행 비트의 수량은 예를 들어 가장 가까운 바이트 경계로 반올림하는 대신에 정확하게 결정될 수 있다. 따라서, 비트스트림 내의 비트 수량을 추가로 감소시킬 수 있다.
예를 들어, 선행하는 후행 비트의 수량의 지시는 비트스트림 내에서 코딩된 비트 및 선행하는 후행 비트에 선행한다.
비트스트림 내의 코딩된 비트에 선행하는 선행 비트 및 선행하는 후행 비트의 수량의 지시는 전체 비트스트림을 버퍼링하지 않고 비트스트림으로부터 효율적인 추출을 가능하게 할 수 있다.
예시적인 구현에서, 선행하는 후행 비트에 값 1을 갖는 하나의 비트가 비트스트림에 포함되기 전에 포스트펜드된다.
이러한 접근 방식은 1-값 비트를 생략하는 대신 사용될 수 있다. 상세한 설명에서 언급한 바와 같이, 현재 비디오 코덱과 같은 일부 알려진 코덱에서, 1-값 비트가 비트스트림에서 지시된다.
특히, 산술 인코딩 단계, 간격의 최소값 및 최대값 결정 단계 및 선행하는 후행 비트 수량 결정 단계는 제1 서브스트림 및 제2 서브스트림에 대해 개별적으로 수행되어 제1 코딩된 비트, 제2 코딩된 비트, 제1 선행하는 후행 비트 및 제2 선행하는 후행 비트를 발생하고, 이 방법은 비트스트림에, 제1 선행하는 후행 비트 및 제2 선행하는 후행 비트가 뒤따르는 제1 코딩된 비트 및 제2 코딩된 비트를 삽입하는 단계를 포함한다.
두 개의 개별 서브스트림에 대한 이 방법의 이러한 독립적인 적용은 병렬화를 위한 전제 조건을 제공한다.
예를 들어, 이 방법은 제1 코딩된 비트 및 제2 코딩된 비트를 제1 코딩된 비트의 길이를 지시하는 제1 길이 지시 및 제2 코딩된 비트의 길이를 지시하는 제2 길이 지시와 함께 비트스트림으로 다중화하는 단계를 더 포함한다.
비트스트림에서 서브스트림의 길이를 지시하면 다양한 크기의 서브스트림을 제공할 수 있으므로 보다 유연한 비트스트림 구성을 달성하는 데 도움이 될 수 있다.
예시적인 구현에서, 제1 길이 지시는 비트스트림 내의 제1 코딩된 비트에 선행하고, 제2 길이 지시는 비트스트림 내의 제2 코딩된 비트에 선행한다.
이러한 비트스트림 구조의 장점은 복수의 서브스트림 및 각각의 지시를 버퍼링할 필요 없이 서브스트림의 즉각적인 인코딩 또는 디코딩 가능성일 수 있다.
예를 들어, 제2 길이 지시는 비트스트림 내에서 제1 코딩된 비트에 선행한다.
코딩된 비트 전에 연결된 길이 지시를 제공하면 비트스트림의 개별 부분을 더 빠르게 추출할 수 있다.
예를 들어, 제2 선행하는 후행 비트의 수량의 지시는 비트스트림 내에서 제1 코딩된 비트에 선행한다.
이러한 비트스트림 구조는 비트스트림의 개별 부분을 훨씬 더 빠르게 추출할 수 있게 하고 비트스트림을 병렬 디코딩에 더 적합하게 만든다.
예시적인 구현에서, 이 방법은 미리 결정된 수량의 바이트의 정수배와 일치하도록 비트스트림 길이를 정렬하기 위해 제1 코딩된 비트, 제2 코딩된 비트, 제1 선행하는 후행 비트 및 제2 선행하는 후행 비트를 포함하는 비트스트림을 미리 결정된 값을 갖는 비트로 패딩하는 단계를 더 포함한다.
이러한 접근 방식은 예를 들어 네트워크 적응 계층 유닛 또는 기타 패킷으로의 캡슐화와 같은 추가 처리를 위해 적절하게 정렬된 비트스트림을 제공할 수 있다.
또한, 산술 인코딩은 제1 산술 인코더로 제1 서브스트림을 인코딩하고 제2 산술 인코더로 제2 서브스트림을 인코딩하는 것을 포함하고, 제1 산술 인코더 및 제2 산술 인코더를 사용한 산술 인코딩은 적어도 부분적으로 병렬로 수행된다.
전술한 적어도 두 개의 서브스트림에 대해 개별적으로 인코딩 방법을 수행할 수 있는 가능성은 병렬 인코딩을 가능하게 한다. 이는 향상된 인코딩 효율성을 촉진하는 데 도움이 될 수 있다.
예시적인 구현에서, 산술 인코딩은 범위 인코딩이다.
범위 인코딩은 제한된 레지스터 또는 일반적으로 빠른 메모리 크기를 가진 하드웨어 및 소프트웨어 아키텍처에 특히 적합할 수 있다.
예를 들어, 산술 인코딩 동안 간격의 현재 최소값과 현재 최대값은 미리 구성된 크기의 메모리에 저장되고, 코딩된 비트를 비트스트림에 포함시키는 것은 안정적인 비트 중 미리 정의된 수량의 비트를 메모리로부터 비트스트림으로 이동시키는 것을 포함하며, 안정적인 비트는 현재 최소값과 현재 최대값의 이진 표현의 MSB에서 동일한 값을 갖는 연속 비트이다.
1비트보다 큰 부분에서 코딩된 비트를 출력하면 보다 효율적인 소프트웨어 및/또는 구현이 제공될 수 있다.
예시적인 구현에서, 산술 인코딩 동안 선행하는 후행 비트의 수량은 안정적인 비트(730) 중 미리 정의된 비트 수량에 가깝고, 후행하는 코딩된 비트는 안정적인 비트(730) 중 미리 정의된 비트 수량까지 0이 뒤따르는 값 1(1670)로 1비트를 포스트펜딩시킴으로써 선행하는 후행 비트(1160)로부터 생성되며, 후행하는 코딩된 비트는 코딩된 비트를 비트스트림에 포함시키기 전에 코딩된 비트에 포함되고, 선행하는 후행 비트가 0이라는 지시가 비트스트림에 포함된다.
따라서, 후행 비트 수량의 지시와 함께 많은 선행하는 후행 비트의 증가된 시그널링 노력이 회피될 수 있다. 대신에, 더 많은 코딩된 비트를 갖고 0의 선행하는 후행 비트를 시크널링하도록 시그널링 노력이 감소될 수 있다.
실시예에 따르면, 비트스트림으로부터 데이터의 산술 디코딩을 위한 방법이 제공되며, 이 방법은 비트스트림으로부터 선행하는 후행 비트 수량의 지시를 추출하는 단계; 비트스트림으로부터 복수의 코딩된 비트를 추출하는 단계; 추출된 선행하는 후행 비트 수량의 지시에 의해 지정되는 선행하는 후행 비트를 비트스트림으로부터 추출하는 단계; 추출된 선행하는 후행 비트에 후행 비트의 미리 결정된 최대 길이까지 0을 포함하는 후행 비트를 결정하는 단계; 및 코딩된 비트 및 결정된 후행 비트를 포함하는 비트로 표현되는 코딩된 값을 산술적으로 디코딩하여 상기 데이터를 획득하는 단계를 포함한다.
선행하는 후행 비트로부터 후행 비트의 재구성은 비트스트림 내의 더 적은 수량의 비트를 사용하여 코딩된 비트 및 후행 비트로부터 디코딩을 제공한다.
예를 들어, 후행 비트를 결정하는 단계는 추출된 선행하는 후행 비트에 값 1을 갖는 1비트를 포스트펜딩시킨 다음, 후행 비트의 미리 결정된 최대 길이까지 0을 추가하는 단계를 포함한다.
이러한 접근 방식은 산술 인코더의 완전한 출력을 재구성할 수 있게 하여 산술 디코더에 특히 적합한 입력을 제공할 수 있다.
예시적인 구현에서, 선행하는 후행 비트의 수량의 지시는 비트스트림 내에서 코딩된 비트 및 선행하는 후행 비트에 선행한다.
이러한 비트스트림 구조는 비트스트림으로부터 보다 효율적인 추출을 제공할 수 있다.
예시적인 구현에서, 이 방법은 비트스트림으로부터, 제1 선행하는 후행 비트 및 제2 선행하는 후행 비트가 후속하는 제1 코딩된 비트 및 제2 코딩된 비트를 추출하는 단계 ― 제1 코딩된 비트 및 제1 선행하는 후행 비트는 제1 서브스트림을 형성하고, 제2 코딩된 비트 및 제2 선행하는 후행 비트는 제2 서브스트림을 형성함 ―; 제1 서브스트림에 대한 제1 후행 비트를 결정하고, 제2 서브스트림에 대한 제2 후행 비트를 결정하며, 제1 코딩된 비트 및 결정된 제1 후행 비트를 포함하는 제1 비트로 표현되는 제1 코딩된 값을 산술적으로 디코딩하는 단계; 및 제2 코딩된 비트 및 결정된 제2 후행 비트를 포함하는 제2 비트로 표현되는 제2 코딩된 값을 산술적으로 디코딩하는 단계를 포함한다.
두 개의 개별 서브스트림에 대한 이 방법의 이러한 독립적인 적용은 보다 효율적인 디코딩 프로세스를 초래할 수 있으며 병렬화를 위한 전제 조건을 제공한다.
예를 들어, 이 방법은 제1 코딩된 비트의 길이를 지시하는 제1 길이 지시 및 제2 코딩된 비트의 길이를 지시하는 제2 길이 지시와 함께 비트스트림으로부터 제1 코딩된 비트 및 제2 코딩된 비트를 추출하는 단계를 더 포함한다.
비트스트림에서 서브스트림의 길이를 지지하면 다양한 크기의 서브스트림을 제공할 수 있어 보다 유연한 비트스트림 구성이 가능하다.
예시적인 구현에서, 제1 길이 지시는 비트스트림 내의 제1 코딩된 비트에 선행하고, 제2 길이 지시는 비트스트림 내의 제2 코딩된 비트에 선행한다.
이러한 비트스트림 구조의 장점은 복수의 서브스트림 및 각각의 지시를 버퍼링할 필요 없이 서브스트림을 즉시 디코딩할 수 있다는 것이다. 이로써, 처리 흐름을 용이하게 하는 것이 달성될 수 있다.
예를 들어, 제2 길이 지시는 비트스트림 내에서 제1 코딩된 비트에 선행한다.
코딩된 비트 전에 연결된 길이 기시를 제공하면 비트스트림의 개별 부분을 더 빠르게 추출할 수 있다.
예를 들어, 제2 선행하는 후행 비트의 수량의 지시는 비트스트림 내에서 제1 코딩된 비트에 선행한다.
이러한 비트스트림 구조는 비트스트림의 개별 부분을 더 빠르게 추출할 수 있는 추가 가능성을 제공한다.
예시적인 구현에서, 이 방법은 제1 코딩된 비트, 제2 코딩된 비트, 제1 선행하는 후행 비트 및 제2 선행하는 후행 비트를 추출한 후에 비트스트림의 나머지 비트를 폐기하는 단계를 더 포함한다.
이러한 접근 방식은 예를 들어 네트워크 적응 계층 유닛 또는 기타 패킷으로의 캡슐화와 같은 추가 처리를 위해 적절하게 정렬된 비트스트림을 제공할 수 있다.
예를 들어, 산술 디코딩은 제1 산술 디코더로 제1 서브스트림을 디코딩하고 제2 산술 디코더로 제2 서브스트림을 디코딩하는 것을 포함하고, 제1 산술 디코더 및 제2 산술 디코더를 사용한 산술 디코딩은 적어도 부분적으로 병렬로 수행된다.
서브스트림의 병렬 디코딩은 전체 비트스트림의 더 빠른 디코딩을 초래할 수 있다.
예시적인 구현에서, 산술 디코딩은 범위 디코딩이다.
범위 인코딩은 제한된 레지스터 또는 일반적으로 빠른 메모리 크기를 가진 하드웨어 및 소프트웨어 아키텍처에 특히 적합할 수 있다.
예시적인 구현에서, 컴퓨터 프로그램은 비일시적 매체에 저장되고 하나 이상의 프로세서에서 실행될 때 하나 이상의 프로세서로 하여금 전술한 방법 중 어느 하나의 단계를 실행하게 하는 코드 명령어를 포함한다.
실시예에 따르면, 입력 데이터를 비트스트림으로 산술적으로 인코딩하기 위한 장치가 제공되며, 입력 데이터를 코딩된 비트 및 후행 비트로 산술적으로 인코딩하고, 코딩된 비트를 비트스트림에 포함시키며, 산술적으로 인코딩된 입력 데이터의 간격의 최소값 및 최대값을 결정하고, 연속적인 후행 비트이며 결정된 최대값을 나타내는 제1 MSB 내에서 결정된 최소값을 나타내는 제2 MSB 내에서와 동일한 값을 갖는 선행하는 후행 비트의 수량을 결정하며, 결정된 수량의 선행하는 후행 비트 및 선행하는 후행 비트의 지시를 비트스트림에 포함하도록 구성된 처리 회로를 포함한다.
실시예에 따르면, 비트스트림으로부터 데이터의 산술 디코딩을 위한 장치가 제공되며, 비트스트림으로부터 선행하는 후행 비트의 수량의 지시를 추출하고, 비트스트림으로부터 복수의 코딩된 비트를 추출하며, 추출된 선행하는 후행 비트 수량의 지시에 의해 지정된 선행하는 후행 비트를 비트스트림으로부터 추출하고, 최대 후행 비트의 미리 결정된 최대 길이까지 추출된 선행하는 후행 비트에 비트 0을 부가하는 것을 포함하는 후행 비트를 결정하며, 코딩된 비트 및 결정된 후행 비트를 포함하는 비트로 표현된 코딩된 값을 산술적으로 디코딩하여 상기 데이터를 획득하도록 구성된 처리 회로를 포함한다.
이 장치는 전술한 방법의 장점을 제공한다.
도 19-22를 참조하여 전술한 임의의 인코딩 장치는 입력 데이터를 코딩된 비트 및 선행하는 후행 비트로 산술적으로 인코딩하기 위한 수단을 제공할 수 있다. 이들 예시적인 장치 중 어느 하나 내의 처리 회로는 입력 데이터를 인코딩하고 전술한 방법에 따라 코딩된 비트의 마지막 비트를 인코딩한 후에 인코더 상태의 선행하는 후행 비트를 결정하도록 구성된다.
도 19-22 중 어느 하나에서의 디코딩 장치는 디코딩 방법을 수행하도록 구성된 처리 회로를 포함할 수 있다. 전술한 바와 같은 방법은 각각의 수량의 지시와 함께 코딩된 비트 및 선행하는 후행 비트의 추출을 포함한다. 후행 비트는 선행하는 후행 비트로부터 재구성되며 그들은 데이터를 획득하기 위해 코딩된 비트와 함께 디코딩될 수 있다.
요약하면, 데이터를 비트스트림으로 인코딩하고 비트스트림으로부터 데이터를 디코딩하는 방법 및 장치가 설명된다. 이 방법은 인코딩 프로세스의 후행 비트 내에 관련 중요 비트만을 포함함으로써 비트스트림의 길이를 줄일 수 있다. 이러한 선행하는 후행 비트의 수량이 결정되고 최소 수량을 갖는 후행 비트가 구성될 수 있다. 선행하는 후행 비트의 수량의 지시는 비트스트림에 포함된다. 따라서, 패딩이 필요하지 않으므로, 시그널링되어야 하는 비트가 감소될 수 있다.
비디오 코딩 시스템(10)의 다음 실시예에서, 비디오 인코더(20) 및 비디오 디코더(30)는 전술한 도 11 및 도 12를 참조하여 도 19 및 도 20 또는 신경망 기반 인코더 및 디코더와 같은 다른 인코더 및 디코더에 기초하여 설명된다.
도 19는 예시적인 코딩 시스템(10), 예를 들어 본 출원의 기술을 이용할 수 있는 비디오 코딩 시스템(10)(또는 짧은 코딩 시스템(10))을 도시한 개략적인 블록도이다. 비디오 코딩 시스템(10)의 비디오 인코더(20)(또는 짧은 인코더(20)) 및 비디오 디코더(30)(또는 짧은 디코더(30))는 본 출원에서 설명된 다양한 예에 따른 기술을 수행하도록 구성될 수 있는 장치의 예를 나타낸다.
도 19에 도시된 바와 같이, 코딩 시스템(10)은 예를 들어 인코딩된 픽처 데이터(13)를 디코딩하기 위해 목적지 장치(14)로 인코딩된 픽처 데이터(21)를 제공하도록 구성된 소스 장치(12)를 포함한다.
소스 장치(12)는 인코더(20)를 포함하고, 추가적으로, 즉 선택적으로 픽처 소스(16), 전처리기(또는 전처리 유닛)(18), 예를 들어 픽처 전처리기(18) 및 통신 인터페이스 또는 통신 유닛(22)을 포함할 수 있다.
픽처 소스(16)는 임의의 종류의 픽처 캡처 장치, 예를 들어 실제 픽처를 캡처하기 위한 카메라 및/또는 임의의 종류의 픽처 생성 장치, 예를 들어 컴퓨터 애니메이션 픽처를 생성하기 위한 컴퓨터 그래픽 프로세서, 또는 실제 픽처, 컴퓨터 생성 픽처(예를 들어, 스크린 컨텐츠, 가상 현실(virtual reality, VR) 픽처) 및/또는 이들의 조합(예를 들어, 증강 현실(augmented reality, AR) 픽처)을 획득하고 및/또는 제공하기 위한 임의 종류의 기타 장치를 포함할 수 있거나 이들일 수 있다. 픽처 소스는 전술한 픽처 중 임의의 것을 저장하는 임의의 종류의 메모리 또는 스토리지일 수 있다.
전처리기(18) 및 전처리 유닛(18)에 의해 수행되는 처리와 구별하여, 픽처 또는 픽처 데이터(17)는 또한 원시 픽처 또는 원시 픽처 데이터(17)로 지칭될 수 있다.
전처리기(18)는(원시) 픽처 데이터(17)를 수신하고 전처리된 픽처(19) 또는 전처리된 픽처 데이터(19)를 획득하기 위해 픽처 데이터(17)에 대해 전처리를 수행하도록 구성된다. 전처리기(18)에 의해 수행된 전처리는 예를 들어 트리밍, 컬러 포맷 변환(예를 들어, RGB에서 YCbCr로의 변환), 컬러 보정 또는 노이즈 제거를 포함할 수 있다. 전처리 유닛(18)은 선택적 컴포넌트일 수 있음을 이해할 수 있다.
비디오 인코더(20)는 전처리된 픽처 데이터(19)를 수신하고 인코딩된 픽처 데이터(21)를 제공하도록 구성된다(추가적인 자세한 사항은 예를 들어, 도 11에 기초하여 위에서 설명되었음).
소스 장치(12)의 통신 인터페이스(22)는 인코딩된 픽처 데이터(21)를 수신하고, 저장 또는 직접 재구성을 위해 인코딩된 픽처 데이터(21)(또는 그의 임의의 추가 처리된 버전)를 통신 채널(13)을 통해 다른 장치, 예를 들어 목적지 장치(14) 또는 임의의 다른 장치로 전송하도록 구성될 수 있다.
목적지 장치(14)는 디코더(30)(예를 들어, 비디오 디코더(30))를 포함하고, 추가적으로, 즉 선택적으로 통신 인터페이스 또는 통신 유닛(28), 후처리기(32)(또는 후처리 유닛(32)) 및 디스플레이 장치(34)를 포함할 수 있다.
목적지 장치(14)의 통신 인터페이스(28)는 인코딩된 픽처 데이터(21)(또는 그것의 임의의 추가 처리된 버전)를, 예를 들어 소스 장치(12)로부터 직접 또는 임의의 기타 소스, 예를 들어 저장 장치, 예를 들어 인코딩된 픽처 데이터 저장 장치로부터 수신하고, 인코딩된 픽처 데이터(21)를 디코더(30)에게 제공하도록 구성된다.
통신 인터페이스(22) 및 통신 인터페이스(28)는 소스 장치(12)와 목적지 장치(14) 사이의 직접 통신 링크, 예를 들어, 직접 유선 또는 무선 연결, 또는 임의의 종류의 네트워크, 예를 들어, 유선 또는 무선 네트워크 또는 이들의 임의의 조합, 또는 임의의 종류의 사설 및 공용 네트워크, 또는 이들의 임의 종류의 조합을 통해 인코딩된 픽처 데이터(21) 또는 인코딩된 데이터(13)를 전송하거나 또는 수신하도록 구성될 수 있다.
통신 인터페이스(22)는 인코딩된 픽처 데이터(21)를 적절한 포맷, 예를 들어, 패킷으로 패키징하고, 그리고/또는 통신 링크 또는 통신 네트워크를 통한 전송을 위한 임의의 종류의 전송 인코딩 또는 처리를 사용하여 인코딩된 픽처 데이터를 처리하도록 구성될 수 있다.
통신 인터페이스(22)의 대응 부분을 형성하는 통신 인터페이스(28)는, 예를 들어, 전송된 데이터를 수신하고 인코딩된 픽처 데이터를 획득하기 위해 임의의 종류의 대응하는 전송 디코딩 또는 처리 및/또는 디패키징(de-packaging)을 사용하여 전송 데이터를 처리하도록 구성될 수 있다.
통신 인터페이스(22) 및 통신 인터페이스(28) 모두는 소스 장치(12)에서 목적지 장치(14)를 가리키는 도 19의 통신 채널(13)에 대한 화살표로 지시된 단방향 통신 인터페이스 또는 양방향 통신 인터페이스로서 구성될 수 있으며, 예를 들어 메시지를 전송하고 수신하며, 예를 들어 연결을 설정하고, 통신 링크 및/또는 데이터 전송, 예를 들어 인코딩된 픽처 데이터 전송과 관련된 임의의 기타 정보를 확인하고 교환하도록 구성될 수 있다.
디코더(30)는 인코딩된 픽처 데이터(21)를 수신하고 디코딩된 픽처 데이터(31) 또는 디코딩된 픽처(31)을 제공하도록 구성된다(더 자세한 사항은 예를 들어, 도 12에 기초하여 위에서 설명되었음).
목적지 장치(14)의 후처리기(32)는 후처리된 픽처 데이터(33), 예를 들어 후처리된 픽처(33)를 획득하기 위해 디코딩된 픽처 데이터(31)(또한 재구성된 픽처 데이터라고도 함), 예를 들어 디코딩된 픽처(31)를 후처리하도록 구성된다. 후처리 유닛(32)에 의해 수행되는 후처리는 예를 들어, 디스플레이 장치(34)에 의해, 예를 들어 디스플레이를 위해 디코딩된 픽처 데이터(31)를 준비하기 위해, 예를 들어, 컬러 포맷 변환(예를 들어, YCbCr에서 RGB로의 변환), 컬러 보정, 트리밍 또는 재샘플링 또는 기타 처리를 포함할 수 있다.
목적지 장치(14)의 디스플레이 장치(34)는 예를 들어, 사용자 또는 뷰어에게 픽처를 디스플레이하기 위해 후처리된 픽처 데이터(33)를 수신하도록 구성된다. 디스플레이 장치(34)는 재구성된 픽처를 표현하기 위한 임의의 종류의 디스플레이, 예를 들어 통합된 또는 외부의 디스플레이 또는 모니터일 수 있거나 또는 이들을 포함할 수 있다. 디스플레이는 예를 들어 액정 디스플레이(liquid crystal displays, LCD), 유기 발광 다이오드(organic light emitting diodes, OLED) 디스플레이, 플라즈마 디스플레이, 프로젝터, 마이크로 LED 디스플레이, 액정 온 실리콘(liquid crystal on silicon, LCoS), 디지털 조명 프로세서(digital light processor, DLP) 또는 임의의 종류의 기타 디스플레이를 포함할 수 있다.
도 19는 소스 장치(12) 및 목적지 장치(14)를 별개의 장치로서 도시하지만, 장치의 실시예는 소스 장치(12) 또는 대응하는 기능 및 목적지 장치(14) 또는 대응하는 기능 모두 또는 모든 기능을 포함할 수도 있다. 그러한 실시예에서, 소스 장치(12) 또는 대응하는 기능 및 목적지 장치(14) 또는 대응하는 기능은 동일한 하드웨어 및/또는 소프트웨어를 사용하거나 별개의 하드웨어 및/또는 소프트웨어 또는 이들의 임의의 조합에 의해 구현될 수 있다.
설명에 기초하여 당업자에게 명백한 바와 같이, 도 19에 도시된 바와 같이 소스 장치(12) 및/또는 목적지 장치(14) 내의 상이한 유닛 또는 기능의 존재 및(정확한) 분할은 실제 장치 및 애플리케이션에 따라 달라질 수 있다.
인코더(20)(예를 들어, 비디오 인코더(20)) 또는 디코더(30)(예를 들어, 비디오 디코더(30)) 또는 인코더(20) 및 디코더(30) 모두는 하나 이상의 마이크로프로세서, 디지털 신호 처리기(digital signal processor, DSP), 주문형 집적 회로(application-specific integrated circuit, ASIC), 필드 프로그래밍 가능 게이트 어레이(field-programmable gate array, FPGA), 이산 로직, 하드웨어, 비디오 코딩 전용 또는 이들의 조합과 같이 도 20에 도시된 바와 같은 처리 회로를 통해 구현될 수 있다. 인코더(20)는 도 11의 인코더(20) 및/또는 여기에서 설명된 임의의 다른 인코더 시스템 또는 서브시스템과 관련하여 논의된 바와 같이 다양한 모듈을 구현하기 위해 처리 회로(46)를 통해 구현될 수 있다. 디코더(30)는 도 12의 디코더(30) 및/또는 여기에서 설명된 임의의 기타 디코더 시스템 또는 서브시스템과 관련하여 논의된 바와 같이 다양한 모듈을 구현하기 위해 처리 회로(46)를 통해 구현될 수 있다. 처리 회로는 나중에 논의되는 바와 같이 다양한 작동을 수행하도록 구성될 수 있다. 도 22에 도시된 바와 같이, 기술이 소프트웨어에서 부분적으로 구현되는 경우, 장치는 소프트웨어에 대한 명령을 적절한 비 일시적 컴퓨터 판독 가능 저장 매체에 저장할 수 있으며 본 개시의 기술을 수행하기 위해 하나 이상의 프로세서를 사용하여 하드웨어에서 명령을 실행할 수 있다. 비디오 인코더(20) 및 비디오 디코더(30) 중 하나는 예를 들어 도 20에 도시된 바와 같이 단일 장치에서 결합된 인코더/디코더(CODEC)의 일부로서 통합될 수 있다.
소스 장치(12) 및 목적지 장치(14)는 임의의 종류의 핸드헬드 또는 고정 장치, 예를 들어, 노트북 또는 랩탑 컴퓨터, 휴대폰, 스마트폰, 태블릿 또는 태블릿 컴퓨터, 카메라, 데스크탑 컴퓨터, 셋탑 박스, 텔레비전, 디스플레이 장치, 디지털 미디어 플레이어, 비디오 게임 콘솔, 비디오 스트리밍 장치(컨텐츠 서비스 서버 또는 컨텐츠 전달 서버와 같음), 방송 수신기 장치, 방송 전송기 장치 등을 포함하는 임의의 넓은 범위의 장치를 포함할 수 있고 운영 체제를 전혀 사용하지 않거나 어떤 종류도 사용할 수 있다. 일부 경우에, 소스 장치(12) 및 목적지 장치(14)는 무선 통신을 위해 장착될 수 있다. 따라서, 소스 장치(12) 및 목적지 장치(14)는 무선 통신 장치일 수 있다.
일부 경우에, 도 19에 도시된 비디오 코딩 시스템(10)은 단지 예일 뿐이며 본 출원의 기술은 인코딩과 디코딩 장치 사이의 데이터 통신을 반드시 포함하지는 않는 비디오 코딩 설정(예를 들어, 비디오 인코딩 또는 비디오 디코딩)에 적용할 수 있다. 다른 예에서, 데이터는 로컬 메모리로부터 검색되거나, 네트워크 등을 통해 스트리밍된다. 비디오 인코딩 장치는 데이터를 인코딩하고 메모리에 저장할 수 있고, 그리고/또는 비디오 디코딩 장치는 메모리로부터 데이터를 검색하고 디코딩할 수 있다. 일부 예에서, 인코딩 및 디코딩은 서로 통신하지 않고 단순히 데이터를 메모리로 인코딩하고 그리고/또는 메모리로부터 데이터를 검색하고 디코딩하는 장치에 의해 수행된다.
설명의 편의를 위해, 본 발명의 실시예는 예를 들어, 고효율 비디오 코딩(High-Efficiency Video Coding, HEVC)를 참조하거나 또는 ITU-T 비디오 코딩 전문가 그룹(Video Coding Experts Group, VCEG) 및 ISO/IEC 영화 전문가 그룹(Motion Picture Experts Group, MPEG)의 비디오 코딩에 대한 조인트 컬래보레이션 팀(Joint Collaboration Team on Video Coding, JCT-VC)에서 개발된 차세대 비디오 코딩 표준인 다목적 비디오 코딩(Versatile Video Coding, VVC)의 참조 소프트웨어를 참조하여 여기에서 설명된다. 당업자는 본 발명의 실시예가 HEVC 또는 VVC에 제한되지 않음을 이해할 것이다.
도 21은 본 개시의 실시예에 따른 비디오 코딩 장치(400)의 개략도이다. 비디오 코딩 장치(400)는 여기에서 설명된 바와 같이 개시된 실시예를 구현하기에 적합하다. 실시예에서, 비디오 코딩 장치(400)는 도 19의 비디오 디코더(30)와 같은 디코더일 수 있거나 또는 도 19의 비디오 인코더(20)와 같은 인코더일 수 있다.
비디오 코딩 장치(400)는 데이터를 수신하기 위한 인입(ingress) 포트(410)(또는 입력 포트(410)) 및 수신기 유닛(Rx)(420); 데이터를 처리하는 프로세서, 로직 유닛 또는 중앙 처리 장치(CPU)(430); 데이터를 전송하기 위한 전송기 유닛(Tx)(440) 및 인출(egress) 포트(450)(또는 출력 포트(450)); 및 데이터를 저장하기 위한 메모리(460)를 포함한다. 비디오 코딩 장치(400)는 또한 광학적 또는 전기적 신호의 인출 또는 인입을 위한 인입 포트(410), 수신기 유닛(420), 전송기 유닛(440) 및 인출 포트(450)에 결합된 광-전기(optical-to-electrical, OE) 컴포넌트 및 전기-광(electrical-to-optical, EO) 컴포넌트를 포함할 수 있다.
프로세서(430)는 하드웨어 및 소프트웨어에 의해 구현된다. 프로세서(430)는 하나 이상의 CPU 칩, 코어(예를 들어, 멀티 코어 프로세서), FPGA, ASIC 및 DSP로서 구현될 수 있다. 프로세서(430)는 인입 포트(410), 수신기 유닛(420), 전송기 유닛(440), 인출 포트(450) 및 메모리(460)와 통신한다. 프로세서(430)는 코딩 모듈(470)을 포함한다. 코딩 모듈(470)은 상기한 개시된 실시예를 구현한다. 예를 들어, 코딩 모듈(470)은 다양한 코딩 연산을 구현하거나, 처리하거나, 준비하거나 또는 제공한다. 따라서, 코딩 모듈(470)의 포함은 비디오 코딩 장치(400)의 기능에 실질적인 개선을 제공하고 비디오 코딩 장치(400)의 다른 상태로의 변환에 영향을 미친다. 다르게는, 코딩 모듈(470)은 메모리(460)에 저장되고 프로세서(430)에 의해 실행되는 명령으로서 구현된다.
메모리(460)는 하나 이상의 디스크, 테이프 드라이브 및 솔리드 스테이트 드라이브를 포함할 수 있으며 이러한 프로그램이 실행을 위해 선택될 때 프로그램을 저장하고, 프로그램 실행 중에 읽혀지는 명령어 및 데이터를 저장하기 위해 오버 플로우 데이터 저장 장치로서 사용될 수 있다. 메모리(460)는 예를 들어, 휘발성 및/또는 비휘발성일 수 있으며 읽기 전용 메모리(read-only memory, ROM), 랜덤 액세스 메모리(random access memory, RAM), 터너리 컨텐츠 어드레싱 가능 메모리(ternary content-addressable memory, TCAM) 및/또는 정적 랜덤 액세스 메모리(static random-access memory, SRAM)일 수 있다.
도 22는 예시적인 실시예에 따라 도 19로부터 소스 장치(12) 및 목적지 장치(14) 중 하나 또는 둘 모두로서 사용될 수 있는 장치(500)의 단순화된 블록도이다.
장치(500)의 프로세서(502)는 중앙 처리 유닛일 수 있다. 다르게는, 프로세서(502)는 현재 존재하거나 향후 개발될 정보를 조작하거나 처리할 수 있는 임의의 다른 유형의 장치 또는 다중 장치일 수 있다. 개시된 구현이 도시된 바와 같이 단일 프로세서, 예를 들어 프로세서(502)로 실행될 수 있지만, 속도 및 효율성의 이점은 하나 이상의 프로세서를 사용하여 달성될 수 있다.
장치(500)의 메모리(504)는 구현에서 읽기 전용 메모리(ROM) 장치 또는 랜덤 액세스 메모리(RAM) 장치일 수 있다. 임의의 다른 적절한 유형의 저장 장치가 메모리(504)로서 사용될 수 있다. 메모리(504)는 버스(512)를 사용하여 프로세서(502)에 의해 액세스되는 코드 및 데이터(506)를 포함할 수 있다. 메모리(504)는 운영 체제(508) 및 애플리케이션 프로그램(510)을 더 포함할 수 있으며, 애플리케이션 프로그램(510)은 프로세서(502)가 여기에서 설명된 방법을 수행하도록 허용하는 적어도 하나의 프로그램을 포함한다. 예를 들어, 애플리케이션 프로그램(510)은 전술한 바와 같은 산술 코딩을 사용하는 인코딩 및 디코딩을 포함하여 여기에서 설명된 방법을 수행하는 비디오 코딩 애플리케이션을 더 포함하는 애플리케이션 1 내지 N을 포함할 수 있다.
장치(500)는 또한 디스플레이(518)와 같은 하나 이상의 출력 장치를 포함할 수 있다. 디스플레이(518)는, 일 예에서, 디스플레이를 터치 입력을 감지하도록 작동 가능한 터치 감지 엘리먼트와 결합하는 터치 감지 디스플레이일 수 있다. 디스플레이(518)는 버스(512)를 통해 프로세서(502)에 연결될 수 있다.
여기서는 단일 버스로 도시되어 있지만, 장치(500)의 버스(512)는 다중 버스로 구성될 수 있다. 또한, 제2 저장 장치(514)는 장치(500)의 다른 컴포넌트에 직접 결합될 수 있거나 또는 네트워크를 통해 액세스될 수 있고 메모리 카드와 같은 단일 통합 유닛 또는 다중 메모리 카드와 같은 다중 유닛을 포함할 수 있다. 따라서, 장치(500)는 매우 다양한 구성으로 구현될 수 있다.
본 발명의 실시예가 주로 비디오 코딩에 기초하여 설명되었지만, 코딩 시스템(10), 인코더(20) 및 디코더(30)(및 대응하는 시스템(10))의 실시예 및 본 명세서에 설명된 다른 실시예는 여전히 픽처 처리 또는 코딩, 즉 비디오 코딩에서와 같이 임의의 이전 또는 연속된 픽처와 독립적인 개별 픽처의 처리 또는 코딩을 위해 구성될 수 있다. 일반적으로, 픽처 처리 코딩이 단일 픽처(17)로 제한되는 경우에 인터 예측 유닛(244(인코더) 및 344(디코더))만이 이용 가능하지 않을 수 있다. 비디오 인코더(20) 및 비디오 디코더(30)의 다른 모든 기능(도구 또는 기술로도 지칭됨)은 스틸 픽처 처리, 예를 들어 잔차 계산(204/304), 변환(206), 양자화(208), 역양자화(210/310), (역)변환(212/312), 분할(262/362), 인트라 예측(254/354) 및/또는 루프 필터링(220, 320) 및 엔트로피 코딩(270) 및 엔트로피 디코딩(304)에 동일하게 사용될 수 있다.
예를 들어 인코더(20) 및 디코더(30)의 실시예 및 예를 들어 인코더(20) 및 디코더(30)를 참조하여 본 명세서에 기술된 기능은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 소프트웨어로 구현되는 경우, 기능은 컴퓨터 판독 가능 매체에 저장되거나 통신 매체를 통해 하나 이상의 명령어 또는 코드로 전송되고 하드웨어 기반 처리 장치에 의해 실행될 수 있다. 컴퓨터 판독 가능 매체는 데이터 저장 매체와 같은 유형의 매체에 대응하는 컴퓨터 판독 가능 저장 매체, 또는 예를 들어 통신 프로토콜에 따라 한 장소에서 다른 장소로 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체를 포함할 수 있다. 이러한 방식으로, 컴퓨터 판독 가능 매체는 일반적으로 (1) 비일시적인 유형의 컴퓨터 판독 가능 저장 매체 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수 있다. 데이터 저장 매체는 본 명세서에 기술된 기술의 구현을 위한 명령어, 코드 및/또는 데이터 구조를 검색하기 위해 하나 이상의 컴퓨터 또는 하나 이상의 프로세서에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독 가능 매체를 포함할 수 있다.
제한이 아닌 예로서, 이러한 컴퓨터 판독 가능 저장 매체는 RAM, ROM, EEPROM, CD-ROM 또는 기타 광학 디스크 저장 장치, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 플래시 메모리 또는 명령 또는 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드를 저장하는 데 사용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 기타 매체를 포함할 수 있다. 또한, 모든 연결은 적절하게 컴퓨터 판독 가능 매체로 칭해진다. 예를 들어, 명령어가 웹 사이트, 서버 또는 동축 케이블, 광섬유 케이블, 트위스트 페어, 디지털 가입자 회선(digital subscriber line, DSL) 또는 적외선, 라디오 및 마이크로파와 같은 무선 기술을 사용하는 기타 원격 소스로부터 전송되는 경우, 동축 케이블, 광섬유 케이블, 트위스트 페어, DSL 또는 적외선, 라디오, 마이크로파와 같은 무선 기술이 매체의 정의에 포함된다. 그러나, 컴퓨터 판독 가능 저장 매체 및 데이터 저장 매체가 연결, 반송파, 신호 또는 기타 일시적인 매체를 포함하지 않고 대신에 비일시적인 유형의 저장 매체로 향한다는 점이 이해되어야 한다. 여기서 사용되는 디스크(disk) 및 디스크(disc)는 컴팩트 디스크(compact disc, CD), 레이저 디스크, 광 디스크, 디지털 다목적 디스크(digital versatile disc, DVD), 플로피 디스크 및 블루레이 디스크를 포함하며, 여기서 디스크(disk)는 일반적으로 데이터를 자기적으로 재생하는 반면, 디스크(disc)는 레이저로 데이터를 광학적으로 재생한다. 위의 조합도 컴퓨터 판독 가능 매체의 범위에 포함되어야 한다.
명령어는 하나 이상의 디지털 신호 프로세서(digital signal processor, DSP), 범용 마이크로프로세서, 주문형 집적 회로(application specific integrated circuit, ASIC), 필드 프로그램 가능 로직 어레이(field programmable logic array, FPGA) 또는 기타 동등한 집적 또는 이산 로직 회로와 같은 하나 이상의 프로세서에 의해 실행될 수 있다. 따라서, 본 명세서에서 사용되는 "프로세서"라는 용어는 전술한 구조 중 임의의 것 또는 본 명세서에 기술된 기술의 구현에 적합한 임의의 다른 구조를 지칭할 수 있다. 또한, 일부 측면에서, 본 명세서에 기술된 기능은 인코딩 및 디코딩을 위해 구성된 전용 하드웨어 및/또는 소프트웨어 모듈 내에 제공되거나, 또는 결합된 코덱에 통합될 수 있다. 또한, 이 기술은 하나 이상의 회로 또는 로직 엘리먼트에서 완전히 구현될 수 있다.
본 개시의 기술은 무선 핸드셋, 집적 회로(IC) 또는 IC 세트(예를 들어, 칩셋)를 포함하는 다양한 디바이스 또는 장치에서 구현될 수 있다. 개시된 기술을 수행하도록 구성된 장치의 기능적 측면을 강조하기 위해 다양한 컴포넌트, 모듈 또는 유닛이 본 개시에서 설명되지만, 반드시 상이한 하드웨어 유닛에 의한 실현을 요구하지는 않는다. 오히려, 전술한 바와 같이, 다양한 유닛이 적합한 소프트웨어 및/또는 펌웨어와 함께 전술한 바와 같은 하나 이상의 프로세서를 포함하는 상호작용 하드웨어 유닛의 집합체에 의해 제공되거나 또는 코덱 하드웨어 유닛에 결합될 수 있다.

Claims (53)

  1. 동일한 크기의 복수의 채널(1830)의 데이터를 비트스트림(1570)으로 엔트로피 인코딩하는 인코딩 방법으로서,
    상기 복수의 채널의 각 채널로부터의 제1 크기의 부분(1840)을 다중화한 다음, 상기 제1 크기의 다중화된 부분(1840)을 제1 서브스트림(1530)으로 인코딩하는 단계;
    상기 복수의 채널의 각 채널로부터의 제2 크기의 부분(1841)을 다중화한 다음, 상기 제2 크기의 다중화된 부분(1841)을 제2 서브스트림(1531)으로 인코딩하는 단계
    를 포함하며,
    상기 인코딩은 상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)으로 독립적으로 수행되는 엔트로피 인코딩인,
    인코딩 방법.
  2. 제1항에 있어서,
    상기 동일한 크기의 복수의 채널(1830)을 획득하기 위해 상이한 크기의 복수의 채널(1810)의 데이터를 전처리하는 단계를 포함하여 상기 동일한 크기의 복수의 채널(1830)을 생성하는 단계
    를 더 포함하는, 인코딩 방법.
  3. 제1항 내지 제2항 중 어느 한 항에 있어서,
    상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)을 상기 제1 서브스트림(1530)의 길이를 지시하는 제1 서브스트림 길이 지시 및 상기 제2 서브스트림(1531)을 지시하는 제2 서브스트림 길이 지시와 함께 상기 비트스트림(1570)으로 다중화하는 단계
    를 더 포함하는, 인코딩 방법.
  4. 제3항에 있어서,
    상기 제1 서브스트림 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하고,
    상기 제2 서브스트림 길이 지시는 상기 비트스트림(1570) 내에서 상기 제2 서브스트림(1531)에 선행하는,
    인코딩 방법.
  5. 제4항에 있어서,
    상기 제2 서브스트림 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하는,
    인코딩 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 엔트로피 인코딩은 산술 인코딩인,
    인코딩 방법.
  7. 제6항에 있어서,
    상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)을 상기 제1 서브스트림(1530)의 제1 후행 비트(traling bit)(1540)의 길이를 지시하는 제1 후행 비트 길이 지시 및 상기 제2 서브스트림(1531)의 제2 후행 비트(1541)의 길이를 지시하는 제2 후행 비트 길이 지시와 함께 상기 비트스트림(1570)으로 다중화하는 단계
    를 더 포함하는, 인코딩 방법.
  8. 제7항에 있어서,
    상기 제1 후행 비트 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하고,
    상기 제2 후행 비트 길이 지시는 상기 비트스트림(1570) 내에서 상기 제2 서브스트림(1531)에 선행하는,
    인코딩 방법.
  9. 제8항에 있어서,
    상기 제2 후행 비트 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하는,
    인코딩 방법.
  10. 제6항 내지 제9항 중 어느 한 항에 있어서,
    상기 제1 서브스트림(1530) 다음의 상기 비트스트림(1570)에 상기 제1 후행 비트(1540)를 추가하는 단계, 및
    상기 제2 서브스트림(1531) 다음의 상기 비트스트림(1570)에 상기 제2 후행 비트(1541)를 추가하는 단계
    를 더 포함하는, 인코딩 방법.
  11. 제10항에 있어서,
    상기 제1 후행 비트(1540)는 상기 비트스트림(1570) 내에서 상기 제2 서브스트림(1531)을 뒤따르는,
    인코딩 방법.
  12. 제7항 내지 제11항 중 어느 한 항에 있어서,
    미리 결정된 바이트 수량의 정수배와 일치하도록 상기 비트스트림 길이를 정렬하기 위해, 상기 제1 서브스트림 길이 지시, 상기 제2 서브스트림 길이 지시, 상기 제1 후행 비트 길이 지시, 상기 제2 후행 비트 길이 지시, 상기 제1 서브스트림(1530), 상기 제2 서브스트림(1531), 상기 제1 후행 비트(1540) 및 상기 제2 후행 비트(1541)를 포함하는 비트스트림(1570)을 미리 결정된 값을 갖는 비트로 패딩(padding)하는 단계
    를 더 포함하는, 인코딩 방법.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서,
    상기 제1 크기는 상기 제2 크기와 같은,
    인코딩 방법.
  14. 제1항 내지 제13항 중 어느 한 항에 있어서,
    상기 제1 서브스트림(1530)에 포함된 모든 부분 및 상기 제2 서브스트림(1531)에 포함된 모든 부분은 상기 복수의 채널(1830)의 상기 데이터 심볼의 정수배(K)이고, K는 1보다 큰,
    인코딩 방법.
  15. 제14항에 있어서,
    상기 심볼은 비트인,
    인코딩 방법.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서,
    상기 제1 크기의 부분(1840) 및 상기 제2 크기의 부분(1841)의 다중화를 위한 셔플링 방법을 선택한 다음에 적용하는 단계
    를 더 포함하며,
    상기 셔플링 방법은,
    - 미리 정의된 셔플링 방법의 세트 중에서 선택되고,
    - 상기 제1 크기의 부분(1840) 및 상기 제2 크기의 부분(1841)의 순서를 지정하는,
    인코딩 방법.
  17. 제16항에 있어서,
    상기 셔플링 방법은 상기 제1 크기의 부분에 대해 상기 제2 크기의 부분의 순환 순열(cyclic permutation)을 수행하는,
    인코딩 방법.
  18. 제16항에 있어서,
    반복적으로 수행되며,
    상기 셔플링 방법은,
    현재의 제1 서브스트림의 길이와 과거의 제1 서브스트림의 길이에 기초한 통계값 사이의 차이, 및/또는
    현재의 제2 서브스트림의 길이와 과거의 제2 서브스트림의 길이에 기초한 통계값 사이의 차이
    에 따라 선택되는, 인코딩 방법.
  19. 제18항에 있어서,
    상기 통계값은 추정 평균, 중앙값, 최소값, 최대값 또는 성장 속도 중 적어도 하나에 기초하는,
    인코딩 방법.
  20. 제1항 내지 제19항 중 어느 한 항에 있어서,
    상기 엔트로피 인코딩은 산술 인코딩이고,
    상기 셔플링 방법은 상기 산술 인코딩의 범위 간격의 현재 상태에 따라 선택되는,
    인코딩 방법.
  21. 제1항 내지 제20항 중 어느 한 항에 있어서,
    상기 엔트로피 인코딩은 제1 엔트로피 인코더로 상기 제1 서브스트림(1830)을 생성하고 제2 엔트로피 인코더로 상기 제2 서브스트림(1831)을 생성하는 것을 포함하고,
    상기 제1 엔트로피 인코더 및 상기 제2 엔트로피 인코더를 사용한 엔트로피 인코딩은 적어도 부분적으로 병렬로 수행되는,
    인코딩 방법.
  22. 제1항 내지 제21항 중 어느 한 항에 있어서,
    상기 채널은 신경망의 출력 채널 또는 잠재 표현 채널인,
    인코딩 방법.
  23. 제7항 내지 제22항 중 어느 한 항에 있어서,
    상기 엔트로피 인코딩은 산술 인코딩이고,
    상기 인코딩 방법은, 다중화된 부분의 상기 제1 서브스트림 또는 상기 제2 서브스트림으로의 인코딩을 위해,
    상기 다중화된 부분을 코딩된 비트(1730-1731) 및 인코더 상태 비트로 산술적으로 인코딩하는 단계 ― 상기 코딩된 비트(1730-1731)는 상기 서브스트림을 형성함 ―;
    상기 산술적으로 인코딩된 입력 데이터의 간격의 최소값(1610) 및 최대값(1630)을 결정하는 단계(S960);
    선행하는(leading) 후행 비트의 수량을 결정하는 단계(S970) ― 상기 선행하는 후행 비트는,
    연속적인 인코더 상태 비트이고,
    상기 결정된 최대값(1630)을 나타내는 제1 최상위 비트(Most Significant Bit, MSB) 내에서 상기 결정된 최소값(1610)을 나타내는 제2 MSB 내에서와 동일한 값을 가지며,
    상기 후행 비트는 상기 선행 인코더 상태 비트임 ―; 및
    상기 후행 비트 길이 지시 내에서 상기 선행 인코더 상태 비트의 결정된 수량을 지시하는 단계
    를 포함하는, 인코딩 방법.
  24. 제23항에 있어서,
    상기 선행 인코더 상태 비트(1740-1741)의 수량인 NumTrailingBits는,
    NumTrailingBits = CLZ((LOW + RANGE - 1) XOR LOW)
    에 의해 결정되며,
    CLZ()는 선행하는 0의 카운트이고, LOW는 상기 간격(1610)의 최소값이며, RANGE는 상기 간격(1620)의 범위인,
    인코딩 방법.
  25. 제23항 내지 제24항 중 어느 한 항에 있어서,
    값이 1인 하나의 비트(1670)가 비트스트림에 포함되기 전에 상기 선행 인코더 상태 비트(1160)에 포스트펜드(postpend)되는,
    인코딩 방법.
  26. 제24항 내지 제25항 중 어느 한 항에 있어서,
    상기 산술 인코딩 중에 상기 간격의 현재의 최소값(720a-d) 및 상기 현재의 최대값(710a-d)이 미리 구성된 크기의 메모리에 저장되고,
    상기 코딩된 비트를 상기 비트스트림에 포함시키는 것은 안정적인 비트(730) 중 미리 정의된 수량의 비트를 상기 메모리로부터 상기 비트스트림으로 이동시키는 것을 포함하며,
    상기 안정적인 비트(730)는 상기 현재의 최소값(720a-d) 및 상기 현재의 최대값(710a-d)의 이진 표현의 MSB에서 동일한 값을 갖는 연속적인 비트인,
    인코딩 방법.
  27. 제26항에 있어서,
    상기 산술 인코딩 중에 상기 선행 인코더 상태의 수량과 상기 안정적인 비트(730) 중 미리 정의된 비트의 수량 사이의 차이가 미리 정의된 임계값 미만인 경우,
    후행하는 코딩된 비트는 상기 안정적인 비트(730) 중 미리 정의된 수량의 비트까지 0이 뒤따르는 값이 1인 하나의 비트를 포스트펜딩함으로써 상기 선행 인코더 상태로부터 생성되고,
    상기 후행하는 코딩된 비트는 상기 코딩된 비트를 상기 비트스트림에 포함시키기 전에 상기 코딩된 비트에 포함되며,
    0인 선행 인코더 상태 비트의 지시가 상기 비트스트림에 포함되는,
    인코딩 방법.
  28. 제7항 내지 제27항 중 어느 한 항에 있어서,
    상기 산술 인코딩은 범위 인코딩인,
    인코딩 방법.
  29. 비트스트림(1570)을 동일한 크기의 복수의 채널(1830)의 데이터로 엔트로피 디코딩하는 디코딩 방법으로서,
    제2 서브스트림(1531)과 독립적으로 제1 서브스트림(1530)을 엔트로피 디코딩하는 단계; 및
    상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)으로부터의 제1 크기의 부분(1540) 및 제2 크기의 부분(1541)을 상기 동일한 크기의 복수의 채널(1830)로 역다중화하는 단계
    를 포함하는 디코딩 방법.
  30. 제29항에 있어서,
    상이한 크기의 복수의 채널(1810)의 데이터를 획득하기 위해 상기 동일한 크기의 복수의 채널(1830)을 후처리하는 단계
    를 더 포함하는 디코딩 방법.
  31. 제29항 내지 제30항 중 어느 한 항에 있어서,
    상기 제1 서브스트림(1530)의 길이를 지시하는 제1 서브스트림 길이 지시 및 상기 제2 서브스트림(1531)의 길이를 지시하는 제2 서브스트림 길이 지시와 함께 상기 비트스트림(1570)으로부터 상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)을 추출하는 단계
    를 더 포함하는 디코딩 방법.
  32. 제31항에 있어서,
    상기 제1 서브스트림 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하고,
    상기 제2 서브스트림 길이 지시는 상기 비트스트림(1570) 내에서 상기 제2 서브스트림(1531)에 선행하는,
    디코딩 방법.
  33. 제32항에 있어서,
    상기 제2 서브스트림 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하는,
    디코딩 방법.
  34. 제29항 내지 제33항 중 어느 한 항에 있어서,
    상기 엔트로피 디코딩은 산술 디코딩인,
    디코딩 방법.
  35. 제34항에 있어서,
    상기 제1 서브스트림(1530)의 제1 후행 비트(1540)의 길이를 지시하는 제1 후행 비트 길이 지시 및 상기 제2 서브스트림(1531)의 제2 후행 비트(1541)의 길이를 지시하는 제2 후행 비트 길이 지시와 함께 상기 비트스트림(1570)으로부터 상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)을 추출하는 단계
    를 더 포함하는, 디코딩 방법.
  36. 제35항에 있어서,
    상기 제1 후행 비트 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하고,
    상기 제2 후행 비트 길이 지시는 상기 비트스트림(1570) 내에서 상기 제2 서브스트림(1531)에 선행하는,
    디코딩 방법.
  37. 제36항에 있어서,
    상기 제2 후행 비트 길이 지시는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)에 선행하는,
    디코딩 방법.
  38. 제34항 내지 제37항 중 어느 한 항에 있어서,
    상기 제1 후행 비트(1540)는 상기 비트스트림(1570) 내에서 상기 제1 서브스트림(1530)을 뒤따르고,
    상기 제2 후행 비트(1541)는 상기 비트스트림(1570) 내에서 상기 제2 서브스트림(1531)을 뒤따르는,
    디코딩 방법.
  39. 제38항에 있어서,
    상기 제1 후행 비트(1540)는 상기 비트스트림(1570) 내에서 상기 제2 서브스트림(1531)을 뒤따르는,
    디코딩 방법.
  40. 제29항 내지 제39항 중 어느 한 항에 있어서,
    상기 제1 크기는 상기 제2 크기와 같은,
    디코딩 방법.
  41. 제29항 내지 제40항 중 어느 한 항에 있어서,
    상기 제1 서브스트림(1530)에 포함된 모든 부분 및 상기 제2 서브스트림(1531)에 포함된 모든 부분은 상기 복수의 채널의 상기 데이터 심볼의 정수배(K)이고, K는 1보다 큰,
    디코딩 방법.
  42. 제41항에 있어서,
    상기 심볼은 비트인,
    디코딩 방법.
  43. 제42항에 있어서,
    상기 제1 서브스트림 길이 지시, 상기 제2 서브스트림 길이 지시, 상기 제1 후행 비트 길이 지시, 상기 제2 후행 비트 길이 지시, 상기 제1 서브스트림(1530), 상기 제2 서브스트림(1531), 상기 제1 후행 비트(1540) 및 상기 제2 후행 비트(1541)를 추출한 후 상기 비트스트림(1570)의 나머지 비트를 폐기하는 단계
    를 더 포함하는, 디코딩 방법.
  44. 제29항 내지 제43항 중 어느 한 항에 있어서,
    상기 제1 크기의 부분(1840) 및 상기 제2 크기의 부분(1841)의 역다중화를 위한 셔플링 방법을 결정하여 적용하는 단계
    를 더 포함하며,
    상기 셔플링 방법은,
    - 미리 정의된 셔플링 방법의 세트 중 하나이고,
    - 상기 제1 크기의 부분 및 상기 제2 크기의 부분의 순서를 지정하는,
    디코딩 방법.
  45. 제44항에 있어서,
    상기 셔플링 방법을 결정하는 것은 상기 비트스트림(1570)에 포함된 제어 정보에 기초하는,
    디코딩 방법.
  46. 제29항 내지 제45항 중 어느 한 항에 있어서,
    상기 엔트로피 디코딩은 제1 엔트로피 디코더로 상기 제1 서브스트림(1530)을 디코딩하고 제2 엔트로피 디코더로 상기 제2 서브스트림(1531)을 디코딩하는 것을 포함하고,
    상기 제1 엔트로피 디코더 및 상기 제2 엔트로피 디코더를 사용한 엔트로피 디코딩은 적어도 부분적으로 병렬로 수행되는,
    디코딩 방법.
  47. 제29항 내지 제46항 중 어느 한 항에 있어서,
    상기 채널은 신경망의 출력 채널 또는 잠재 표현 채널인,
    디코딩 방법.
  48. 제35항 내지 제47항 중 어느 한 항에 있어서,
    상기 엔트로피 디코딩은 산술 디코딩이고,
    상기 디코딩 방법은, 상기 제1 서브스트림(1530) 또는 상기 제2 서브스트림(1531)으로부터의 다중화된 부분의 디코딩을 위해,
    상기 후행 비트 길이 지시로부터 선행 인코더 상태 비트의 수량을 추출하는 단계 ― 상기 서브스트림은 코딩된 비트를 포함하고 상기 후행 비트는 선행 인코더 상태 비트임 ―;
    상기 추출된 선행 인코더 상태 비트에 상기 인코더 상태 비트의 미리 결정된 최대 길이까지 0을 포스트펜딩하는 것을 포함하는 인코더 상태 비트를 결정하는 단계; 및
    상기 코딩된 비트 및 상기 결정된 인코더 상태 비트를 포함하는 비트로부터 다중화된 부분을 산술적으로 디코딩하는 단계
    를 포함하는, 디코딩 방법.
  49. 제48항에 있어서,
    상기 인코더 상태 비트를 결정하는 단계는 상기 추출된 선행 인코더 상태 비트에 상기 인코더 상태 비트의 미리 결정된 최대 길이까지 0이 뒤따르는 값 1을 가진 하나의 비트를 포스트펜드하는 단계
    로 구성되는, 디코딩 방법.
  50. 제35항 내지 제49항 중 어느 한 항에 있어서,
    상기 산술 디코딩은 범위 디코딩인,
    디코딩 방법.
  51. 컴퓨터 프로그램으로서,
    비일시적 매체에 저장되고,
    하나 이상의 프로세서에서 실행될 때 상기 하나 이상의 프로세서로 하여금 제1항 내지 제50항 중 어느 한 항에 따른 방법의 단계를 실행하게 하는 코드 명령어를 포함하는,
    컴퓨터 프로그램.
  52. 동일한 크기의 복수의 채널(1830)의 데이터를 비트스트림(1570)으로 엔트로피 인코딩하는 장치로서,
    처리 회로를 포함하며,
    상기 처리 회로는,
    상기 복수의 채널의 각 채널로부터의 제1 크기의 부분(1840)을 다중화한 다음, 상기 제1 크기의 다중화된 부분(1840)을 제1 서브스트림(1530)으로 인코딩하며,
    상기 복수의 채널의 각 채널로부터의 제2 크기의 부분(1841)을 다중화한 다음, 상기 제2 크기의 다중화된 부분(1841)을 제2 서브스트림(1531)으로 인코딩하도록
    구성되며,
    상기 인코딩은 상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)으로 독립적으로 수행되는 엔트로피 인코딩인,
    엔트로피 인코딩하는 장치.
  53. 비트스트림(1570)을 동일한 크기의 복수의 채널(1820)의 데이터로 엔트로피 디코딩하는 장치로서,
    처리 회로를 포함하며,
    상기 처리 회로는,
    제2 서브스트림(1831)과 독립적으로 제1 서브스트림(1830)을 엔트로피 디코딩하고,
    상기 제1 서브스트림(1530) 및 상기 제2 서브스트림(1531)으로부터의 제1 크기의 부분(1840) 및 제2 크기의 부분(1841)을 상기 동일한 크기의 복수의 채널(1820)로 역다중화하도록
    구성되는, 엔트로피 디코딩하는 장치.
KR1020237029749A 2021-04-26 2021-04-26 병렬 엔트로피 코딩 KR20230140460A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/RU2021/000173 WO2022231452A1 (en) 2021-04-26 2021-04-26 Parallel entropy coding

Publications (1)

Publication Number Publication Date
KR20230140460A true KR20230140460A (ko) 2023-10-06

Family

ID=76444524

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237029749A KR20230140460A (ko) 2021-04-26 2021-04-26 병렬 엔트로피 코딩

Country Status (6)

Country Link
US (1) US20240056098A1 (ko)
EP (1) EP4292283A1 (ko)
JP (1) JP2024510268A (ko)
KR (1) KR20230140460A (ko)
CN (1) CN117242775A (ko)
WO (1) WO2022231452A1 (ko)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4152749B1 (en) * 2011-07-15 2024-04-10 GE Video Compression, LLC Sample array coding for low-delay
US10554977B2 (en) * 2017-02-10 2020-02-04 Intel Corporation Method and system of high throughput arithmetic entropy coding for video coding

Also Published As

Publication number Publication date
EP4292283A1 (en) 2023-12-20
CN117242775A (zh) 2023-12-15
US20240056098A1 (en) 2024-02-15
JP2024510268A (ja) 2024-03-06
WO2022231452A1 (en) 2022-11-03

Similar Documents

Publication Publication Date Title
CN113168718B (zh) 视频解码方法、装置和存储介质
JP7529349B2 (ja) エンコーダ、デコーダ、および対応するイントラ予測方法
KR102079803B1 (ko) 영상 디코딩 방법 및 이를 이용하는 장치
JP6749922B2 (ja) 高効率ビデオ符号化(hevc)画面コンテンツ符号化(scc)における改善されたパレットモード
KR20210135331A (ko) 인코더, 디코더 및 대응하는 인트라 예측을 위한 방법
KR20210144880A (ko) 포인트 클라우드 코딩을 위한 속성 코딩 방법
CN113892260B (zh) 一种视频编解码方法和相关装置
AU2023202684B2 (en) Method and apparatus for intra prediction
JP2022524357A (ja) エンコーダ、デコーダ、及び対応するインター予測方法
JP2022522571A (ja) 任意のctuサイズのためのibc検索範囲最適化を用いるエンコーダ、デコーダおよび対応する方法
WO2014050151A1 (en) System for signaling idr and bla pictures
KR102626200B1 (ko) Cbf 플래그들의 효율적인 시그널링의 방법
KR102662633B1 (ko) 네트워크 추상화 유닛 헤더에서의 타일 식별
KR20220051399A (ko) 시퀀스 파라미터 세트에서의 서브픽처 시그널링을 위한, 인코더, 디코더 및 대응하는 방법
KR20220127351A (ko) 하이 레벨 신택스를 시그널링하는 것에 관한 인코더, 디코더 및 대응하는 방법
CN114830673A (zh) 用于多个层的共享解码器图片缓冲器
JP7397878B2 (ja) イントラ・サブ・パーティション・コーディング・モードのための方法及び装置
JP2023153193A (ja) クロミナンス量子化パラメータのシグナリングのための方法及び装置
US20240056577A1 (en) Handling trailing bits in arithmetic encoding and decoding
US20240056098A1 (en) Parallel entropy coding
KR102577071B1 (ko) 가장 가능성 있는 인트라 모드를 예측하는 방법 및 장치
KR102257754B1 (ko) 영상의 부호화/복호화 방법 및 이를 이용하는 장치
KR102246634B1 (ko) 영상의 부호화/복호화 방법 및 이를 이용하는 장치
JP2022526770A (ja) ビデオコーディングのための変換ユニット区分方法
US20240348816A1 (en) Method and non-transitory computer readable storage medium for video generative compression