KR20230141842A - 산술 인코딩 및 디코딩에서의 트레일링 비트 처리 - Google Patents

산술 인코딩 및 디코딩에서의 트레일링 비트 처리 Download PDF

Info

Publication number
KR20230141842A
KR20230141842A KR1020237029857A KR20237029857A KR20230141842A KR 20230141842 A KR20230141842 A KR 20230141842A KR 1020237029857 A KR1020237029857 A KR 1020237029857A KR 20237029857 A KR20237029857 A KR 20237029857A KR 20230141842 A KR20230141842 A KR 20230141842A
Authority
KR
South Korea
Prior art keywords
bits
bit
bitstream
trailing
coded
Prior art date
Application number
KR1020237029857A
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 KR20230141842A publication Critical patent/KR20230141842A/ko

Links

Classifications

    • 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]
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/14Coding unit complexity, e.g. amount of activity or edge presence estimation
    • 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/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/18Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a set of transform coefficients
    • 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/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
    • 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/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • H04N19/463Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
    • 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/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)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

데이터를 비트스트림으로 인코딩하고 비트스트림으로부터 데이터를 디코딩하는 방법 및 장치가 기술된다. 상기 방법은 인코딩 프로세스의 트레일링 비트 내에 관련 유효 비트만을 포함함으로써 비트스트림의 길이를 줄일 수 있다. 이러한 리딩 트레일링 비트의 양이 결정되고 가장 적은 양의 트레일링 비트가 구성될 수 있다. 리딩 트레일링 비트의 양에 대한 지시가 비트스트림에 포함된다. 따라서 패딩이 필요하지 않으므로, 결과적으로 시그널링해야 하는 비트 수가 줄어든다.

Description

산술 인코딩 및 디코딩에서의 트레일링 비트 처리
본 개시는 산술 인코딩 및 디코딩에 관한 것이다. 특히, 본 개시는 트레일링 비트(trailing bit)의 처리에 관한 것이며, 특히 트레일링 비트를 비트스트림에 포함시키고 비트스트림으로부터 파싱하는 것에 관한 것이다.
비디오 코딩(비디오 인코딩 및 디코딩)은, 예를 들어 방송 디지털 TV, 인터넷 및 이동 네트워크를 통한 비디오 송신, 화상 채팅(video chat), 화상 회의(video conferencing)와 같은 실시간 대화 애플리케이션, 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, AVC(Advanced Video Coding), ITU-T H.265, HEVC(High Efficiency Video Coding), ITU-T H.266, VVC(Versatile Video Coding) 및 예컨대 확장성(scalability) 및/또는 3차원(3D) 확장과 같은, 이러한 표준의 확장을 포함한다.
비교적 짧은 비디오이더라도 묘사하는 데 필요한 비디오 데이터의 양은 상당할 수 있으며, 이는 대역폭 용량이 한정된 통신 네트워크를 통해 데이터를 스트리밍하거나 통신하는 경우 어려움을 초래할 수 있다. 따라서 비디오 데이터는 일반적으로 현대의 통신 네트워크를 통해 통신하기 전에 압축된다. 메모리 자원은 한정될 수 있기 때문에 비디오가 저장 디바이스에 저장되는 경우에 비디오의 크기도 문제가 될 수 있다. 비디오 압축 디바이스는 흔히 근원지(source)에서 소프트웨어 및/또는 하드웨어를 사용하여 송신 또는 저장 전에 비디오 데이터를 코딩하여, 디지털 비디오 이미지를 표현하는 데 필요한 데이터의 양을 줄인다. 압축된 데이터는 그 다음에 목적지(destination)에서 비디오 데이터를 디코딩하는 비디오 압축해제 디바이스에 의해 수신된다. 한정된 네트워크 자원과 더 높은 비디오 품질에 대한 요구가 계속 증가함에 따라, 픽처 품질을 거의 또는 전혀 희생하지 않고 압축률을 향상시키는 개선된 압축 및 압축해제 기술이 바람직하다.
비디오의 인코딩 및 디코딩은, 예를 들어 H.264/AVC, HEVC(H.265), VVC(H.266) 또는 다른 비디오 코딩 기술과 호환되는 표준 비디오 인코더 및 디코더에 의해 수행될 수 있다. 더욱이, 비디오 코딩 또는 그 일부는 신경망에 의해 수행될 수도 있다.
임의의 인코딩 또는 디코딩 또는 정지 픽처 또는 이미지 또는 신경망의 특징 채널(feature channel)과 같은 기타 소스 신호(source signal)에서, 엔트로피 코딩이 널리 사용되고 있다. 특히, 산술 코딩(arithmetic coding)은 최신 코딩 접근법에서 중요성이 높아졌다. 따라서, 엔트로피 코딩의 효율을 향상시키는 것이 바람직할 수 있다.
본 개시의 실시예는 데이터를 비트스트림으로 산술 인코딩하고, 코딩된 비트(coded bit)와 리딩 트레일링 비트(leading trailing bits)를 포함하는 비트스트림으로부터 데이터를 산술 디코딩하는 장치 및 방법을 제공한다.
본 발명의 실시예는 독립항의 특징에 의해 정의되고, 종속항의 특징에 의해 실시예의 더 유리한 구현이 정의된다.
일 실시예에 따르면, 입력 데이터를 비트스트림으로 산술 인코딩하는 방법이 제공되며, 상기 방법은, 상기 입력 데이터를 코딩된 비트와 트레일링 비트(trailing bit)로 산술 인코딩하는 단계; 상기 코딩된 비트를 상기 비트스트림에 포함시키는 단계; 산술 인코딩된 입력 데이터의 구간의 최소값과 최대값을 결정하는 단계; 연속적인 트레일링 비트이고, 또한 결정된 최대값을 나타내는 제1 MSB(Most Significant Bit)들 내에서, 결정된 최소값을 나타내는 제2 MSB들 내에서와 동일한 값을 갖는 리딩 트레일링 비트의 양을 결정하는 단계; 및 상기 리딩 트레일링 비트의 결정된 양에 대한 지시, 및 상기 리딩 트레일링 비트를 상기 비트스트림에 포함시키는 단계를 포함한다.
전체 트레일링 비트 대신 리딩 트레일링 비트를 비트스트림에 포함시키면 비트스트림 내의 비트 양을 감소시킬 수 있고 따라서 예컨대, 동일한 품질에서 레이트를 감소시킬 수 있다. 다시 말해, 결정된 리딩 트레일링 비트 만으로도(나머지 트레일링 비트 없이) 범위 구간(range interval)을 정의하기에 충분하므로, 나머지 트레일링 비트는 비트스트림에 포함될 필요가 없으며 리딩 트레일링 비트의 지시된 양에 기초하여 디코더에서 재구축될 수 있다. 이로써 품질을 저하시키지 않고 레이트를 절약할 수 있다.
예시적인 구현에 따르면, 상기 방법은 단계들을 포함하며, 상기 리딩 트레일링 비트의 양인 NumTrailingBits는 다음: NumTrailingBits = CLZ ( (LOW + RANGE - 1) XOR LOW)에 의해 결정되며, CLZ()는 리딩 0(leading zero)의 개수이고, LOW는 상기 구간의 최소값이며, RANGE는 상기 구간의 범위이다.
상기 리딩 트레일링 비트의 양은 예를 들어, 가장 가까운 바이트 경계로 올림(rounding)하는 대신 정확하게 결정될 수 있다. 이로써, 비트스트림 내의 비트 양을 더욱 감소시킬 수 있다.
예를 들어, 상기 리딩 트레일링 비트의 양에 대한 지시는 상기 비트스트림 내에서 상기 코딩된 비트 및 상기 리딩 트레일링 비트에 선행한다.
비트스트림 내에서 코딩된 비트 및 리딩 트레일링 비트에 선행하는 리딩 비트의 양에 대한 지시는 전체 비트스트림을 버퍼링하지 않고도 비트스트림으로부터 효율적인 추출을 가능하게 할 수 있다.
예시적인 구현에서, 상기 리딩 트레일링 비트에, 상기 비트스트림에 포함되기 전에 값이 1인 1비트가 뒤에 추가된다(postpended).
이러한 접근법은 하나의 값 비트(one-value bit)를 생략하는 대신 사용할 수 있다. 상세한 설명에서 언급되는 바와 같이, 현재 비디오 코덱과 같은 일부 알려진 코덱에서는 하나의 값 비트가 비트스트림에 지시된다.
특히, 상기 산술 인코딩하는 단계, 상기 구간의 최소값과 최대값을 결정하는 단계, 및 상기 리딩 트레일링 비트의 양을 결정하는 단계는 제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 산술 인코더를 사용하는 상기 산술 인코딩은 적어도 부분적으로 병렬로 수행된다.
위에서 언급한 적어도 두 개의 서브스트림에 대해 개별적으로 인코딩 방법을 수행할 가능성은 병렬 인코딩을 가능하게 한다. 이는 인코딩 효율의 향상을 촉진하는 데 도움이 될 수 있다.
예시적인 구현에서, 상기 산술 인코딩은 범위 인코딩(range encoding)이다.
범위 인코딩은 레지스터 또는 일반적으로 고속 메모리 크기가 한정되어 있는 하드웨어 및 소프트웨어 아키텍처에 특히 적합할 수 있다.
예를 들어, 상기 산술 인코딩 동안에 상기 구간의 현재 최소값과 현재 최대값은 미리 구성된 크기의 메모리에 저장되고; 상기 코딩된 비트를 상기 비트스트림에 포함시키는 단계는 안정 비트(stable bit) 중 미리 정의된 양의 비트를 상기 메모리에서 상기 비트스트림으로 이동시키는 단계를 포함하고; 상기 안정 비트는 상기 현재 최소값과 상기 현재 최대값의 이진 표현의 MSB에서 동일한 값을 갖는 연속적인 비트이다.
1비트보다 큰 부분의 코딩된 비트를 출력하면 보다 효율적인 소프트웨어 및/또는 구현을 제공할 수 있다.
예시적인 구현에서, 상기 산술 인코딩 동안에 상기 리딩 트레일링 비트의 양은 상기 안정 비트 중 미리 정의된 비트의 양에 가깝고; 뒤에 값이 1인 1비트를 추가하고 그 뒤에 안정 비트 중 미리 정의된 비트의 양까지 0을 추가하여 상기 리딩 트레일링 비트로부터 트레일링 코딩된 비트(trailing coded bit)가 생성되고; 상기 코딩된 비트를 상기 비트스트림에 포함시키기 전에 상기 트레일링 코딩된 비트가 상기 코딩된 비트에 포함되며; 0인 리딩 트레일링 비트(zero leading trailing bit)에 대한 지시가 상기 비트스트림에 포함된다.
따라서, 트레일링 비트의 양에 대한 지시와 함께 많은 리딩 트레일링 비트에 대한 증가된 시그널링 노력을 회피할 수 있다. 대신, 더 많은 코딩된 비트를 가지며 0인 리딩 트레일링 비트를 시그널링하기 위한 시그널링 노력을 감소시킬 수 있다.
일 실시예에 따르면, 비트스트림으로부터 데이터를 산술 디코딩(arithmetic decoding)하는 방법이 제공되며, 상기 방법은, 상기 비트스트림으로부터 리딩 트레일링 비트의 양에 대한 지시를 추출하는 단계; 상기 비트스트림으로부터 복수의 코딩된 비트를 추출하는 단계; 상기 비트스트림으로부터, 상기 리딩 트레일링 비트의 양에 대한 지시에 의해 지정되는 리딩 트레일링 비트 추출하는 단계; 추출된 리딩 트레일링 비트 뒤에 상기 트레일링 비트의 미리 결정된 최대 길이까지 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 산술 디코더를 사용하는 상기 산술 디코딩은 적어도 부분적으로 병렬로 수행된다.
서브스트림의 병렬 디코딩은 전체 비트스트림의 더 빠른 디코딩을 가능하게 할 수 있다.
예시적인 구현에서, 상기 산술 디코딩은 범위 디코딩(range decoding)이다.
범위 인코딩은 레지스터 또는 일반적으로 고속 메모리 크기가 한정되어 있는 하드웨어 및 소프트웨어 아키텍처에 특히 적합할 수 있다.
예시적인 구현에서, 비일시적 매체에 저장되고 코드 명령어를 포함하는 컴퓨터 프로그램이 제공되며, 상기 코드 명령어는 하나 이상의 프로세서에서 실행될 때, 상기 하나 이상의 프로세서로 하여금 전술한 방법 중 어느 한 방법의 단계를 실행하게 한다.
일 실시예에 따르면, 입력 데이터를 비트스트림으로 산술 인코딩하기 위한 장치가 제공되며, 상기 장치는 처리 회로를 포함하고, 상기 처리 회로는, 상기 입력 데이터를 코딩된 비트와 트레일링 비트로 산술 인코딩하도록; 상기 코딩된 비트를 상기 비트스트림에 포함시키도록; 산술 인코딩된 입력 데이터의 구간의 최소값과 최대값을 결정하도록; 연속적인 트레일링 비트이고, 또한 결정된 최대값을 나타내는 제1 MSB 내에서, 결정된 최소값을 나타내는 제2 MSB 내에서와 동일한 값을 갖는 리딩 트레일링 비트 양을 결정하도록; 그리고 상기 비트스트림에 상기 리딩 트레일링 비트의 결정된 양에 대한 지시, 및 상기 리딩 트레일링 비트를 포함시키도록 구성된다.
일 실시예에 따르면, 비트스트림으로부터 데이터를 산술 디코딩하기 위한 장치가 제공되며, 상기 장치는 처리 회로를 포함하고, 상기 처리 회로는, 상기 비트스트림으로부터 리딩 트레일링 비트의 양에 대한 지시를 추출하도록; 상기 비트스트림으로부터 복수의 코딩된 비트를 추출하도록; 상기 비트스트림으로부터, 상기 리딩 트레일링 비트의 양에 대한 지시에 의해 지정되는 상기 리딩 트레일링 비트 추출하도록; 추출된 리딩 트레일링 비트에 상기 트레일링 비트의 미리 결정된 최대 길이까지 0을 추가하는 것을 포함하여 트레일링 비트를 결정하도록; 그리고 상기 코딩된 비트와 결정된 트레일링 비트를 포함하는 비트로 표현되는 코딩된 값을 산술 디코딩하여 상기 데이터를 획득하도록 구성된다.
상기 장치들은 위에서 설명한 방법의 이점을 제공한다.
본 발명은 하드웨어(hardware, HW) 및/또는 소프트웨어(software, SW) 또는 이들의 임의 조합으로 구현될 수 있다. 또한 HW 기반 구현은 SW 기반 구현과 결합될 수 있다.
하나 이상의 실시예에 대한 세부 사항은 첨부된 도면과 아래 설명에 기재되어 있다. 다른 특징, 목적 및 이점은 상세한 설명, 도면 및 청구범위로부터 명백해질 것이다.
이하에서는, 첨부된 도면을 참조하여 본 발명의 실시예를 보다 상세히 설명한다.
도 1은 산술 코딩으로 두 개의 심볼이 있는 알파벳을 사용하는 메시지의 인코딩을 나타낸 개략도이다.
도 2는 8개의 심볼이 있는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제1 단계의 개략도이다.
도 3은 8개의 심볼이 있는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제2 단계의 개략도이다.
도 4는 8개의 심볼이 있는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제3 단계의 개략도이다.
도 5는 8개의 심볼이 있는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 제4 단계의 개략도이다.
도 6은 8개의 심볼이 있는 알파벳을 사용하는 메시지의 산술(범위) 코딩의 최종 단계의 개략도이다.
도 7a∼도 7d는 코딩 단계 동안 범위의 최소값과 최대값을 이진수로 표현한 개략도이다.
도 8은 예시적인 산술 디코딩을 나타낸 개략도이다.
도 9는 예시적인 인코딩 방법을 나타낸 흐름도이다.
도 10은 예시적인 디코딩 방법을 나타낸 흐름도이다.
도 11은 픽처 인코딩에서 일부 실시예의 산술 인코딩을 채용하는 것을 나타낸 블록도이다.
도 12는 픽처 디코딩에서 일부 실시예의 산술 인코딩을 채용하는 것을 나타낸 블록도이다.
도 13은 입력 데이터의 채널들을 단일 스트림으로 인코딩하는 단일 인코더의 개략도이다.
도 14는 입력 데이터의 채널들을 서브스트림들로 인코딩하고 서브스트림들을 비트스트림으로 연결하는 멀티코어 인코더의 개략도이다.
도 15는 입력 데이터의 채널을 서브스트림들로 인터리빙 및 인코딩하고 서브스트림들을 비트스트림으로 연결하는 멀티코어 인코더의 개략도이다.
도 16은 동일한 리딩 트레일링 비트의 결정을 나타낸 개략도이다.
도 17은 길이 지시, 코딩된 비트 및 리딩 트레일링 비트를 포함하는 비트스트림의 개략도이다.
도 18은 입력 데이터로부터 동일한 크기의 채널을 획득하기 위한 전처리 및 인터리빙되고 인코딩된 서브스트림을 형성하기 위한 셔플링 프로세스(shuffling process)의 개략도이다.
도 19는 본 발명의 실시예를 구현하도록 구성된 비디오 코딩 시스템의 일례를 도시한 블록도이다.
도 20은 본 발명의 실시예를 구현하도록 구성된 비디오 코딩 시스템의 다른 예를 도시한 블록도이다.
도 21은 인코딩 장치 또는 디코딩 장치의 일례를 나타낸 블록도이다.
도 22는 인코딩 장치 또는 디코딩 장치의 다른 예를 나타낸 블록도이다.
이하의 설명에서는 본 개시의 일부를 형성하고 본 발명의 실시예의 특정 측면 또는 본 발명의 실시예가 사용될 수 있는 특정 측면을 예시로서 보여주는 첨부 도면을 참조한다. 본 발명의 실시예는 다른 측면에서 사용될 수 있고 도면에 도시되지 않은 구조적 또는 논리적 변경을 포함할 수 있다는 것이 이해된다. 따라서 이하의 상세한 설명은 한정적인 의미로 해석되어서는 안되며, 본 발명의 범위는 첨부된 청구범위에 의해 정해진다.
예를 들어, 설명된 방법과 관련된 개시 내용은 방법을 수행하도록 구성된 대응하는 디바이스 또는 시스템에도 유효하며, 그 반대도 마찬가지임이 이해된다. 예를 들어, 하나 또는 복수의 특정 방법 단계가 설명되는 경우, 대응하는 디바이스는 설명된 하나 또는 복수의 방법 단계를 수행하기 위해 하나 또는 복수의 유닛, 예컨대 기능 유닛(예컨대, 하나 또는 복수의 단계를 수행하는 하나의 유닛, 또는 각각이 복수의 단계 중 하나 이상을 수행하는 복수의 유닛)을, 그러한 하나 이상의 유닛이 도면에 명시적으로 기재되거나 예시되지 않더라도 포함할 수 있다. 한편, 예를 들어, 특정 장치가 하나 또는 복수의 유닛, 예컨대, 기능 유닛에 기초하여 설명되는 경우, 대응하는 방법은 하나 또는 복수의 유닛의 기능을 수행하기 위한 하나의 단계(예컨대, 하나 또는 복수의 유닛의 기능을 수행하는 하나의 단계, 또는 각각 복수의 유닛 중 하나 이상의 기능을 수행하는 복수의 단계)를, 그러한 하나 또는 복수의 단계가 도면에 명시적으로 기재되거나 예시되지 않더라도 포함할 수 있다. 또한, 여기에 설명된 다양한 예시적인 실시예 및/또는 측면의 특징은 달리 특별히 언급이 없으면 서로 결합될 수 있음이 이해된다.
비디오 코딩은 보통 비디오 또는 비디오 시퀀스를 형성하는 픽처의 시퀀스를 처리하는 것을 의미한다. 비디오 코딩 분야에서는 픽처(picture)라는 용어 대신, 프레임(frame) 또는 이미지(image)라는 용어가 동의어로 사용될 수 있다. 비디오 코딩은 두 부분, 즉 비디오 인코딩과 비디오 디코딩을 포함한다. 비디오 인코딩은 소스 측에서 수행되며, 보통 원본 비디오 픽처를 (예컨대, 압축에 의해) 처리하여 (더 효율적인 저장 및/또는 전송을 위해) 비디오 픽처를 표현하는 데 필요한 데이터의 양을 줄이는 것을 포함한다. 비디오 디코딩은 목적지 측에서 수행되고 보통 비디오 픽처를 재구축하기 위해 인코더와 비교하여 역처리를 포함한다. 비디오 픽처(또는 나중에 설명될 것인 바와 같은, 일반적으로 픽처)의 "코딩"에 언급하는 실시예는 비디오 픽처의 "인코딩" 및 "디코딩" 모두와 관련된 것으로 이해되어야 한다. 인코딩 부분과 디코딩 부분의 조합을 CODEC(COding and DECoding)이라고도 한다.
무손실 비디오 코딩의 경우, 원본(original) 비디오 픽처는 재구축될 수 있다. 즉, 재구축된 비디오 픽처는 원본 비디오 픽처와 동일한 품질을 갖는다(저장 또는 송신 중에 송신 오류 또는 기타 데이터 손실이 없다고 가정). 손실 비디오 코딩의 경우, 비디오 픽처를 표현하는 데이터의 양을 줄이기 위해, 예컨대 양자화에 의한 추가 압축이 수행되는데, 이는 디코더에서 완전하게 재구축될 수 없다. 즉, 재구축된 비디오 픽처의 품질은 원본 비디오 픽처의 품질에 비해 더 낮거나 더 나쁘다.
[산술 인코딩]
엔트로피 코딩은 보통 무손실 코딩으로서 채용된다. 산술 코딩은 메시지를 나타내는 구간(범위) 내에 메시지를 이진 실수로 인코딩하는 엔트로피 코딩의 한 클래스이다. 여기서 메시지라는 용어는 심볼의 시퀀스를 의미한다. 심볼은 미리 정의된 심볼의 알파벳 중에서 선택된다. 예를 들어 알파벳은 0과 1의 두 값으로 구성될 수 있다. 이러한 알파벳을 사용하는 메시지는 비트의 시퀀스이다. 심볼(0과 1)는 서로 다른 빈도로 메시지에 나타날 수 있다. 다시 말해, 심볼 확률이 불균일할 수 있다. 실제로, 분포가 덜 균일할수록 일반적으로 엔트로피 코드, 특히 산술 코드로 달성할 수 있는 압축률이 높아진다. 산술 코딩은 알파벳의 심볼 각각에 대한 심볼 확률을 지정하는 선험적으로 알려진 확률 모델을 사용한다.
알파벳은 이진법일 필요가 없다. 오히려 알파벳은 예컨대 0부터 7까지의 8개 값으로 구성될 수 있다. 일반적으로, 임의 크기의 임의의 알파벳이 사용될 수 있다. 보통, 알파벳은 코딩된 데이터의 값 범위에 의해 주어진다.
메시지를 나타내는 구간은, 메시지가 코딩되는 알파벳 심볼의 확률에 따라 초기 범위를 분할하여 획득된다.
예를 들어 현재 구간을 처음에 초기 구간 [0, 1)이라고 가정한다. 메시지의 심볼 각각에 대해 다음 두 단계가 수행된다:
1) 현재 구간을 가능한 각각의 알파벳 심볼에 대해 하나씩 서브구간(subinterval)으로 세분화한다. 심볼의 서브구간의 크기는 (심볼 소스의) 확률 모델에 따라 해당 심볼이 메시지에서 다음 심볼이 될 것으로 추정되는 확률에 비례한다.
2) 메시지에서 실제로 다음에 나타나는 심볼에 대응하는 서브구간을 선택하고, 선택된 서브구간을 새로운 현재 구간으로 한다.
제3 단계에서는 현재 구간을 다른 모든 가능한 구간과 구별하기에 충분한 비트가 출력된다. 이 단계는 단계 1과 단계 2에서의 인코딩 중에 이미 수행되었을 수도 있고 메시지 전체의 인코딩 후에 수행될 수도 있다. 메시지의 모든 심볼에 대해 단계 1)과 2)를 반복한 후 획득된 구간의 길이는 개별 심볼의 확률의 곱과 명백히 동일하며, 이는 메시지 내의 특정 심볼 시퀀스의 확률이기도 하다.
이론적으로 산술 코더는 구간을 0에서 1까지 재귀적으로 분할하여 임의 길이의 메시지를 인코딩하며, 그 결과 구간은 점점 작아진다. 실제로 시스템은 유한한 비트 심도에 의해 제한되며, 이산된 값(discrete value)만 표현할 수 있다. 따라서 구간이 작을수록 더 높은 정밀도의 연산이 필요할 것이다. 또한, 전체 메시지를 읽을 때까지 출력은 생성되지 않는다. 이 두 가지 문제에 대한 해결책은 일부 비트가 알려지자마자 출력한 다음, 각각의 출력 비트에 대한 현재 구간의 길이를 두 배로 늘려 구간의 (여전히) 알려지지 않은 부분만 반영하는 것이다. 실제로 연산은 부동 소수점이나 정확한 유리수보다는 충분히 긴 정수로 현재 구간을 저장함으로써 수행될 수 있다.
실제 사용을 위해 개선된 산술 코더의 변형을 범위 코더(range coder)라고 하는데, 이는 구간 [0,1)을 사용하지 않고 유한 범위의 정수, 예컨대 0부터 255까지를 사용한다. 이 범위는 알파벳 심볼의 확률에 따라 분할된다. 모든 알파벳 심볼을 그들의 확률에 따라 기술하기 위해 나머지 범위가 너무 작아지면 범위를 다시 정규화할 수 있다.
여기에 채용된 용어에 대해 설명하면, 현재 구간은 그 최소값(LOW로 표시됨)과 그 최대값(HIGH로 표시됨)으로 주어진다. 구간의 길이는 RANGE로 표시된다. 일반적으로, HIGH = LOW + RANGE이며, RANGE는 최소 크기의 (구분 가능한) 서브구간의 개수로 표현된다. 심볼을 인코딩하기 위한 최소 범위는 BOTTOM이다. 이 최소 범위는 가능성이 가장 낮은 심볼이 여전히 적어도 1의 유효 범위를 갖도록 보장한다. 다시말해, BOTTOM은 범위가 모든 알파벳 심볼에 대응하는 구별 가능한 구간으로 여전히 분할될 수 있도록 보장하기 위해, 알파벳 심볼과 그 확률에 기초하여 결정될 수 있는 설계 파라미터이다.
HIGH 위치는 초기의 최대 범위를 커버하는 데 필요한 비트 수를 나타낸다. BOTTOM 위치는 다른 심볼을 인코딩하기 위한 최소 범위를 커버하는 데 필요한 비트 수를 나타낸다. HIGH 위치와 미리 정해진 TOP 위치 사이의 비트량은 비트스트림에 스트리밍(삽입)될 수 있고, 코딩된 비트가 되는 최소 부분의 비트에 대응한다.
도 1은 산술 코딩의 예시적인 프로시저를 개략적으로 나타낸다. 코딩될 메시지는 두 개의 가능한 심볼 A와 B를 가진 알파벳으로 제공된다. 알파벳 {A, B}의 심볼운 확률 P(A)=2/3와 P(B)=1/3을 갖는다. 인코딩될 메시지는 AABA를 읽는다.
단계 0은 초기에 LOW=0(단계 0에서 low0 = 0)이므로 여기서는 HIGH에 대응하는 길이 Range0 (110)의 초기 구간을 보여준다. Range0의 하위 절반(lower half)에서, Range0 내에서 숫자의 이진 표현의 리딩 비트는 1(111)인 반면, Range0의 상위 절반(upper half)에서, 리딩 비트는 0(112)이다. 다시 말해, 단계들 중 어느 것에서 초기 범위의 상위 절반에 속하는 현재 구간은 첫 번째 리딩 비트 0을 가질 것인 반면, 초기 범위의 하위 절반에 속하는 현재 구간은 제1 리딩 비트 1을 가질 것이다. 초기 범위 내의 임의의 숫자(코드 값)가 8비트로 표현 가능하다고 가정하면, 범위는 0부터 255까지이므로, HIGH=255이다.
단계 1에서, Range0을 확률에 따라 나누어 첫 번째 심볼 A0을 인코딩한다. 이 예에서, 초기 구간은 전체 범위 크기의 1/3(122)(심볼 B0에 대응)과 2/3(121)(심볼 A0에 대응) 크기의 두 구간으로 분할된다. 확률에 따라 나눈다는 것은 초기 구간이 알파벳의 심볼 수(여기서는 두개의 심볼 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에 할당된다.
Range3이 비트 1(현재 최대 범위의 하위 절반에 대응)은 물론이고 비트 0(현재 최대 범위의 상위 절반에 대응)과도 겹치기 때문에, 단계 3에서 메시지 A0A1B2(141)는 여전히 명확하게 인코딩될 수 없으며, 따라서 자리올림(carrying)(150)이 수행된다. 아무것도 스트리밍되지 않는다(비트스트림에 비트가 포함되지 않음). Range3은 알파벳 심볼의 확률에 따라 단계 4에서 분할된다.
이제 인코딩될 메시지는 A0A1B2A3(151)을 읽는다. Range4는 여전히 두 가능한 비트 모두와 겹치고 인코딩될 더 이상의 심볼이 없으므로, 단계 5 및 단계 6에서 마무리짓기(finalization)(160)가 수행된다. 이는 메시지 AABA에 대한 모호하지 않은 명확한 코드(unambiguous code) 0011을 생성하기 위해 수행되는 수개의 재정규화를 포함한다.
도 2 내지 도 7은 8개의 알파벳 심볼 {0, 1, 2, 3, 4, 5, 6, 7}이 표준 정규 분포의 확률 밀도 함수(probability density function, PDF)(230)에 따른 확률을 갖는 범위 인코더의 일례를 도시한다. 심볼은 누적 분포 함수(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)로부터 획득된다. 이는 인코딩될 메시지의 첫 번째 심볼, 즉 "4"가 하위 엔드포인트(lower endpoint)(250) Low1 = 71 = 0100 0111.b 및 제외된 상위 엔드포인트(260) Low1 + Range1 = 199 = 1100 0111.b을 갖는 구간의 코드 값 중 하나로 표시됨을 의미하며, 이는 Range1 = 128에 대응한다. 총계 = const = 16(270)은 1/16의 작업 정밀도를 의미한다. 이는 가능성이 가장 낮은 심볼에 할당되는 서브범위가 현재 범위의 1/총계 = 1/16임을 나타낸다. 총계(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-720d)의 최소값과 구간(710a-710d)의 최대값은 이진수로 표현된다. 이는 실제로 현재 구간과, 인코딩의 현재 결과를 저장하는 목적으로 사용되는 두 개의 레지스터에 대응할 수 있다.
도 3에서는 누적 분포 함수(CDF)(340)를 Low1 = 71부터 시작하여 Range1 = 128에 적용하여 알파벳의 심볼(220)을 범위에 매핑한다. 메시지의 다음 심볼는 "4"이다. 이는 메시지(44)를 나타내는 새로운 현재 구간(350-360)을 생성한다. 도 7b에 도시된 이 구간은 새로운 하한(lower bound)(현재 최소값)(720b) Low2 = 106 = 0110, 1010.b) 및 새로운 상한(upper bound)(현재 최대값)(710b) Low2 + Range2 = 170 = 1010 1010.b. 새로운 Range2(320)은 64와 같다.
도 4와 도 7c는 인코딩 프로시저의 다음 단계를 도시한다. Range2(320)가 여전히 BOTTOM보다 크므로, 이 범위는 누적 분포 함수(440)에 따라 다시 나뉜다. 이는 심볼 2에 대해 Low3 = 111 = 0110 1111.b의 낮은 값(720c)과 Range3 = 4(410)를 산출한다. 따라서, 메시지 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) 스트림의 일부인 두 개의 코딩된 비트를 제외하고 동일한 시프트가 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 = 1(620)은 트레일링 비트에 대한 단일 값, 즉 Low5 = 188 = 1011 1100.b(650)을 생성한다. 따라서 메시지(4420)는 트레일링 비트를 코딩된 비트에 추가하여 인코딩되며, 그 결과 코딩된 값 444 = 01 1011 1100.b을 생성한다.
[산술 디코딩]
도 8은 예시적인 디코딩 프로세스를 도시한다. 디코더는 코딩된 값(비트)을 순차적으로 수신한다. 수신된 코딩된 값(820)은 전체 Range0 = HIGH = 255(810) 내에 있다. 확률 분포 함수는 디코더 측에서 알려져 있으므로 누적 분포 함수(830)에 의해 심볼(220)을 범위에 매핑한다. 디코더는 이 매핑의 역(inverse)을 모르므로, 심볼의 결정하려면 검색 프로세스가 필요하다. 디코더는 가장 가능성이 높은 심볼 "4"를 선택함으로써 인코딩된 심볼에 대해 제1 추측(guess)(840)을 하고, 이 심볼에 대응하는 범위의 Low 값(841)을 계산하고, 수신된 코딩된 값(820)이 이 Low 값(841)보다 높은지 검사한다.
수신된 코딩된 값(820)이 제1 추측(840)의 Low 값(841)보다 작으므로, 다음 추측(850)은 범위 내에서 더 낮은 값에 매칭되는 심볼, 즉 심볼 "0", "1", "2" 또는 "3" 중 하나이다. Low 값을 심볼의 나머지 구간 중간에서 대략 선택하면, 올바른(correct) 심볼을 획득하는 데 필요한 단계가 더 적으므로 디코딩 프로세스가 더 빨라진다. 이 예에서, 비교를 위해 선택되는 다음 Low 값(851)은 심볼 "2"에 대응한다.
심볼 "2"에 대한 테스트에서는 수신된 코딩 값이 심볼 "2"를 인코딩하는 범위의 Low(851)보다 높다는 결과를 낳는다. 따라서, 수신된 코딩된 값은 심볼 "2" 또는 "3"을 나타낼 수 있다. 최종 검사(860)는 "3"에 대응하는 범위의 Low 값(861)이 코딩된 값(820)보다 높다는 것을 드러낸다. 따라서 수신된 코딩된 값(820)은 심볼 "2"로 디코딩된다.
[다중 채널의 엔트로피 코딩]
도 13은 단일 인코더(single encoder)(1320)의 방식을 도시한다. 여기서 "단일 인코더"라는 용어는 인코더가 직렬로 작동한다는 사실, 즉 입력을 병렬이 아니라 순차적으로 인코딩한다는 사실을 나타낸다. 입력 데이터는 다수의 채널(1310)로 구성되거나 다수의 채널(310)을 포함할 수 있다. 이러한 예시적인 인코딩 프로세스에서, 각각의 채널의 부분은 따라서 순차적으로 인코딩된다. 각각의 채널(1330)로부터의 제1 부분 크기의 부분이 인코딩되고(그 결과 서로 다른 채널로부터 동일한 제1 크기의 부분을 다중화함) 그 뒤에 각각의 채널(1340)로부터의 제2 부분 크기의 부분이 인코딩된다(그 결과 서로 다른 채널로부터 동일한 제2 크기의 부분을 다중화함). 마지막 부분의 인코딩 후에 인코더에 남아 있는 트레일링 비트(1350)가 메인 단일 스트림 뒤에 추가된다(post-pended).
단일(또는 단일 코어) 엔트로피 인코더에는 코딩 끝에 단 하나의 마무리짓기 단계(finalization step)만 있으며 스트림은 바이트 정렬을 위해 0인 비트로 패딩된다. 몇 가지 추가 비트를 시그널링하는 데 문제가 없다. 그러나 이러한 인코딩과 이에 따른 디코딩도 병렬화하는 것은 어렵다.
도 14는 병렬(예컨대, 멀티코어) 인코더(1420)의 예시적인 방식을 도시한다. 각각의 입력 데이터 채널(1410)은 코딩된 비트(1430-1433) 및 트레일링 비트(1440-1443)를 포함하는 개별 서브스트림으로 인코딩될 수 있다. 서브스트림(1450)의 길이가 시그널링된다.
병렬 처리 구현에서, 비트스트림은 최종 단계에서 연결되는 여러 서브스트림으로 구성된다. 각각의 서브스트림은 마무리지어져야 한다. 이는 서브스트림이 서로 독립적으로 인코딩되어, 하나의 서브스트림의 인코딩(따라서 디코딩도)이 다른 하나 이상의 서브스트림의 이전 인코딩(또는 디코딩)을 필요로 하지 않기 때문이다.
엔트로피 인코딩, 특히 산술 인코딩의 마무리짓기는 하나 이상의 트레일링 비트를 비트스트림으로 인코딩하는 것 및/또는 가장 가까운 바이트 경계 또는 미리 정의된 양의 비트 경계에 패딩하는 것을 포함할 수 있다. 그러나 다수의 서브스트림이 병렬로 인코딩되는 경우, 패딩으로 인해 엄청난 양의 무의미한 패딩 비트가 포함될 수 있다. 이 문제는 각각의 스레드(thread)의 트레일링 비트의 수가 가장 가까운 바이트 경계로 올림되지 않고(not rounded), 트레일링 비트 중에서 중요한 리딩 비트가 결정되고 그 양이 비트스트림 내에서 지정되면 해결될 수 있다.
이는 도 15에 예시적으로 도시되어 있으며, 여기서 트레일링 비트(1540-1543)는 코딩된 데이터(1530-1533) 바로 뒤에 비트스트림(1570)에 추가된다. 트레일링 비트(1560)의 길이도 비트스트림(1570)에 포함된다. 이 예시적인 실시예의 멀티코어 인코더는 여러 입력 데이터 채널(1510)의 부분을 복수의 서브스트림으로 인코딩하기 전에 다중화하고 가능하면 셔플링한다.
서브스트림을 생성하기 위한 완전한 부분 다중화는 서브스트림을 인코딩하기 전에 형성될 필요가 없다는 점에 유의하기 바란다. 반대로, 엔트로피 인코더는 서로 다른 채널로부터 부분을 부분별로 직접 수신하여 서브스트림으로 처리할 수 있다. 셔플링(shuffling)이라는 용어는 멀티플렉스 내에서(그리고 결과적으로 멀티플렉스를 인코딩한 후 서브스트림 내에서도) 부분의 시퀀스(순서)를 의미한다.
입력 데이터 채널은 신경망에 의해 일부 데이터를 처리함으로써 획득되는 채널을 의미할 수 있다. 예를 들어, 입력 데이터는 출력 채널이나 신경망의 잠재 표현 채널(latent representation channel)과 같은 특징 채널(feature channel)일 수 있다. 예시적인 구현에서, 신경망은 심층 신경망(deep neural network) 및/또는 컨벌루션 신경망(convolutional neural network) 등이다. 신경망은 (정지 또는 움직이는) 픽처를 처리하도록 훈련될 수 있다. 처리는 픽처 인코딩 및 재구축을 위한 것일 수도 있고 객체 인식, 분류, 세그먼트화(segmentation) 등과 같은 컴퓨터 비전을 위한 것일 수도 있다. 일반적으로, 본 개시는 어떤 특정 종류의 태스트 또는 신경망에 한정되지 않는다. 본 개시는 신경망의 인코딩 및 디코딩 채널에 쉽게 적용 가능하지만, 그러한 적용에 한정되지 않는다. 오히려, 본 개시는 일반적으로 임의의 데이터 소스로서 이해되어야 하는 복수의 채널로부터 오는 임의의 종류의 데이터를 인코딩하는 데 적용 가능하다. 또한, 소스 데이터의 전처리에 의해 채널이 제공될 수도 있다.
도 18은 서로 다른 크기를 갖는 Ch0, Ch1, Ch2 및 Ch3으로 표시되는 입력 데이터 채널(1810)의 전처리를 그 대응하는 확률 분포(1820)(ProbCh0, ProbCh1, ProbCh2 및 ProbCh3으로 표시)와 함께 예시적으로 도시한다. 여기에서 크기라는 용어는 채널의 비트, 심볼 또는 요소의 수(양)를 말한다. 신경망 채널과 같은 일반 채널에서는 수직 및 수평과 같은 더 많은 차원이 있을 수 있지만, 이것들은 보통 채널 요소에 대해 직렬로(순차적으로) 수행되는 엔트로피 코딩에서는 역할을 수행하지 않는다. 엔트로피 코딩 및 채널 유형에 따라, 인코딩은 채널 비트, 채널 심볼 또는 일반적으로 채널 요소에 기반할 수 있다(예컨대, 확률 모델이 제공될 수 있음). 그러나, 본 개시는 또한 채널을 하나 이상의 차원에서 동일한 크기의 새로운 채널로 분할하는 데에도 적용될 수 있다.
서로 다른 크기의 이러한 입력 채널(1810)은 동일한 크기(1830)의 채널을 획득하기 위해 전처리된다. 따라서, 필요한 크기보다 큰 입력 채널은 분할(1812)될 수 있다. 도 18에서 볼 수 있듯이, 예를 들어, 채널들(여기서는 두 개의 채널 Ch1과 Ch2) 중 적어도 하나가 두 개의 채널(예컨대, 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) 생성을 위해 개별적으로 수행된다. 위에서 언급한 바와 같이, 채널 부분은 각각의 확률 모델 부가 정보(probability model side information)와 함께 다중화될 수 있다. 예시적인 실시예에서, 그러한 부가 정보는 하이퍼 프라이어 서브네트워크(hyper prior subnetwork)를 구비한 변분 자동 인코더(variational auto encoder)에 의해 획득된 하이퍼 프라이어(hyper prior)에 대응할 수 있다. 그러나, 확률 모델이 채널 부분과 함께 다중화되는 부가 정보로서 제공될 필요가 없는 실시예 및 구현이 있을 수 있다. 예를 들어, 확률 모델은 이전에 인코딩 및/또는 디코딩된 데이터 등에 기초하여 컨텍스트 적응 방식으로 업데이트될 수 있다.
각 채널을 개별적으로 인코딩하는 대신 서로 다른 채널의 부분을 다중화하고 인코딩하는 것은 완성된 서브스트림을 더 빠르게 생성하고/하거나 개별 서브스트림의 길이를 제어할 수 있는, 예컨대, 보다 균일한 길이의 서브스트림을 획득할 수 있는 가능성을 제공한다. 이는 복수의 서브스트림에 대해 엔트로피 인코딩 및/또는 엔트로피 디코딩을 병렬로 수행할 가능성을 열어준다.
본 개시는 동일한 크기의 부분만을 제공하거나, 또는 제1 크기의 부분 및 제1 크기와 다른 제2 크기의 부분을 제공하는 것으로 한정되지 않는다. 또한, 다른 크기, 예컨대 제3 크기의 부분(1842) 및/또는 제4 크기의 부분(1843)이 제1 서브스트림 또는 제2 서브스트림에 포함될 수 있다. 이 제3 크기는 제1 크기 또는 제2 크기와 동일할 수 있다. 이는 도 18에 도시되어 있으며, 여기서 제i 채널 chi는 4개의 부분: portion.i0, portion.i1, portion.i2, 및 portion.i3으로 나뉜다. 모든 채널을 동일한 크기의 부분으로 나눈 다음, 서로 다른 채널로부터의 부분을 포함하는 서브스트림을 형성함으로써, 서브스트림 크기를 제어할 수 있다. 이는 동적 파티셔닝(dynamic partitioning)이라고 할 수 있다.
예를 들어, 개별 서브스트림은 더 많은 부분을 포함함으로써 길이가 연장될 수 있으며, 여전히 원하는 길이로 조정될 수 있다. 제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의 3개 채널이 있다고 가정한다: 서브스트림이 Ch1로부터 부분당(per portion) 10바이트씩, Ch2로부터 부분당 2바이트씩, 그리고 Ch3으로부터 부분당 20바이트씩 증가한다. 따라서 처음 세 부분을 셔플링 없이 서브스트림 S1, S2, S3으로 병렬로 인코딩한 후, 다음과 같은 스트림 길이가 달성된다:
- 각 채널로부터의 제1 부분은 Ch1, Ch2, 그리고 Ch3의 순서로 셔플링 없이 인코딩된다. 그 결과 개별 S1, S2, 그리고 S3에 대해 10바이트, 2바이트, 그리고 20바이트의 세 가지 개별 병렬 스트림 크기가 생성된다.
- Ch1, Ch2, 그리고 Ch3의 동일한 순서로, 제2 부분을 셔플링 없이 인코딩하면, 세 채널 각각으로부터의 제2 부분을 포함시킨 후 20바이트, 4바이트, 그리고 40바이트의 병렬 스트림 크기가 달성된다.
- Ch1, Ch2, 그리고 Ch3의 동일한 순서로 세 번째 부분을 셔플링 없이 인코딩하면 세 채널 각각으로부터 세 번째 부분을 포함시킨 후 30바이트, 6바이트, 60바이트의 병렬 스트림 크기가 획득된다.
이 예에서 알 수 있듯이, 병렬 서브스트림의 길이는 실질적으로 다르다. 이는 일부 애플리케이션에서는 바람직하지 않을 수 있다. 이러한 상황을 개선하기 위해, 셔플링이 수행될 수 있다. 특히, 부분을 각 채널로부터 가져오는 순서는 변경될 수 있다.
위에서 언급한 것과 동일한 채널 Ch1, Ch2 그리고 Ch3이 동일한 성장 속도를 갖는다고 가정할 수 있다. 채널 순서 Ch1, Ch2, Ch3의 순환 시프트에 의한 셔플링을 수행되는 경우, 다음과 같은 결과를 얻는다:
- 여기에서는 위의 예와 동일한 순서로 세 채널로부터 제1 부분을 가져온다. 즉, 순서는 Ch1, Ch2, 그리고 Ch3이다. 결과적으로 10바이트, 2바이트, 그리고 20바이트의 동일한 병렬 스트림 크기가 생성된다.
- 제2 부분은 셔플링된 순서로, 특히 순환 시프트된 순서(오른쪽으로 1씩 시프트): Ch3, Ch1 그리고 Ch2로 가져온다. 그 결과 개별 스트림 크기는 30바이트, 12바이트, 22바이트가 된다. 이러한 스트림 크기는 이전 단계로부터의 길이 10바이트, 2바이트, 그리고 20바이트의 스트림에 셔플링된 채널에 대응하는 크기 20바이트, 10바이트, 그리고 2바이트를 추가하여 얻는다. 알 수 있듯이,
제2 부분 이후에는 30바이트, 12바이트, 그리고 22바이트를 셔플링한 후의 크기가 20바이트, 4바이트, 그리고 40바이트를 셔플링하지 않은 이전 예의 크기보다 낮은 변동성을 보인다.
- 제3 부분은 다시 서플링된 순서로 가져오며, 이 예에서는 반복적인 오른쪽 순환 시프트에 의해, 결과적으로 채널 Ch2, Ch3, 그리고 Ch1의 순서가 된다. 세 개의 병렬 스트림의 결과 스트림 크기는 32, 32 및 32이다. 이 크기는 (제2 부분을 추가하는) 선행 단계의 스트림 크기 30바이트, 12바이트, 그리고 22바이트에 추가로 2바이트, 20바이트 그리고 10바이트를 더한 결과이다. 알 수 있듯이, 두 번째 셔플링 후에, 병렬 스트림(위에서 설명한 서브스트림에 대응)의 길이는 동일하게 된다.
실제 적용에서는 성장을 그렇게 쉽고 정확하게 예측할 수 없을 수 있다. 특히, 위의 예에서처럼 반드시 고정되어 있을 필요는 없다. 그럼에도 불구하고, 셔플링은 서브스트림 길이(크기)의 균등화를 향상시킬 수 있다. 그렇게 하기 위해, 성장 속도에 대한 추정이 성과에 기여할 수 있을 것이다. 전술한 바와 같이, (인코딩된) 서브스트림의 성장은 이전에 코딩된(디코딩된) 부분 또는 서브스트림에 기초하여 추정될 수 있다. 그러나 범위 구간의 현재 상태에 의해 훨씬 더 가까운 지시가 worgde할 슈 았더, 범위 구간이 크면, 서브스트림의 길이가 더 짧고 성장 속도에 대한 기여가 낮다는 것을 지시한다. 범위 구간이 작으면, 서브스트림의 길이가 더 길어지며 이는 성장 속도에 더 큰 기여를 함을 지시한다. 다시 말해, 범위 구간의 길이는 스트림의 성장 속도에 반비례한다. 비례성은 반드시 선형일 필요는 없다.
따라서 인코딩 및 디코딩 중에 셔플링 메커니즘이 적용될 수 있다. 셔플링은 위에서 설명한 것과 유사할 수 있으며, 예를 들어, 채널의 제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). 즉, 패딩이 제거된다. 이러한 단계에 관한 정보는 동일한 크기의 채널에 포함될 수 있다. 임의의 크기의 채널이 신경망의 출력 채널 또는 잠재 표현 채널(latent representation channel)일 수 있다.
엔트로피 디코딩은, 예컨대, 위의 산술 인코딩 섹션에 설명된 바와 같은, 산술 디코딩 또는 범위 디코딩일 수 있다. 그러나, 서브스트림의 형성에 관한 본 개시는 산술 인코더 및 디코더의 적용에 한정되지 않는다. 오히려, 임의의 엔트로피 코딩 및/또는 실행 길이 코딩(run length coding) 등이 채널 데이터에 적용될 수 있다. 엔트로피 코딩은 컨텍스트 적응적일 수 있다. 이들 실시예는 위에서 설명된 인코딩 예에 대응한다.
서브스트림들은 제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)의 역다중화에 적용될 수 있다. 셔플링 방법은 서브스트림에 있는 부분들의 순서를 지정한다. 또한, 셔플링 방법은 예시적인 구현에서 서브스트림의 부분의 길이도 정의할 수 있으며, 부분 길이는 변할 수 있다. 일부 실시예에서, 부분 길이는 채널 전체 및/또는 서브스트림 전체에 걸쳐 동일할 수 있다.
엔트로피 디코딩은 예를 들어 멀티코어 디코더에 의해 병렬로 수행될 수 있다. 또한, 엔트로피 디코딩의 일부만이 병렬로 수행될 수도 있다.
[트레일링 비트의 처리]
도 9는 입력 데이터를 비트스트림(1750)으로 산술 코딩하는 예시적인 방법을 나타낸 흐름도이다. 인코딩된 비트스트림(1750)에 대한 일례는 도 17에 주어진다.
이 방법은 인코더에 의해 사용되는 초기 범위를 초기화(S910)할 수 있다. 예를 들어, 그러한 초기 범위는 위에서 논의된 바와 같이, 도 2의 초기 범위(210)에 대응할 수 있다. 인코딩은 인코딩할 메시지의 첫 번째 심볼에서부터 시작하여 메시지의 모든 심볼에 걸쳐 진행되어 코딩된 비트를 획득한다.
단계 S920에서, 메시지로부터의 현재 심볼는 예를 들어 도 2 내지 도 7을 참조하여 설명한 바와 같이 산술 코드로 코딩된다.
코딩 루프 S920-S950 이후, 코딩된 비트가 비트스트림(1570)에 포함된다. 그러나 레지스터에는 여전히 인코더의 상태를 지시하는 트레일링 비트가 남아 있다. 트레일링 비트를 설명하는 구간은 마지막 심볼을 인코딩하고 코딩된 비트(1730-1731)를 스트리밍한 후에 남아 있는 현재 범위이다. 코딩된 비트(1730-1731)와 함께 산술 코딩된 데이터를 형성하는 트레일링 비트는 일반적으로 이 구간으로부터 임의로 선택될 수 있다.
그러나 트레일링 비트는 리딩 트레일링 비트 내의 트레일링 0(of trailing zero)의 양을 최대화하는 그런 방식으로 선택될 수 있다. 이러한 트레일링 0은 비트스트림(1750)에 포함되지 않을 수 있으므로 클리핑될 수 있다.
이 구간의 결정된 최소값과 최대값(S960)은 동일한 MSB(Most Significant Bit, 최상위 비트)의 양을 포함할 수 있다. 이러한 동일한 리딩 비트는 연속적인 트레일링 비트이다, 즉, 연속적인 트레일링 비트의 세트를 형성한다. 이러한 리딩 트레일링 비트(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에서 서로 다른 첫 번째 비트 이후의 모든 비트를 0으로 함으로써 Low와 High-1 사이의 값으로 선택되므로, 0b.0000.0100.1000.0000(1650)에 도달한다.
위에서 언급한 것처럼, 트레일링 0(1680)는 첫 번째 비트가 Low와 High-1에서 서로 다른 비트 1(1670)과 함께 클리핑될 수 있는데, 왜냐하면 이 비트는 항상 1이고 시그널링될 필요가 없기 때문이다. 따라서, 이 예에서 리딩 트레일링 비트(1660)는 8비트 0000 0100으로 형성된다.
결정된 수의 리딩 0이 리딩 비트의 양에 대한 지시에 포함된다. 이 지시는 비트스트림(1750) 내에서 코딩된 비트(1730-1731) 및 리딩 트레일링 비트(1740-1741)에 선행한다(1720).
그러나, 리딩 트레일링 비트(1740-1741)는 값 1의 비트(1670)와 함께 비트스트림(1570)에 포함될 수 있으며, 이는 리딩 트레일링 비트(1660) 바로 뒤에 추가된다. 이 뒤에 추가된 비트가 Low와 High-1에서 서로 다른 첫 번째 비트이다. 이 경우에 리딩 트레일링 비트(1720)의 양에 대한 지시는 추가 비트 1을 포함한다.
산술 코딩하는 방법은 다수의 서브스트림에 대해 개별적으로 수행될 수 있다. 예시적인 실시예가 도 14에 제공된다. 위에서 설명된 방법이 예시적으로 제1 서브스트림 및 제2 서브스트림에 적용되어 제1 코딩된 비트(1430a), 제2 코딩된 비트(1431), 제1 리딩 트레일링 비트(1440a) 및 제2 리딩 트레일링 비트(1441)를 생성한다. 비트스트림(1750)은 이러한 부분들로부터, 도 17에 개략적으로 나타낸 바와 같이 제1 코딩된 비트(1730) 및 제2 코딩된 비트(1731)의 뒤에 제1 리딩 트레일링 비트(1740) 및 제2 리딩 트레일링 비트(1741)를 비트스트림(1750)에 삽입함으로써 형성된다. 제1 리딩 트레일링 비트(1740)는 제2 코딩된 비트(1731) 바로 뒤에 오므로, 패딩은 불필요하다.
제1 서브스트림 및 제2 서브스트림으로부터 형성된 비트스트림(1750)은 또한 제1 코딩된 비트에 대한 길이 지시(71710)와 제2 코딩된 비트에 대한 길이 지시(1711)을 포함할 수 있다. 제1 길이 지시(1710)와 제2 길이 지시(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-도 7d의 이진 표현(720c)에 대응할 수 있고, 유한 레지스터에 있는 이러한 최대값은 이진 표현(710c)을 가질 수 있다. 인코딩 루프의 1회 이상의 반복 후에, 현재 최소값과 현재 최대값의 이진 표현의 MSB에서 동일한 값을 갖는 연속적인 비트인 안정 비트가 있을 수 있다. 이러한 미리 결정된 양의 이러한 안정 비트가 메모리에서 비트스트림으로 이동된다. 이는, 예를 들어 도 7a-도 7d의 HIGH 위치와 TOP 위치 사이의 두 비트에 대응한다. 예시적인 구현에서, HIGH 위치와 TOP 위치 사이에 16비트가 있을 수 있다. 본 발명은 이러한 예 중 어느 것에 한정되지 않는다.
리딩 트레일링 비트의 양과, HIGH 위치와 TOP 위치 사이의 안정 비트 중의 미리 정의된 비트의 양 사이의 차이가 미리 정의된 임계값 미만인 경우가 발생할 수 있다, 예컨대 HIGH 위치와 TOP 위치 사이에는 16비트가 있고 15개의 리딩 트레일링 비트가 있을 수 있다. 이 경우, 코딩된 비트에 리딩 트레일링 비트를 포함하시키는 것이 더 효율적이다. 따라서, 트레일링 코딩된 비트는 리딩 트레일링 비트로부터 생성된다. 비트 1(1670)이 리딩 트레일링 비트(1660)에 추가되어야 하며, 미리 정의된 수의 안정 비트에 도달하도록 비트들이 0으로 패딩될 수 있다. 따라서, 트레일링 비트의 양에 대한 지시와 함께 많은 리딩 트레일링 비트의 비용이 많이 드는 시그널링이 방지된다. 예를 들어, 15개의 리딩 트레일링 비트의 양을 시그널링하려면 최소한 4비트가 필요하다. 대신에 더 많은 코딩된 비트를 갖고 0인 리딩 트레일링 비트를 시그너링하는 것이 비용이 덜 들 수 있다. 예컨대, 자주 발생하는 경우에 효율적으로 인코딩될 수 있다.
위에서 언급한 미리 정의된 임계값은, 예컨대, HIGH 위치와 TOP 위치 사이의 비트 양과 리딩 트레일링 비트의 길이를 지시하는 데 사용되는 시그널링 양을 고려하여, 경험적으로 결정될 수 있다.
도 10은 비트스트림(1750)으로부터 데이터의 산술 디코딩하는 예시적인 방법을 나타낸 흐름도이다. 디코더는 비트스트림을 수신하고(S1010), 비트스트림으로부터 코딩된 비트의 길이에 대한 지시가 추출될 수 있다(S1020). 코딩된 비트(1730-1731)는 비트스트림으로부터 추출되고 연속적으로 디코딩된다(S1040-S1060). 코딩된 비트가 모두 디코딩된 경우, 리딩 트레일링 비트(1740-1741)가, 또한 비트스트림으로부터 추출(S1030)될 수 있는 그 양에 대한 지시(1720-1721)에 따라 추출된다(S1070). 리딩 트레일링 비트(1660)로부터, 전체 트레일링 비트(1650)는 디코딩되기 위해 복원되어야 한다(S1080). 리딩 트레일링 비트(1660)는 트레일링 비트의 미리 정의된 최대 길이까지 0으로 패딩된다. 복원된 트레일링 비트는 디코딩될 수 있다(S1090).
다른 예시적인 구현은 사용 가능한 메모리가 충분하면, 디코딩 전에 전체 서브스트림이 형성될 수 있다는 것이다. 코딩된 비트와 리딩 트레일링 비트가 비트스트림에서 추출된다. 트레일링 비트는 위에서 설명한 대로 복원될 수 있다. 서브스트림에 대해 코딩된 비트와 결정된 트레일링 비트. 이후 전체 서브스트림이 디코딩된다.
그러나, 본 발명은 이러한 예시적인 구현들 중 어느 것에 한정되지 않는다.
트레일링 비트(1650) 내에서 동일한 리딩 비트(1660) 뒤에 오는 비트 1(1670)이 시그널링되지 않았으면, 이는 트레일링 비트의 결정 프로세스에서 포함되어야 한다. 비트 1(1670)은 패딩(1680) 이전의 리딩 트레일링 비트(1660)에 부가된다.
리딩 트레일링 비트(1720-1721)의 양에 대한 지시는 비트스트림(1750) 내에서 리딩 트레일링 비트(1740-1741)뿐만 아니라 코딩된 비트(1730-1731)에도 선행할 수 있다.
산술 디코딩하는 방법은 또한 다수의 서브스트림에 대해 개별적으로 수행될 수도 있다. 디코딩을 위한 개별 서브스트림을 복원하기 위해, 제1 코딩된 비트(1730)와 제2 코딩된 비트(1731)에 이어 제1 리딩 트레일링 비트(1740)와 제2 리딩 트레일링 비트(1741)가 추출된다. 제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)는 또한 현재 픽처, 또는 코딩될 픽처로 지칭될 수 있다(특히 비디오 코딩에서 현재 픽처를 다른 픽처, 예컨대 동일한 비디오 시퀀스, 즉 현재 픽처도 포함하는 비디오 시퀀스의 이전에 인코딩된 및/또는 디코딩된 픽처와 구별하기 위해).
(디지털) 픽처는 강도 값이 있는 샘플의 2차원 배열 또는 행렬이거나 간주될 수 있다. 배열에서의 샘플은 픽셀(픽처 요소의 약어) 또는 펠(pel)로도 지칭될 수 있다. 배열 또는 픽처의 수평 및 수직 방향(또는 축)의 샘플의 수는 픽처의 크기 및/또는 해상도를 정의한다. 색 표현을 위해, 보통 세 가지 색 성분이 사용된다. 즉, 픽처는 3개의 샘플 배열으로 표현될 수 있거나 포함할 수 있다. RBG 포맷 또는 색 공간에서, 픽처는 대응하는 적색, 녹색 및 청색 샘플 배열을 포함한다. 하지만, 비디오 코딩에서, 각각의 픽셀은 보통 Y(때로는 L이 대신 사용됨)로 지시되는 루미넌스 성분(luminance component)과 Cb 및 Cr로 지시되는 2개의 크로미넌스 성분(chrominance component)인, 루미넌스와 크로미넌스 포맷과 색 공간, 예컨대 YCbCr로 표현된다. 루미넌스(또는 줄여서 루마) 성분 Y는 밝기 또는 그레이 레벨 강도(예: 그레이스케일 픽처)를 나타내는 반면, 2개의 크로미넌스(또는 줄여서 크로마) 성분 Cb와 Cr은 색도(chromaticity) 또는 색 정보 성분을 나타낸다. 따라서, YCbCr 포맷의 픽처는 루미넌스 샘플 값(Y)의 루미넌스 샘플 배열과 크로미넌스 값(Cb 및 Cr)의 두 크로미넌스 샘플 배열 을 포함한다. RGB 포맷의 픽처는 YCbCr 포맷으로 전환 또는 변환될 수 있으며 그 반대의 경우도 마찬가지이며, 이 프로세스는 색 변환 또는 전환으로도 알려져 있다. 픽처가 흑백인 경우, 픽처는 루미넌스 샘플 배열로만 구성될 수 있다. 따라서, 픽처는, 예를 들어, 흑백 포맷의 루마 샘플 배열 또는 4:2:0, 4:2:2 및 4:4의 색 포맷의 2개의 대응하는 크로마 샘플 배열과 루마 샘플 배열일 수 있다.
비디오 인코더(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)의 경우에 루마 배열과 2개의 크로마 배열) 또는 적용된 색 포맷에 따라 다른 수 및/또는 종류의 배열을 포함할 수 있다. 블록(203)의 수평 및 수직 방향(또는 축)의 샘플 수는 블록(203)의 크기를 규정한다. 따라서, 블록은, 예를 들어, MxN(M열 x N행) 샘플 배열, 또는 변환 계수의 MxN 배열일 수 있다.
도 11에 도시된 비디오 인코더(20)의 실시예는 블록 단위로 픽처(17)를 인코딩하도록 구성될 수 있으며, 예컨대 인코딩 및 예측은 블록(203)마다 수행된다.
도 11에 도시된 바와 같은 비디오 인코더(20)의 실시예는 추가로, 슬라이스(비디오 슬라이스라고도 함)를 사용하여 픽처를 파티셔닝 및/또는 인코딩하도록 구성될 수 있으며, 여기서 픽처는 하나 이상의 슬라이스(일반적으로 비중첩)로 파티셔닝되거나 인코딩될 수 있으며, 각각의 슬라이스는 하나 이상의 블록(예: CTU)을 포함할 수 있다.
도 11에 도시된 바와 같은 비디오 인코더(20)의 실시예는 추가로, 타일 그룹(비디오 타일 그룹이라고도 함) 및/또는 타일(비디오 타일이라고도 함)을 사용하여 픽처를 파티셔닝 및/또는 인코딩하도록 구성될 수 있으며, 여기서 픽처는 하나 이상의 타일 그룹(일반적으로 비중첩)를 사용하여 파틴셔닝되거나 인코딩될 수 있고, 각각의 타일 그룹은 예컨대, 하나 이상의 블록(예컨대, CTU) 또는 하나 이상의 타일을 포함할 수 있으며, 여기서 각각의 타일은, 예컨대 직사각형 모양일 수 있고 하나 이상의 블록(예컨대, CTU), 예컨대 완전한 블록 또는 부분 블록을 포함할 수 있다.
도 12는 본 출원의 기술을 구현하도록 구성된 비디오 디코더(30)의 일례를 도시한다. 비디오 디코더(30)는 예컨대 인코더(20)에 의해 인코딩된, 인코딩된 픽처 데이터(21)(예컨대, 인코딩된 비트스트림(21)을 수신하여, 디코딩된 픽처(331)를 획득하도록 구성된다. 인코딩된 픽처 데이터 또는 비트스트림을 인코딩된 픽처 데이터를 디코딩하기 위한 정보, 예컨대 인코딩된 비디오 슬라이스(및/또는 타일 그룹 도는 타일) 및 연관된 신택스 요소의 픽처 블록을 나타내는 데이터를 포함한다.
엔트로피 디코딩 유닛(304)은 비트스트림(21)(또는 일반적으로 인코딩된 픽처 데이터(21))을 파싱하고, 예를 들어, 인코딩된 픽처 데이터(21)에 대해 엔트로피 디코딩을 수행하여, 예컨대, 양자화된 계수(309) 및/또는 디코딩된 코딩 파라미터(도 12에 도시되지 않음), 예컨대 인터 예측 파라미터(예: 참조 픽처 색인 및 움직임 벡터), 인트라 예측 파라미터(예: 인트라 예측 모드 또는 색인), 변환 파라미터, 양자화 파라미터, 루프 필터 파라미터 및/또는 다른 신택스 요소 중 어느 것 또는 전부를 획득하도록 구성된다. 엔트로피 디코딩 유닛(304)은 인코더(20)의 엔트로피 인코딩 유닛(270)과 관련하여 설명된 바와 같은 인코딩 방식에 대응하는 디코딩 알고리즘 또는 방식을 적용하도록 구성될 수 있다. 엔트로피 디코딩 유닛(304)은 추가로, 인터 예측 파라미터, 인트라 예측 파라미터 및/또는 다른 신택스 요소를 모드 적용 유닛(360)에 그리고 다른 파라미터를 디코더(30)의 다른 유닛에 제공하도록 구성될 수 있다. 비디오 디코더(30) 비디오 슬라이스 레벨 및/또는 비디오 블록 레벨에서 신택스 요소를 수신할 수 있다. 슬라이스 및 각각의 신택스 요소에 추가로 또는 대안으로서, 타일 그룹 및/또는 타일과 각각의 신택스 요소가 수신 및/또는 사용될 수 있다. 엔트로피 디코딩은 위에서 언급한 산술 디코딩 방법 또는 장치 중 어느 것을 구현할 수 있다.
재구축 유닛(314)(예컨대, 가산기 또는 합산기(314))은 재구축된 잔차 블록(313)을, 예컨대 재구축된 잔차 블록(313)의 샘플 값과 예측 블록(365)의 샘플 값을 가산함으로써, 예측 블록(365)에 추가하여, 샘플 도메인에서 재구축된 블록(315)을 획득하도록 구성될 수 있다.
도 12에 도시된 바와 같은 비디오 디코더(30)의 실시예는 슬라이스(비디오 슬라이스라고도 함)를 사용하여 픽처를 파티셔닝 및/또는 디코딩하도록 구성될 수 있으며, 여기서 픽처는 하나 이상의 슬라이스(일반적으로 비중첩)로 파티셔닝될 수 있거나 이를 사용하여 디코딩될 수 있으며, 각각의 슬라이스는 하나 이상의 블록(예컨대, CTU)을 포함할 수 있다.
도 12에 도시된 바와 같은 비디오 디코더(30)의 실시예는 영상을 분할 및/또는 디코딩하도록 구성될 수 있다. 도 12에 도시된 바와 같은 비디오 디코더(30)의 실시예는 타일 그룹(비디오 타일 그룹이라고도 함) 및/또는 타일(비디오 타일이라고도 함)을 사용하여 픽처를 파티셔닝 및/또는 디코딩하도록 구성될 수 있으며, 여기서 픽처는 하나 이상의 타일 그룹(일반적으로 비중첩)을 사용하여 파티셔닝되거나 이를 사용하여 디코딩될 수 있으며, 각각의 타일 그룹은 예컨대, 하나 이상의 블록(예: CTU) 또는 하나 이상의 타일을 포함할 수 있으며, 여기서 각각의 타일은, 예컨대, 직사각형 모양일 수 있고 하나 이상의 블록(예: CTU), 완전한 블록 또는 부분 블록을 포함할 수 있다.
비디오 디코더(30)의 다른 변형이 인코딩된 픽처 데이터(21)를 디코딩하는 데 사용될 수 있다. 예를 들어, 디코더(30)는 루프 필터링 유닛(320) 없이 출력 비디오 스트림을 생성할 수 있다. 예를 들어, 비변환 기반 디코더(30)는 특정 블록 또는 프레임에 대해 역변환 처리 유닛(312) 없이 직접 잔차 신호를 역양자화할 수 있다. 다른 구현에서, 비디오 디코더(30)는 단일 유닛으로 결합된 역양자화 유닛(310) 및 역변환 처리 유닛(312)을 가질 수 있다.
인코더(20) 및 디코더(30)에서, 현재 단계의 처리 결과는 추가로 처리되어 다음 단계로 출력될 수 있음을 이해해야 한다. 예를 들어, 보간 필터링, 움직임 벡터 도출 또는 루프 필터링 후에, 보간 필터링, 움직임 벡터 도출 또는 루프 필터링의 처리 결과에 대해, 클립(Clip) 또는 시프트와 같은, 추가 연산이 수행될 수 있다.
[하드웨어 및 소프트웨어에서의 구현]
이하에서는 하드웨어 및 소프트웨어에서의 일부 추가적인 구현을 설명한다.
도 19 - 도 22를 참조하여 위에서 설명한 임의의 인코딩 디바이스는 입력 데이터를 코딩된 비트와 리딩 트레일링 비트로 산술 인코딩하는 것을 수행하기 위한 수단을 제공할 수 있다. 이러한 예시적인 디바이스 중 임의의 디바이스 내의 처리 회로는 입력 데이터를 인코딩하고 위에서 설명된 방법에 따라 코딩된 비트의 마지막 비트를 인코딩한 후에 인코더 상태의 리딩 트레일링 비트를 결정하도록 구성된다.
도 19 - 도 22 중 어느 하나의 디코딩 디바이스는 디코딩 방법을 수행하도록 구성된 처리 회로를 포함할 수 있다. 위에서 설명된 방법은 코딩된 비트의 추출과 그 각각의 양에 대한 지시와 함께 리딩 트레일링 비트를 포함한다. 트레일링 비트는 리딩 트레일링 비트로부터 재구축되며 코딩된 비트와 함께 디코딩되어 데이터를 얻을 수 있다.
요약하면, 데이터를 비트스트림으로 인코딩하고 비트스트림으로부터 데이터를 디코딩하는 방법 및 장치가 설명된다. 이 방법은 인코딩 프로세스의 트레일링 비트 내에 관련 유효 비트(relevant significant bit)만을 포함함으로써 비트스트림의 길이를 줄일 수 있다. 이러한 리딩 트레일링 비트의 양이 결정되고 가장 적은 양의 트레일링 비트가 구축될 수 있다. 리딩 트레일링 비트의 양에 대한 지시가 비트스트림에 포함된다. 따라서 패딩이 필요하지 않으므로 시그널링되어야 하는 비트 수가 줄어든다.
일 실시예에 따르면, 동일한 크기의 복수 채널의 데이터를 비트스트림으로 엔트로피 인코딩하기 위한 인코딩 방법이 제공되며, 이 방법은, 복수의 채널 중 각각의 채널로부터 제1 크기의 부분을 다중화하고, 이어서 제1 크기의 다중화된 부분을 제1 서브스트림으로 인코딩하는 단계; 상기 복수의 채널 중 각각의 채널로부터 제2 크기의 부분을 다중화하고, 이어서 다중화된 제2 크기의 다중화된 부분을 제2 서브스트림으로 인코딩하는 단계를 포함하며; 여기서 인코딩은 제1 서브스트림 및 제2 서브스트림으로 독립적으로 수행되는 엔트로피 인코딩이다.
각각의 채널을 개별적으로 인코딩하는 대신 서로 다른 채널의 부분을 다중화 및 인코딩하면, 완성된 서브스트림을 더 빠르게 생성하고/하거나 개별 서브스트림의 길이를 제어할 수 있는 가능성(예컨대, 보다 균일한 길이의 서브스트림을 얻을 수 있음)을 제공한다. 이는 복수의 서브스트림에 대해 엔트로피 인코딩 및/또는 엔트로피 디코딩을 병렬로 수행할 가능성을 열어쥰다.
예시적인 구현에서, 이 인코딩 방법은 서로 다른 크기의 복수의 채널의 데이터를 전처리하는 것을 포함하여 동일한 크기의 복수의 채널을 생성하여 동일한 크기의 상기 복수의 채널을 획득하는 단계를 더 포함한다.
임의의 크기의 채널로부터 동일한 크기의 채널을 획득하는 옵션은 다른 종류의 입력 데이터에 대한 이 인코딩 방법의 적용 가능성을 제공한다.
예를 들어, 이 인코딩 방법은 제1 서브스트림의 길이를 지시하는 제1 서브스트림 길이 지시 및 제2 서브스트림의 길이를 지시하는 제2 서브스트림 길이 지시와 함께 제1 서브스트림 및 제2 서브스트림을 비트스트림으로 다중화하는 단계를 더 포함한다.
비트스트림에서 서브스트림의 길이를 지시하면 서로 다른 크기의 서브스트림을 제공할 수 있어 보다 유연한 비트스트림 구성이 가능하다.
예시적인 실시예에서, 제1 서브스트림 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행하고, 제2 서브스트림 길이 지시는 비트스트림 내에서 제2 서브스트림에 선행한다.
이 특징은 개별 서브스트림을 추출하기 위해 전체 비트스트림을 버퍼링할 필요가 없게 한다.
예를 들어, 제2 서브스트림 길이 지시는 비트스트림 내에서 제1 서브스트림에 선행한다.
제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 트레일링 비트 길이 지시, 제1 서브스트림, 제2 서브스트림, 제1 트레일링 비트 및 제2 트레일링 비트를 포함한 비트스트림을 미리 결정된 값을 갖는 비트로 패딩하여, 미리 결정된 양의 바이트의 정수배와 매칭되도록 비트스트림 길이를 정렬하는 단계를 더 포함한다.
이 구현은, 예컨대, 네트워크 적응 계층 유닛 또는 기타 패킷으로의 캡슐화와 같은 추가 처리를 위해 적절하게 정렬된 비트스트림을 제공할 수 있다.
예를 들어, 제1 크기는 제2 크기와 동일하다.
동일한 크기의 부분들을 사용하면, 예를 들어 하드웨어 및 소프트웨어 구현에 적합한 메모리 유닛이 사용될 수 있으므로, 성능이 더 효율적일 수 있다.
예시적인 구현에서, 제1 서브스트림에 포함된 모든 부분과 제2 서브스트림에 포함된 모든 부분은 복수의 채널의 상기 데이터의 심볼의 정수배 K이고, K는 1보다 크다.
이러한 접근법은 소프트웨어 및/또는 하드웨어에서의 효율적인 구현을 제공할 수 있다.
예를 들어 심볼는 비트이다.
예시적인 구현에서, 인코딩 방법은 제1 크기의 부분들과 제2 크기의 부분들의 다중화하기 위한 셔플링 방법을 선택하고 후속하여 적용하는 단계를 더 포함하며, 여기서 셔플링 방법은 미리 정의된 셔플링 방법의 세트 중에서 선택되고, 제1 크기의 부분들과 제2 크기 부분의 순서를 지정한다.
서브스트림 크기의 보다 균일한 분포를 달성하기 위해 부분들은 셔플링될 수 있다.
예를 들어, 셔플링 방법은 제1 크기의 부분에 대해 제2 크기의 부분의 순환 순열을 수행한다.
이러한 셔플링 방법은 보다 균일한 길이의 서브스트림을 쉽게 구현할 수 있다.
예를 들어, 인코딩 방법은 반복적으로 수행되며, 여기서 셔플링 방법은 현재 제1 서브스트림의 길이와 과거 제1 서브스트림의 길이에 기초한 통계값의 차이 및/또는 현재 제2 서브스트림의 길이와 과거 제2 서브스트림의 길이에 기초한 통계값의 차이에 따라 선택된다.
셔플링은 시간이 지남에 따라 서브스트림들 사아의 길이 차이를 줄이기 위해 인코딩될 부분에 걸쳐 반복적으로 수행될 수 있다.
예를 들어, 통계값은 추정 평균, 중앙값, 최소값, 최대값 또는 성장 속도 중 적어도 하나에 기초한다.
이러한 통계는 셔플링과 그에 따른 서브스트림 크기를 제어하는 데 적합한 수단을 제공할 수 있다. 또한 이는 스트리밍 프로세스 내에서 보다 균일한 로딩을 가능하게 할 수 있다.
예시적인 구현에서, 엔트로피 인코딩은 산술 인코딩이고, 셔플링 방법은 산술 인코딩의 범위 구간의 현재 상태에 따라 선택된다.
이 방법은 산술 인코더의 현재의 구간 범위의 값이 인코딩에 대한 미리 결정된 최소 범위에 근접하는지 여부를 고려할 수 있다. 이로써 인코딩 중에 재정규화를 방지할 수 있다.
예시적인 구현에서, 엔트로피 인코딩은 제1 엔트로피 인코더를 사용하여 제1 서브스트림을 생성하고 제2 엔트로피 인코더를 사용하여 제2 서브스트림을 생성하는 것을 포함하며, 제1 엔트로피 인코더와 제2 엔트로피 인코더를 사용한 엔트로피 인코딩은 적어도 부분적으로 병렬로 수행된다.
서브스트림의 병렬 인코딩으로 인해 전체 비트스트림의 인코딩이 더 빨라질 수 있다.
예를 들어, 채널은 신경망의 출력 채널 또는 잠재 표현 채널이다.
신경망은 보통 동일한 크기 또는 적어도 고정된 크기의 채널을 제공하며, 이는 위의 실시예와 예를 이러한 채널에 특히 적합하고 쉽게 적용될 수 있게 한다.
예시적인 구현에서, 엔트로피 인코딩은 산술 인코딩이고, 방법은 다중화된 부분을 제1 서브스트림 또는 제2 서브스트림으로 인코딩하기 위해 다음을 포함한다: 다중화된 부분을 코딩된 비트와 인코더 상태 비트로 산술 인코딩하는 단계 - 여기서 코딩된 비트는 서브스트림을 형성함 -; 산술 인코딩된 입력 데이터의 구간의 최소값과 최대값을 결정하는 단계; 연속적인 인코더 상태 비트이고 결정된 최소값을 나타내는 제1 최상위 비트들(Most Significant Bits, MSBs) 내에서, 결정된 최대값을 나타내는 제2 MSBs 내에서와 동일한 값을 리딩 트레일링 비트의 양을 결정하는 단계 - 여기서 트레일링 비트는 리딩 인코더 상태 비트임 -; 및 트레일링 비트 길이 지시 내에서 리딩 인코더 상태 비트의 결정된 양을 지시하는 단계.
전체 트레일링 비트 대신 리딩 트레일링 비트를 비트스트림에 포함시키는 것은 비트스트림 내의 비트의 양을 감소시켜 레이트를 감소시킬 수 있다, 예컨대, 동일한 품질로 시그널링될 레이트에서 비트의 양을 감소시킬 수 있다.
예를 들어, 리딩 인코더 상태 비트의 양인 NumTrailingBits는 다음: NumTrailingBits = CLZ ((LOW + RANGE - 1) XOR LOW)에 의해 결정되며, CLZ()는 리딩 0의 개수기고, LOW는 구간의 최소값이며, RANGE는 구간의 범위이다.
리딩 트레일링 비트의 양은, 예를 들어 가장 가까운 바이트 경계로 올림(rouding)하는 대신 정확하게 결정될 수 있으며, 이는 비트스트림 내의 비트 양을 더 줄일 수 있다.
예시적인 구현에서, 리딩 인코더 상태 비트에, 값이 1인 1비트가 비트스트림에 포함되기 전에 뒤에 추가된다.
이러한 접근법은 단일 값(one-value) 비트를 생략하는 대신 사용되는 일반적인 관행을 따를 수 있다.
예를 들어, 산술 인코딩 중에, 구간의 현재 최소값과 현재 최대값이 미리 구성된 크기의 메모리에 저장되며; 코딩된 비트를 비트스트림에 포함시키는 것은 안정 비트 중에서 미리 정의된 양의 비트를 메모리로부터 비트스트림으로 이동시키는 것을 포함하고; 안정 비트는 현재 최소값과 현재 최대값의 이진 표현의 MSB에서 동일한 값을 갖는 연속적인 비트이다.
두 개의 개별 서브스트림에 대한 이 방법의 이러한 독립적인 적용은 병렬화를 위한 전제 조건을 제공한다.
예시적인 구현에서, 산술 인코딩 동안, 리딩 인코더 상태의 양과 안정 비트 중 미리 정의된 비트의 양 사이의 차이가 미리 정의된 임계값 미만인 경우; 트레일링 코딩된 비트는 안정 비트 중 미리 정의된 양의 비트까지 뒤에 0이 오는 값 1의 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을 추가하는 것을 포함하여 인코더 상태 비트를 결정하는 단계; 및 코딩된 비트 및 결정된 인코더 상태 비트를 포함하는 비트로부터 다중화된 부분을 산술 디코딩하는 단계.
리딩 트레일링 비트로부터 트레일링 비트를 재구축하는 것은 비트스트림 내에서 더 적은 양의 비트를 사용하여, 코딩된 비트와 트레일링 비트로부터의 디코딩을 제공한다.
예를 들어, 인코더 상태 비트의 결정은 추출된 선두 인코더 상태 비트 뒤에 값이 1인 1비트를 추가하고, 그 뒤에 인코더 상태 비트의 미리 결정된 최대 길이까지 0을 추가하는 것으로 구성된다.
이 접근법은 산술 인코더의 전체 출력을 재구축하는 것을 가능하게 하여 산술 디코더에 적절한 입력을 제공한다.
예시적인 구현에서, 산술 디코딩은 범위 디코딩이다.
범위 인코딩은 레지스터 또는 일반적으로 고속 메모리 크기가 한정되어 있는 하드웨어 및 소프트웨어 아키텍처에 특히 적합할 수 있다.
예시적인 구현에서, 비일시적 매체에 저장되고 코드 명령어를 포함하는 컴퓨터 프로그램에 있어, 코드 명령어는 하나 이상의 프로세서에서 실행될 때, 하나 이상의 프로세서로 하여금 전술한 방법 중 어느 한 방법의 단계를 실행하게 한다.
동일한 크기의 복수의 채널의 데이터를 비트스트림으로 엔트로피 인코딩하기 위한 실시예 장치에 따르면, 처리 회로를 포함한다. 처리 회로는 복수의 채널 중의 각각의 채널로부터 제1 크기의 부분들을 다중화하고 후속적으로 제1 크기의 다중화된 부분들을 제1 서브스트림으로 인코딩하고; 복수의 채널 중 각각의 채널로부터 제2 크기의 부분들을 다중화하고, 후속적으로 제2 크기의 다중화된 부분들을 제2 서브스트림으로 인코딩하도록 구성되며, 여기서 인코딩은 제1 서브스트림 및 제2 서브스트림으로 독립적으로 수행되는 엔트로피 인코딩이다.
비트스트림을 동일한 크기의 복수 채널의 데이터로 엔트로피 디코딩하기 위한 실시예 장치에 따르면, 처리 회로를 포함한다. 처리 회로는 제2 서브스트림과 독립적으로 제1 서브스트림을 엔트로피 디코딩하고, 제1 서브스트림과 제2 서브스트림으로부터 제1 크기의 부분들과 제2 크기의 부분들을 동일한 크기의 복수의 채널로 역다중화하도록 구성된다.
이 장치는 위에서 설명한 방법의 이점을 제공한다.
도 19 - 도 22를 참조하여 위에서 설명한 임의의 인코딩 디바이스는 각각의 채널로부터 제1 크기의 부분의 다중화를 수행하고 각각의 채널로부터 제2 크기의 부분의 다중화를 수행하기 위한 수단을 제공할 수 있다. 이러한 예시적인 디바이스 중 임의의 디바이스 내의 처리 회로는 후속적으로 다중화된 부분을 서브스트림으로 인코딩하고 이러한 엔트로피 코딩을 독립적으로 제1 서브스트림 및 제2 서브스트림으로 수행하도록 구성된다.
도 19 - 도 22 중 어느 하나의 디코딩 디바이스는 디코딩 방법을 수행하도록 구성된 처리 회로를 포함할 수 있다. 위에서 설명된 방법은 전술한 방법은 제2 서브스트림과는 독립적으로 제1 서브스트림을 엔트로피 디코딩하는 단계와, 제1 서브스트림과 제2 서브스트림으로부터 제1 크기의 부분과 제2 크기의 부분을 복수의 채널의 데이터로 역다중화하는 단계를 포함한다.
요약하면, 데이터를 비트스트림으로 인코딩하고 비트스트림으로부터 데이터를 디코딩하는 방법 및 장치가 설명되었다. 이 방법은 효율적으로 병렬 인코딩 및 디코딩을 수행할 수 있고 서브스트림의 패딩을 방지하여 비트스트림 내의 비트의 양을 줄일 수 있다. 다중화하는 동안, 보다 균일한 길이의 서브스트림을 얻기 위해 셔플링 방법이 적용된다. 인코딩 프로세스의 트레일링 비트 내에 관련한 중요 비트만을 포함시킴으로써 서브스트림 내의 비트의 양을 더욱 줄일 수 있다.
비디오 코딩 시스템(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)는 또한 원시 픽처(raw picture) 또는 원시 픽처 데이터(17)로 지칭될 수 있다.
전처리기(18)는 (원시) 픽처 데이터(17)를 수신하고 픽처 데이터(17)에 대해 전처리를 수행하여 전처리된 픽처(19) 또는 전처리된 픽처 데이터(19)를 획득하도록 구성된다. 전처리기(18)에 의해 수행되는 전처리는, 예컨대 트리밍(trimming), 색 포맷 변환(color format conversion)(예: RGB에서 YCbCr로), 색 보정(color correction), 또는 노이즈 제거(de-noising)를 포함할 수 있다. 전처리 유닛(18)은 선택적 구성요소일 수 있음을 이해할 수 있다.
비디오 인코더(20)는 전처리된 픽처 데이터(19)를 수신하고 인코딩된 픽처 데이터(21)를 제공하도록 구성된다(더 자세한 사항은 예컨대, 도 11에 기초하여 위에서 설명되었음).
근원지 디바이스(12)의 통신 인터페이스(22)는 인코딩된 픽처 데이터(21)를 수신하고 통신 채널(13)을 통해 인코딩된 픽처 데이터(21)(또는 그 임의의 추가 처리된 버전)를 다른 기기, 예컨대 목적지 디바이스(14) 또는 임의의 다른 기기에, 저장 또는 직접 재구축을 위해 송신하도록 구성될 수 있다.
목적지 디바이스(14)는 디코더(30)(예: 비디오 디코더(30))를 포함하고, 추가적으로, 즉 선택적으로, 통신 인터페이스 또는 통신 유닛(28), 후처리기(32)(또는 후처리 유닛(32)) 및 디스플레이 기기(34)를 포함할 수 있다.
목적지 디바이스(14)의 통신 인터페이스(28)는, 예컨대 근원지 디바이스(12)로부터 직접 또는 임의의 다른 소스, 예컨대, 저장 기기(예: 인코딩된 픽처 데이터 저장 기기)로부터 인코딩된 픽처 데이터(21)(또는 그 임의의 추가 처리된 버전)를 수신하고, 인코딩된 픽처 데이터(21)를 디코더(30)에 제공하도록 구성된다.
통신 인터페이스(22) 및 통신 인터페이스(28)는 근원지 디바이스(12)와 목적지 디바이스(14) 사이의 직접 통신 링크, 예컨대 직접 유선 또는 무선 연결을 통해, 또는 임의의 종류의 네트워크, 예컨대, 유선 또는 무선 네트워크 또는 이들의 조합, 또는 임의의 종류의 사설 및 공용 네트워크, 또는 임의의 종류의 이들의 조합을 통해. 인코딩된 픽처 데이터(21) 또는 인코딩된 데이터(13)를 송신 또는 수신하도록 구성될 수 있다.
통신 인터페이스(22)는, 예컨대, 인코딩된 픽처 데이터(21)를 적절한 포맷, 예컨대, 패킷으로 패키징하고, 및/또는 통신 링크 또는 통신 네트워크를 통한 송신을 위해 임의의 종류의 송신 인코딩 또는 처리를 사용하여 인코딩된 픽처 데이터를 처리하도록 구성될 수 있다.
통신 인터페이스(22)의 대응물을 형성하는 통신 인터페이스(28)는, 예컨대, 송신된 데이터를 수신하고 임의의 종류의 대응하는 송신 디코딩 또는 처리 및/또는 디패키징(de-packaging)을 사용하여 송신 데이터를 처리하여 인코딩된 픽처 데이터(21)를 획득하도록 구성될 수 있다.
통신 인터페이스(22)와 통신 인터페이스(28) 둘 모두는 근원지 디바이스(12)에서 목적지 디바이스(14)를 가리키는 도 19에서의 통신 채널(13)에 대한 화살표로 지시된 바와 같이 단방향 통신 인터페이스, 또는 양방향 통신 인터페이스로서 구성될 수 있고, 예컨대, 메시지를 전송 및 수신하도록, 예컨대 통신 링크 및/또는 데이터 송신, 예컨대 인코딩된 픽처 데이터 송신과 관련된 임의의 다른 정보를 확인응답(acknowledge) 및 교환하기 위해 연결을 설정하도록구성될 수 있다.
디코더(30)는 인코딩된 픽처 데이터(21)를 수신하고 디코딩된 픽처 데이터(31) 또는 디코딩된 픽처(31)를 제공하도록 구성된다(더 자세한 사항은, 예컨대, 도 12에 기초하여 위에서 설명하였다).
목적지 디바이스(14)의 후처리기(32)는 디코딩된 픽처 데이터(31)(재구축된 픽처 데이터라고도 함), 예컨대 디코딩된 픽처(31)를 후처리하여, 후처리된 픽처 데이터(33), 예컨대 후처리된 픽처(33)를 획득하도록 구성된다. 후처리 유닛(32)에 의해 수행되는 후처리는, 예컨대, 색 포맷 변환(예: YCbCr에서 RGB로), 색 보정, 트리밍 또는 재샘플링(re-sampling), 또는 예컨대 디스플레이 기기(34)에 의해, 예컨대 표시를 위한 디코딩된 픽처 데이터를 준비하기 위한 임의의 다른 처리를 포함할 수 있다.
목적지 디바이스(14)의 디스플레이 기기(34)는, 예컨대 사용자 또는 뷰어에게, 픽처를 표시하기 위해 후처리된 픽처 데이터(33)를 수신하도록 구성된다. 디스플레이 기기(34)는 재구축된 픽처를 표현하기 위한 임의의 종류의 디스플레이, 예컨대 통합된 또는 외부의 디스플레이 또는 모니터일 수 있거나 포함할 수 있다. 디스플레이는, 예컨대 액정 디스플레이(liquid crystal display, LCD), 유기 발광 다이오드(organic light emitting diode, 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), 이산 로직(discrete logic), 하드웨어, 비디오 코딩 전용 또는 이들의 임의의 조합과 같은, 도 20에 도시된 바와 같은 처리 회로를 통해 구현될 수 있다. 인코더(20)는 도 11의 인코더(20) 및/또는 여기에 설명된 임의의 다른 인코더 시스템 또는 서브시스템과 관련하여 논의된 다양한 모듈을 구현하도록 처리 회로(46)를 통해 구현될 수 있다. 디코더(30)는 도 12의 디코더(30) 및/또는 여기에 설명된 임의의 다른 디코더 시스템 또는 서브시스템과 관련하여 논의된 다양한 모듈을 구현하도록 처리 회로(46)를 통해 구현될 수 있다. 처리 회로는 나중에 논의되는 바와 같이 다양한 동작을 수행하도록 구성될 수 있다. 도 22에 도시된 바와 같이, 기술이 부분적으로 소프트에서 구현되는 경우, 기기는 소프트웨어용의 명령어를 적절한, 컴퓨터로 판독 가능한 비일시적 저장 매체에 저장할 수 있고, 본 개시의 기술을 수행하기 위해 하나 이상의 프로세서를 사용하여 하드웨어에서 명령어를 실행할 수 있다. 비디오 인코더(20) 및 비디오 디코더 중 어느 하나는, 예를 들어, 도 20에 도시된 바와 같이, 결합된 인코더/디코더(CODEC)의 일부로서 단일 디비아스에 통합될 수 있다.
근원지 디바이스(12) 및 목적지 디바이스(14)는 임의의 종류의 핸드헬드형 또는 고정식 디바이스, 예컨대 노트북 또는 랩탑 컴퓨터, 모바일폰, 스마트폰, 태블릿 또는 태블릿 컴퓨터, 카메라, 데스크톱 컴퓨터, 셋톱 박스, 텔레비전, 디스플레이 디바이스, 디지털 미디어 플계층, 비디오 게이밍 콘솔, 비디오 스트리밍 디바이스(콘텐츠 서비스 서버 또는 콘텐츠 전달 서버와 같은), 방송 수신기 디바이스, 방송 송신기 디바이스 등을 포함하는 임의의 광범위한 기기를 포함할 수 있거나, 운영 체제를 사용하지 않거나 임의의 운영 체제를 사용할 수 있다. 경우에 따라, 근원지 디바이스(12) 및 목적지 디바이스(14)는 무선 통신을 위해 장비될 수 있다. 따라서 근원지 디바이스(12) 및 목적지 디바이스(14)는 무선 통신 기기일 수 있다.
경우에 따라, 도 19에 나타낸 비디오 코딩 시스템(10)은 단지 예이고 본 출원의 기술은 인코딩 기기와 디코딩 기기 사이의 임의의 데이터 통신을 반드시 포함하지는 않는 비디오 코딩 설정(예: 비디오 인코딩 또는 비디오 디코딩)에 적용될 수 있다. 다른 예에서, 데이터는 로컬 메모리에서 검색되고, 네트워크 등을 통해 스트리밍된다. 비디오 인코딩 기기는 데이터를 인코딩하여 메모리에 저장할 수 있고/있거나, 비디오 디코딩 기기는 메모리에서 데이터를 검색하여 디코딩할 수 있다. 일부 예에서, 인코딩과 디코딩은 서로 통신하지 않지만 단순히 데이터를 메모리로 인코딩 및/또는 메모리로부터 데이터를 검색 및 디코딩하는 기기에 의해 수행된다.
설명의 편의를 위해, 본 발명의 실시예는, 예를 들어, HEVC(High-Efficiency Video Coding) 또는 VVC(Versatile Video coding)의 참조 소프트웨어, ITU-T VCEG의 JCT-VCC(Joint Collaboration Team on Video Coding)에 의해 개발된 차세대 비디오 코딩 표준 및 ISO/IEC MPEG(Motion Picture Experts Group)를 참조하여 여기에 설명된다. 당업자는 본 발명의 실시예가 HEVC 또는 VVC로 한정되지 않음을 이해할 것이다.
도 21은 본 개시의 일 실시예에 따른 비디오 코딩 기기(400)의 개략도이다. 비디오 코딩 기기(400)는 여기에 설명된 바와 같은 실시예를 구현하기에 적합하다. 일 실시예에서, 비디오 코딩 기기(400)는 도 19의 비디오 디코더(30)와 같은 디코더 또는 도 19의 비디오 인코더(20)와 같은 인코더일 수 있다.
비디오 코딩 기기(400)는 데이터를 수신하기 위한 입구 포트(ingress port)(410)(또는 입력 포트(410)) 및 수신기 유닛(Rx)(420); 데이터를 처리하기 위한 프로세서, 논리 유닛 또는 중앙 처리 유닛(central processing unit, CPU)(430); 데이터를 송신하기 위한 송신기 유닛(Tx)(440) 및 출구 포트(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), TCAM(Ternary Content-Addressable Memory) 및 /또는 정적 랜덤 액세스 메모리(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)는 다수의 버스로 구성될 수 있다. 또한, 보조 저장장치(secondary storage)(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) 비일시적인 유형의(tangible), 컴퓨터로 판독 가능한 저장 매체 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수 있다. 데이터 저장 매체는 본 개시에서 설명된 기술의 구현을 위한 명령어, 코드 및/또는 데이터 구조를 검색하기 위해 하나 이상의 컴퓨터 또는 하나 이상의 프로세서에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수 있다. 컴퓨터 프로그램 제품은 컴퓨터로 판독 가능한 매체를 포함할 수 있다.
한정이 아닌 예로서, 이러한 컴퓨터로 판독 가능한 저장 매체로는 RAM, ROM, EEPROM, CD-ROM 또는 기타 광 디스크 저장장치, 자기 디스크 저장장치, 또는 기타 자기 저장장치, 플래시 메모리, 또는 컴퓨터가 액세스할 수 있는 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드를 저장하는 데 사용할 수 있는 기타 매체를 포함할 수 있다. 또, 모든 연결이 컴퓨터가 판독할 수 있는 매체라고 할 수 있다. 예를 들어, 동축 케이블, 광섬유 케이블, 트위스트 페어, 디지털 가입자 회선(DSL) 또는 적외선, 라디오 및 마이크로파와 같은 무선 기술을 사용하여 웹 사이트, 서버 또는 기타 원격 소스로부터 명령어가 송신되면, 동축 케이블, 광섬유 케이블, 연선, 디지털 가입자 회선(DSL) 또는 적외선, 라디오 및 마이크로파와 같은 무선 기술이 매체의 정의에 포함된다. 그러나 컴퓨터로 판독 가능한 저장 매체 및 데이터 저장 매체는 연결, 반송파, 신호 또는 기타 일시적인 매체(transitory media)를 포함하지 않고, 대신 비일시적인, 유형의 저장 매체에 관한 것임을 이해해야 한다. 여기에서 사용된 disk 및 disc는 컴팩트 디스크(compact disc, CD), 레이저 디스크, 광 디스크, 디지털 다목적 디스크(digital versatile disc, DVD), 플로피 디스크 및 블루레이(Blu-ray) 디스크를 포함하며, disk는 일반적으로 자기적으로 데이터를 재생하지만 disc는 레이저로 데이터를 광학적으로 재생한다. 위의 조합도 컴퓨터로 판독 가능한 매체의 범위에 포함되어야 한다.
명령어는 하나 이상의 디지털 신호 프로세서(DSP), 범용 마이크로프로세서, 주문형 반도체(ASIC), 필드 프로그래머블 로직 어레이(FPGA), 또는 기타 등가의 집적 또는 이산 논리 회로와 같은, 하나 이상의 프로세서에 의해 실행될 수 있다. 따라서, 여기에서 사용되는 용어 "프로세서"는 전술한 구조 또는 여기에 설명된 기술의 구현에 적합한 임의의 다른 구조를 가리킬 수 있다. 또한, 일부 측면에서. 여기에 설명된 기능은 인코딩 및 디코딩을 위해 구성된 전용 하드웨어 및/또는 소프트웨어 모듈 내에 제공되거나, 결합된 코덱에 통합될 수 있다. 또한, 기술은 하나 이상의 회로 또는 논리 요소에서 완전히 구현될 수 있다.
본 개시의 기술은 무선 핸드셋, 집적 회로(IC) 또는 IC 세트(예: 칩셋)를 포함하는 매우 다양한 기기 또는 장치에서 구현될 수 있다. 다양한 구성요소, 모듈, 또는 유닛은 개시된 기술을 수행하도록 구성된 기기의 기능적 측면을 강조하기 위해 본 개시에서 설명되지만, 반드시 다른 하드웨어 유닛에 의한 실현을 필요로 하지는 않는다. 오히려, 위에 설명한 바와 같이, 다양한 유닛이 코덱 하드웨어 유닛에서 결합되거나 적절한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명된 바와 같은 하나 이상의 프로세서를 포함하는 상호 운용 하드웨어 유닛(inter operative hardware unit)의 세트에 의해 제공될 수 있다.

Claims (28)

  1. 입력 데이터를 비트스트림(1750)으로 산술 인코딩(arithmetic encoding)하는 방법으로서,
    상기 입력 데이터를 코딩된 비트(1730-1731)와 트레일링 비트(trailing bit)로 산술 인코딩하는 단계;
    상기 코딩된 비트(1730-1731)를 상기 비트스트림(1750)에 포함시키는 단계(S940);
    산술 인코딩된 입력 데이터의 구간의 최소값(1610)과 최대값(1630)을 결정하는 단계(S960);
    연속적인 트레일링 비트이고, 또한 결정된 최대값(1630)을 나타내는 제1 MSB(Most Significant Bit) 내에서, 결정된 최소값(1610)을 나타내는 제2 MSB 내에서와 동일한 값을 갖는 리딩 트레일링 비트(leading trailing bit)의 양을 결정하는 단계(S970); 및
    상기 리딩 트레일링 비트의 결정된 양에 대한 지시(1720-1721), 및 상기 리딩 트레일링 비트(1740-1741)를 상기 비트스트림(1750)에 포함시키는 단계(S980)
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 리딩 트레일링 비트(1740-1741)의 양인 NumTrailingBits는 다음:
    NumTrailingBits = CLZ ( (LOW + RANGE - 1) XOR LOW)
    에 의해 결정되며,
    CLZ()는 리딩 0(leading zero)의 개수이고, LOW는 상기 구간의 최소값(1610)이며, RANGE는 상기 구간의 범위(1620)인, 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 리딩 트레일링 비트의 양에 대한 지시(1720-1721)는 상기 비트스트림 내에서 상기 코딩된 비트(1730-1731) 및 상기 리딩 트레일링 비트(1740-1741)에 선행하는, 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 리딩 트레일링 비트(1160)에, 상기 비트스트림에 포함되기 전에 값이 1인 1비트(1670)가 뒤에 추가되는(postpended), 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 산술 인코딩하는 단계, 상기 구간의 최소값과 최대값을 결정하는 단계(S960), 및 상기 리딩 트레일링 비트의 양을 결정하는 단계(S970)는 제1 서브스트림과 제2 서브스트림에 대해 개별적으로 수행되어, 그 결과 제1 코딩된 비트(1730), 제2 코딩된 비트(1731), 제1 리딩 트레일링 비트(1740) 및 제2 리딩 트레일링 비트(1741)를 생성하며;
    상기 방법은,
    상기 비트스트림에, 상기 제1 코딩된 비트(1730)와 상기 제2 코딩된 비트(1731)를 삽입하고, 그 뒤에 상기 제1 리딩 트레일링 비트(1740)와 상기 제2 리딩 트레일링 비트(1741)를 삽입하는 단계를 포함하는 방법.
  6. 제5항에 있어서,
    상기 제1 코딩된 비트(1730)와 상기 제2 코딩된 비트(1731)를 상기 제1 코딩된 비트의 길이를 지시하는 제1 길이 지시(1710) 및 상기 제2 코딩된 비트(1731)의 길이를 지시하는 제2 길이 지시(1711)와 함께 상기 비트스트림(1750)으로 다중화하는 단계를 더 포함하는 방법.
  7. 제6항에 있어서,
    상기 제1 길이 지시(1710)는 상기 비트스트림(1750) 내에서 상기 제1 코딩된 비트(1730)에 선행하고,
    상기 제2 길이 지시(1711)는 상기 비트스트림(1750) 내에서 상기 제2 코딩된 비트(1731)에 선행하는, 방법.
  8. 제7항에 있어서,
    상기 제2 길이 지시(1711)는 상기 비트스트림(1750) 내에서 상기 제1 코딩된 비트(1730)에 선행하는, 방법.
  9. 제8항에 있어서,
    상기 제2 리딩 트레일링 비트의 양에 대한 지시(1721)는 상기 비트스트림(1750) 내에서 상기 제1 코딩된 비트(1730)에 선행하는, 방법.
  10. 제5항 내지 제9항 중 어느 한 항에 있어서,
    상기 제1 코딩된 비트(1730), 상기 제2 코딩된 비트(1731), 상기 제1 리딩 트레일링 비트(1740) 및 상기 제2 리딩 트레일링 비트(1741)를 포함하는 비트스트림(1750)을 미리 결정된 값을 갖는 비트로 패딩하여, 상기 비트스트림 길이를 미리 결정된 바이트 양의 정수배와 매칭되도록 정렬하는 단계를 더 포함하는 방법.
  11. 제5항 내지 제10항 중 어느 한 항에 있어서,
    상기 산술 인코딩하는 단계는 제1 산술 인코더를 사용하여 상기 제1 서브스트림을 인코딩하고 제2 산술 인코더를 사용하여 상기 제2 서브스트림을 인코딩하는 단계를 포함하고,
    상기 제1 산술 인코더와 상기 제2 산술 인코더를 사용하는 상기 산술 인코딩은 적어도 부분적으로 병렬로 수행되는, 방법.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서,
    상기 산술 인코딩은 범위 인코딩인, 방법.
  13. 제11항에 있어서,
    상기 산술 인코딩 동안에 상기 구간의 현재 최소값(720a-d)과 현재 최대값(710a-d)은 미리 구성된 크기의 메모리에 저장되고;
    상기 코딩된 비트를 상기 비트스트림에 포함시키는 단계는 안정 비트(stable bit)(730) 중 미리 정의된 양의 비트를 상기 메모리에서 상기 비트스트림으로 이동시키는 단계를 포함하고;
    상기 안정 비트(730)는 상기 현재 최소값(720a-d)과 상기 현재 최대값(710a-d)의 이진 표현의 MSB에서 동일한 값을 갖는 연속적인 비트인, 방법.
  14. 제13항에 있어서,
    상기 산술 인코딩 동안에 상기 리딩 트레일링 비트의 양과 상기 안정 비트(730) 중 미리 정의된 비트의 양 사이의 차이가 미리 정의된 임계값 미만인 경우,
    값이 1인 1비트(1670)를 뒤에 추가하고 그 뒤에 안정 비트(730) 중 미리 정의된 비트의 양까지 0을 추가하여 상기 리딩 트레일링 비트(1160)로부터 트레일링 코딩된 비트가 생성되고;
    상기 코딩된 비트를 상기 비트스트림에 포함시키기 전에 상기 트레일링 코딩된 비트가 상기 코딩된 비트에 포함되며;
    0인 리딩 트레일링 비트(zero leading trailing bit)에 대한 지시가 상기 비트스트림에 포함되는, 방법.
  15. 비트스트림(1750)으로부터 데이터를 산술 디코딩(arithmetic decoding)하는 방법으로서,
    상기 비트스트림(1750)으로부터 리딩 트레일링 비트의 양에 대한 지시(1720-1721)를 추출하는 단계(S1030);
    상기 비트스트림(1750)으로부터 복수의 코딩된 비트(1730-1731)를 추출하는 단계(S1040);
    상기 비트스트림(1750)으로부터, 상기 리딩 트레일링 비트의 양에 대한 지시(1720-1721)에 의해 지정되는 리딩 트레일링 비트(1740-1741)를 추출하는 단계(S1070);
    추출된 리딩 트레일링 비트 뒤에 상기 트레일링 비트의 미리 결정된 최대 길이까지 0을 추가하는 것을 포함한 트레일링 비트를 결정하는 단계(S1080); 및
    상기 코딩된 비트와 결정된 트레일링 비트를 포함하는 비트로 표현되는 코딩된 값을 산술 디코딩하여 상기 데이터를 획득하는 단계
    를 포함하는 방법.
  16. 제15항에 있어서,
    상기 트레일링 비트(1650)를 결정하는 단계는 추출된 리딩 트레일링 비트 뒤에 값이 1인 1비트(1670)를 추가하고, 그 뒤에 상기 트레일링 비트의 미리 결정된 최대 길이까지 0(1650)을 추가하는 것으로 구성되는, 방법.
  17. 제15항 내지 제16항 중 어느 한 항에 있어서,
    상기 리딩 트레일링 비트의 양에 대한 지시(1720-1721)는 상기 비트스트림(1750) 내에서 상기 코딩된 비트(1730-1731) 및 상기 리딩 트레일링 비트(1740-1741)에 선행하는, 방법.
  18. 제15항 내지 제17항 중 어느 한 항에 있어서,
    상기 방법은,
    상기 비트스트림(1750)으로부터, 제1 코딩된 비트(1730)와 제2 코딩된 비트(1731) 그 뒤의 제1 리딩 트레일링 비트(1740)와 제2 리딩 트레일링 비트(1741)를 추출하는 단계 - 상기 제1 코딩된 비트(1730)와 상기 제1 리딩 트레일링 비트(1740)는 제1 서브스트림을 형성하고, 상기 제2 코딩된 비트(1731)와 상기 제2 리딩 트레일링 비트(1741)는 제2 서브스트림을 형성함 -;
    상기 제1 서브스트림에 대한 제1 트레일링 비트를 결정하는 단계;
    상기 제2 서브스트림에 대한 제2 트레일링 비트를 결정하는 단계;
    상기 제1 코딩된 비트 및 결정된 제1 트레일링 비트를 포함하는 제1 비트로 표현되는 제1 코딩된 값을 산술 디코딩하는 단계; 및
    상기 제2 코딩된 비트 및 결정된 제2 트레일링 비트를 포함하는 제2 비트로 표현되는 제2 코딩된 값을 산술 디코딩하는 단계
    를 포함하는 방법.
  19. 제18항에 있어서,
    상기 제1 코딩된 비트의 길이를 지시하는 제1 길이 지시(1710), 및 상기 제2 코딩된 비트의 길이를 지시하는 제2 길이 지시(1711)와 함께 상기 비트스트림(1750)으로부터 상기 제1 코딩된 비트(1730) 및 상기 제2 코딩된 비트(1731)를 추출하는 단계를 더 포함하는 방법.
  20. 제19항에 있어서,
    상기 제1 길이 지시(1710)는 상기 비트스트림 내에서 상기 제1 코딩된 비트(1730)에 선행하고,
    상기 제2 길이 지시(1711)는 상기 비트스트림 내에서 상기 제2 코딩된 비트(1731)에 선행하는, 방법.
  21. 제20항에 있어서,
    상기 제2 길이 지시(1711)는 상기 비트스트림(1750) 내에서 상기 제1 코딩된 비트(1730)에 선행하는, 방법.
  22. 제21항에 있어서,
    상기 제2 리딩 트레일링 비트(1712)의 양에 대한 지시는 상기 비트스트림(1750) 내에서 상기 제1 코딩된 비트(1730)에 선행하는, 방법.
  23. 제18항 내지 제22항 중 어느 한 항에 있어서,
    상기 제1 코딩된 비트(1730), 상기 제2 코딩된 비트(1731), 상기 제1 리딩 트레일링 비트(1740) 및 상기 제2 리딩 트레일링 비트(1741)를 추출한 후 상기 비트스트림(1750)의 나머지 비트를 폐기하는 단계를 더 포함하는 방법.
  24. 제18항 내지 제23항 중 어느 한 항에 있어서,
    상기 산술 디코딩하는 단계는 제1 산술 디코더를 사용하여 상기 제1 서브스트림을 디코딩하고, 제2 산술 디코더를 사용하여 상기 제2 서브스트림을 디코딩하는 단계를 포함하고,
    상기 제1 산술 디코더 및 상기 제2 산술 디코더를 사용하는 상기 산술 디코딩은 적어도 부분적으로 병렬로 수행되는, 방법.
  25. 제15항 내지 제24항 중 어느 한 항에 있어서,
    상기 산술 디코딩은 범위 디코딩(range decoding)인, 방법.
  26. 비일시적 매체에 저장되고 코드 명령어를 포함하는 컴퓨터 프로그램으로서,
    상기 코드 명령어는 하나 이상의 프로세서에서 실행될 때, 상기 하나 이상의 프로세서로 하여금 제1항 내지 제25항 중 어느 한 항에 따른 방법의 단계를 실행하게 하는,
    컴퓨터 프로그램.
  27. 입력 데이터를 비트스트림으로 산술 인코딩하기 위한 장치로서,
    처리 회로를 포함하고,
    상기 처리 회로는,
    상기 입력 데이터를 코딩된 비트와 트레일링 비트로 산술 인코딩하도록;
    상기 코딩된 비트(1730-1731)를 상기 비트스트림(1750)에 포함시키도록;
    산술 인코딩된 입력 데이터의 구간의 최소값(1610)과 최대값(1630)을 결정하도록;
    연속적인 트레일링 비트이고, 또한 결정된 최대값(1630)을 나타내는 제1 MSB 내에서, 결정된 최소값(1610)을 나타내는 제2 MSB 내에서와 동일한 값을 갖는 리딩 트레일링 비트(1740-1741)의 양을 결정하도록; 그리고
    상기 비트스트림(1750)에 상기 리딩 트레일링 비트의 결정된 양에 대한 지시(1720-1721), 및 상기 리딩 트레일링 비트(1730-1731)를 포함시키도록
    구성되는, 장치.
  28. 비트스트림(1750)으로부터 데이터를 산술 디코딩하기 위한 장치로서,
    처리 회로를 포함하고,
    상기 처리 회로는,
    상기 비트스트림(1750)으로부터 리딩 트레일링 비트의 양에 대한 지시(1720-1721)를 추출하도록;
    상기 비트스트림(1750)으로부터 복수의 코딩된 비트(1730-1731)를 추출하도록;
    상기 비트스트림(1750)으로부터, 상기 리딩 트레일링 비트의 양에 대한 지시(1720-1721)에 의해 지정되는 상기 리딩 트레일링 비트(1740-1741)를 추출하도록;
    추출된 리딩 트레일링 비트에 상기 트레일링 비트의 미리 결정된 최대 길이까지 0을 추가하는 것을 포함하여 트레일링 비트를 결정하도록; 그리고
    상기 코딩된 비트와 결정된 트레일링 비트를 포함하는 비트로 표현되는 코딩된 값을 산술 디코딩하여 상기 데이터를 획득하도록
    구성되는, 장치.
KR1020237029857A 2021-04-26 2021-04-26 산술 인코딩 및 디코딩에서의 트레일링 비트 처리 KR20230141842A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/RU2021/000172 WO2022231451A1 (en) 2021-04-26 2021-04-26 Handling trailing bits in arithmetic encoding and decoding

Publications (1)

Publication Number Publication Date
KR20230141842A true KR20230141842A (ko) 2023-10-10

Family

ID=76730968

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237029857A KR20230141842A (ko) 2021-04-26 2021-04-26 산술 인코딩 및 디코딩에서의 트레일링 비트 처리

Country Status (7)

Country Link
US (1) US20240056577A1 (ko)
EP (1) EP4278604A1 (ko)
JP (1) JP2024510715A (ko)
KR (1) KR20230141842A (ko)
CN (1) CN117296313A (ko)
BR (1) BR112023016138A2 (ko)
WO (1) WO2022231451A1 (ko)

Also Published As

Publication number Publication date
CN117296313A (zh) 2023-12-26
JP2024510715A (ja) 2024-03-11
EP4278604A1 (en) 2023-11-22
BR112023016138A2 (pt) 2023-11-21
WO2022231451A1 (en) 2022-11-03
US20240056577A1 (en) 2024-02-15

Similar Documents

Publication Publication Date Title
CN113168718B (zh) 视频解码方法、装置和存储介质
JP7271683B2 (ja) エンコーダ、デコーダ、および対応するイントラ予測方法
JP7039731B2 (ja) イントラ予測のための方法及び装置
JP2022530765A (ja) 点群コーディング用の属性をコーディングする方法
AU2019330406B2 (en) Method and apparatus for intra prediction
KR20220123094A (ko) 인코더, 디코더 그리고 대응하는 방법 및 장치
JP2022524357A (ja) エンコーダ、デコーダ、及び対応するインター予測方法
US11716479B2 (en) Method of efficient signalling of CBF flags
KR20220051399A (ko) 시퀀스 파라미터 세트에서의 서브픽처 시그널링을 위한, 인코더, 디코더 및 대응하는 방법
KR20220127351A (ko) 하이 레벨 신택스를 시그널링하는 것에 관한 인코더, 디코더 및 대응하는 방법
JP7397878B2 (ja) イントラ・サブ・パーティション・コーディング・モードのための方法及び装置
JP2023153193A (ja) クロミナンス量子化パラメータのシグナリングのための方法及び装置
KR20210134391A (ko) 포인트 클라우드 코딩을 위한 패치 데이터 유닛 코딩 및 디코딩
JP7384998B2 (ja) クロマイントラモード導出のエンコーダ、デコーダ、および対応する方法
KR20220143943A (ko) 슬라이스 헤더 신택스 엘리먼트의 시그널링을 단순화하는 인코더, 디코더, 및 대응하는 방법
KR102577071B1 (ko) 가장 가능성 있는 인트라 모드를 예측하는 방법 및 장치
US20240056577A1 (en) Handling trailing bits in arithmetic encoding and decoding
US20240056098A1 (en) Parallel entropy coding
KR20220140858A (ko) 슬라이스에 대한 픽처 파티셔닝 정보를 시그널링하기 위한 디코더 및 대응하는 방법