Codificação por entropia no padrão MPEG-4/AVC:
CAVLC (Context-Based Adaptive Variable Length Coding ) e CABAC
(Context-Based Adaptive Binary Arithmetic Coding)
Carolina Medeiros Carvalho
Tópicos a abordar:
⇒
Introdução e visão geral sobre o padrão H.264/MPEG-4 AVC
⇒
Codificacão por entropia em outros padrões de codificação de vídeo
⇒
Codificação por entropia no padrão H.264/MPEG4-AVC:
a técnica CAVLC
⇒
Codificação por entropia no padrão H.264/MPEG4-AVC:
a técnica CABAC
⇒
Comparação de desempenho: CAVLC x CABAC
⇒
Conclusões
Visão geral sobre o padrão H.264/MPEG-4 AVC
⇒
Padrão internacional recente de codificação de vídeo, estado da arte. Padrão ITU-T e ISO
⇒
Vasta gama de aplicações. Ex: videotelefonia,
videoconferência, TV, streaming de vídeo e outras
⇒
Usa conceito tradicional de estimativa e compensação de movimento e codificação por transformada porém
incorporando novas características:
– Predição intra-espacial;
– Estimativa e compensação de movimento usando múltiplos quadros de referência e uso de quadros B como referência para codificar
outros quadros;
– Menor tamanho de bloco para aplicação de transformada;
– Novos métodos de codificação por entropia (CAVLC e CABAC)
Visão geral sobre o padrão H.264/MPEG-4 AVC
Codificador de vídeo do H.264/MPEG-4 AVC
Codificacão por entropia em outros padrões de codificação de vídeo
⇒
Padrões H.263 e MPEG-2:
– Codificação por entropia baseada em tabelas fixas com códigos VLC (Variable Length Codes). Bloco de coeficientes
transformados e quantizados é mapeado em uma lista
unidimensional (vetor). Esta lista é codificada usando uma combinação de codificação por carreira e VLC (tipicamente codificação de Huffman)
– Desvantagens deste tipo de codificação por entropia:
• O uso de tabelas fixas de VLC não permite a adaptação às verdadeiras estatísticas dos símbolos.
• Redundâncias entre os símbolos não podem ser exploradas pois há uma atribuição fixa entre as tabelas VLC e os
elementos de sintaxe.
• Eventos com probabilidade grande não são tão bem
representados (na comparação com a codificação aritmética)
Codificacão por entropia em outros padrões de codificação de vídeo
⇒
Já quanto ao H.264/MPEG-4 AVC:
– CAVLC (Context-Based Adaptive Variable Length Coding):
• Usa adaptação ao contexto e VLC. Redundâncias inter- símbolo são exploradas através da comutação de tabelas VLC para os elementos dependendo dos símbolos já
codificados
– CABAC (Context-Based Adaptive Binary Arithmetic Coding):
• A redundância inter-símbolo é explorada pelo uso de contextos. Comutação entre diferentes modelos de
probabilidade de acordo com os símbolos já codificados.
• Codificação Aritmética Adaptativa. Adaptação às estatísticas dos símbolos, as quais variam no tempo.
• Codificação aritmética proporciona uma maior eficiência de codificação pelo uso de palavras de código não inteiras
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica
CAVLC CAVLC, usado para codificar dados de blocos residuais vetorizados, foi projetado para tirar vantagem de várias características destes vetores:
– Contêm majoritariamente zeros: codificação por carreira para representar sequências de zeros de maneira compacta.
– Os coeficientes não nulos de maior freqüência são usualmente seqüências de +1 e -1, denominados “trailing 1s” ou “T1s”:
CAVLC codifica o número de T1s de uma maneira compacta.
– Forte correlação estatística entre as quantidades de coeficientes não nulos em blocos vizinhos: n° de coeficientes não nulos é
codificado escolhendo-se uma tabela VLC dependendo das quantidades de coeficientes não nulos em blocos vizinhos.
– A magnitude dos coeficientes não nulos decresce na direção das freqüências mais altas: a escolha da tabela VLC para a magnitude depende das magnitudes dos níveis recém codificados.
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica
CAVLC CAVLC codifica um bloco de coeficientes seguindo os seguintes passos:
I. Codifica o número de coeficientes não nulos e trailing ones (coeff_token)
II. Codifica o sinal de cada T1
III. Codifica os níveis dos coeficientes não-nulos remanescentes IV. Codifica o número total de zeros antes do último coeficiente V. Codifica cada seqüência de zeros
Exemplo de codificação e descrição dos passos
Bloco 4x4:
Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
Exemplo de codificação e descrição dos passos Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...
I. Codifica o número de coeficientes não nulos e trailing ones (coeff_token)
TotalCoeffs = 5 (n° total de coeficientes não nulos, 0<=totalCoeffs<=16) T1s=3 (número de trailing ones, 0<=T1s<=3)
coeff_token= (5,3)
Para codificar coeff_token: Num-VLC0, Num-VLC1, Num-VLC2 ou Num-FLC. A escolha depende do parâmetro N, dado por:
N = (Nu + NL)/2
Nu: n°de coeficientes não nulos no bloco imediatamente superior ao bloco sendo codificado .
NL : o n°de coeficientes não nulos no bloco imediatamente à esquerda do bloco sendo codificado
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
Exemplo de codificação e descrição dos passos Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...
I. Codifica o número de coeficientes não nulos e trailing ones (coeff_token)
O parâmetro N determina a tabela de look-up segundo a Tabela abaixo.
No nosso exemplo, assumiremos que a tabela Num-VLC0 é usada para codificar coeff_token (5, 3), o que resulta na palavra de código 00001
Valor de N Tabela para coeff_token
0,1 Num-VLC0
2,3 Num-VLC1
4,5,6,7 Num-VLC2
8 ou mais FLC
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica
CAVLC
Exemplo de codificação e descrição dos passos
II. Codifica o sinal de cada T1
Para cada T1 ( +/-1 finais), um único bit codifica o sinal (0 = +, 1= -).
Eles são codificados em ordem reversa, começando com o T1 de maior freqüência.
No nosso exemplo: 0,3,0,1,-1,-1,0,1,0,0... Saída: 0 1 1 1 1 0
III. Codifica os níveis dos coeficientes não-nulos remanescentes
Eles são codificados na ordem reversa.
A escolha da tabela VLC para codificar cada nível se adapta dependendo da magnitude de cada nível sucessivo (adaptativo ao contexto)
7 tabelas a escolher: de Level_VLC0 a Level_VLC6.
Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
Exemplo de codificação e descrição dos passos Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...
III. Codifica os níveis dos coeficientes não-nulos remanescentes
A escolha da tabela se dá assim:
(a) A tabela é inicializada para Level_VLC0 (a menos que existam mais que 10 coeficientes não nulos e menos que 3 T1s, caso em que se começa com Level_VLC1).
(b) O componente não nulo de mais alta freqüência é codificado
(c) Se a magnitude deste coeficiente é maior que um limite pré-definido, a tabela escolhida é a próxima.
Tabela VLC atual Limite para incrementar tabela
VLC0 0
VLC1 3
VLC2 6
VLC3 12
VLC4 24
VLC5 48
VLC6 Não se aplica (tabela mais alta)
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
III. Codifica os níveis dos coeficientes não-nulos remanescentes
No nosso exemplo, os coef. não nulos (retirando-se os T1s) são: 3 e 1
O primeiro a codificar é o 1 (ordem reversa), para o qual é utilizada Level_VLC0. A palavra de código obtida é 1.
Para o coeficiente 3 é utilizada Level_VLC1 obtendo-se a palavra de código 0010
IV. Codifica o número total de zeros antes do último coeficiente
TotalZeros é a soma de todos os zeros que precedem o mais alto coeficiente não nulo no vetor reordenado. Ele é codificado com um VLC separado.
No nosso exemplo:
0,3,0,1,-1,-1,0,1,0,0...
TotalZeros=3. Usando a tabela VLC correspondente para TotalZeros obtém-se a palavra de código 111.
Exemplo de codificação e descrição dos passos
Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
Exemplo de codificação e descrição dos passos Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...
Para cada coeficiente não-nulo (percorrendo-se a ordem reversa) é
codificado um par ZerosLeft/run_before, com ZerosLeft consistindo no número total de zeros à esquerda do coeficiente não-nulo em questão e run_before consistindo no número de zeros imediatamente à esquerda do coeficiente não nulo em questão. O par ZerosLeft/run_before é então
usado como entrada numa tabela VLC para obter a palavra de código.
Esta codificão só não é necessária em dois casos:
(a) Se não existem mais zeros à esquerda para codificar
(b) Se o coeficiente não nulo em questão é o de menor freqüência (último coeficiente não nulo na ordem reversa).
V. Codifica cada seqüência de zeros
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
No nosso exemplo, coeficientes não-nulos a avaliar:
0,3,0,1,-1,-1,0,1,0,0...
• Para o 1: ZerosLeft=3, run_before=1 e a palavra de código obtida=10
• Para o -1: ZerosLeft=2, run_before=0 e a palavra de código obtida=1
• Para o -1: ZerosLeft=2, run_before=0 e a palavra de código obtida=10
• Para o 1: ZerosLeft=2, run_before=1 e a palavra de código obtida=01
• Para o 3: não é necessário codificar run_before por se tratar do último coeficiente não nulo.
Exemplo de codificação e descrição dos passos Vetor ordenado:0,3,0,1,-1,-1,0,1,0,0...
V. Codifica cada seqüência de zeros
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
Bits transmitidos:000010001110010111101101
Exemplo de codificação e descrição dos passos
Resultado da codificação do bloco:
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CAVLC
Exemplo de decodificação
Só dois 0s foram inseridos mas, como TotalZeros= 3, outro zero é inserido antes do coeficiente de mais baixa freqüência.
Saída: 0,3,0,1,-1,-1,0,1 (completada com 0s à direita até possuir 16 n°s) Abaixo a decodificação do bloco codificado anteriormente.Valores adicionados à saída em cada estágio estão sublinhados.
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CABAC
No CABAC, o processo de codificação se dá por três passos elementares:
I. Binarização
II. Modelagem de contexto
III. Codificação aritmética binária
Codificação por entropia no padrão
H.264/MPEG4-AVC: a técnica CABAC
I. A Binarização
⇒
Mapeamento de um elemento de sintaxe em uma string de bins.
⇒
Visa simplificação da modelagem e implementação.
⇒
As probabilidades dos símbolos individuais podem ser
recuperadas usando as probabilidades dos bins individuais das strings de bins.
⇒
Tipos básicos de esquemas de binarização:
• Código unário
• Código unário truncado
• Código Exp-Golomb de k-ésima ordem
• Código de comprimento fixo.
• Esquemas híbridos (concatenação dos tipos anteriores)
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica
CABAC
I. A Binarização
⇒ Tipos básicos de esquemas de binarização:
•Código unário: (X: valor a binarizar) - X bits “1” seguido de um bit de fim “0”.
Ex: código unário para X= 6 => 1111110
•Código unário truncado (T1):
- S: maior valor que um símbolo a binarizar pode assumir.
Logo, 0<=X<=S.
- T1 para X, se X<S é definido pelo código unário.
- Se X=S, o bit de fim “0” é negligenciado.
Ex:T1 para X=6 com S=9=>1111110 T1 para X=9 com S=9=>111111111
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica
CABAC
I. A Binarização
⇒Tipos básicos de esquemas de binarização:
• Código Exp-Golomb de k-ésima ordem (EGk):
- Consiste em prefixo+sufixo
- Prefixo EGk: código unário do valor L(X) = (log2[X/2k + 1])
- Sufixo EGk: representação binária de X + 2k (1 - 2 L(X) ) usando k + L(X) bits.
• Código de comprimento fixo (FL):
- Dado pela representação binária de X com um número fixo de bits dado por log2S, onde 0<=X<S
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica
CABAC
I. A Binarização
⇒Tipos básicos de esquemas de binarização:
• Esquemas híbridos (concatenação dos tipos anteriores):
1. FL (prefixo)+TU (sufixo)
2. TU(prefixo) + EGk(sufixo), conhecido como UEGk(binarizações Unárias/Exp-Golomb de k-ésima ordem):
• Esquema aplicado aos vetores de movimento e aos valores absolutos dos níveis de coeficientes transformados. Para pequenos valores, o código unário é aplicado.
• Exemplo:Vetor de movimento
- Prefixo com binarização TU para o valor absoluto de mvd com valor de corte S=9.
- Se mvd = 0, o resultado será apenas o código de prefixo “0”.
- Se 0<|mvd|<9, o sufixo é formado apenas pelo bit de sinal:“1”
para valores de mvd negativos e “0”, caso contrário.
- Se |mvd|>=9, o sufixo é construído como uma palavra de
código EG3 para o valor |mvd|-9 e a ele é anexado o bit de sinal.
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica
CABAC I. A Binarização
⇒Tipos básicos de esquemas de binarização:
• Esquemas híbridos :
2. UEGk-Exemplo:valores absolutos de coeficientes transformados (aplicado a abs_level - 1)
-Valor de corte S=14 para o prefixo TU e ordem k=0 para o sufixo EGk.
- Binarização semelhante à aplicada ao vetor de movimento, mas não tem bit de sinal anexado ao sufixo
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica CABAC
II. A Modelagem de Contexto
⇒ Quatro tipos básicos de projetos de modelos de contexto:
• Baseado em informações de blocos vizinhos codificados anteriormente. Usualmente, uma função é aplicada sobre os valores correspondentes dos elementos vizinhos à esquerda e acima em relação ao elemento de sintaxe corrente determinando- se o tipo de modelo de contexto para um bin específico
• Baseado em bins anteriores. Os valores dos bins codificados anteriormente (b0, b1, b2, ... , bi-1) são usados na escolha do modelo para um dado bin com índice i.
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica CABAC
II. A Modelagem de Contexto
⇒Quatro tipos básicos de projetos de modelos de contexto:
• Baseado na posição de escaneamento. Aplicado a dados
residuais, baseia-se na posição dos coeficientes transformados de um dado bloco após vetorização, ou seja, no índice desse vetor, representando a posição do coeficiente sendo codificado.
• Baseado nos níveis codificados anteriormente. Aplicado a coeficientes transformados, envolve funções de modelagem e a avaliação do número acumulado dos níveis codificados em
relação a um valor específico.
OBS:Além dos tipos acima, existem atribuições fixas de modelos de probabilidade a índices de bins codificados no modo regular.
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica CABAC
II. A Modelagem de Contexto
No CABAC existem 399 contextos, cada um deles identificado por seu índice. Os índices de contexto variam de 0 a 398. Abaixo, os elementos de sintaxe e seus intervalos associados de índice de contextos.
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica CABAC
II. A Modelagem de Contexto
Exemplo: Escolha dos contextos para os bins da componente x do vetor de movimento
Através da informação de vetor de movimento dos dois blocos vizinhos a C, calcula-se ek(C), que por sua vez determina o n° do contexto a ser escolhido para o primeiro bin do vetor de movimento do bloco C.
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica CABAC
III. A Codificação Aritmética Binária
• A codificação aritmética tem uma maior eficiência de codificação em relação a outro métodos como Huffman.
• No CABAC, a codificação aritmética binária é um mecanismo rápido baseado somente em tabelas de look-ups e deslocamento evitando-se multiplicações.
• Ela permite também a adaptação simples e rápida às probabilidades dos símbolos.
Codificação por entropia no padrão H.264/MPEG4-AVC: a técnica CABAC
III. A Codificação Aritmética Binária
• No início do processo de codificação, os modelos de probabilidade associados aos diferentes contextos são
inicializados com uma distribuição inicial pré-computada.
• Após a codificação de cada símbolo, o contador de freqüência da decisão binária relacionada é atualizado, portanto, provendo uma nova estimativa de probabilidade para a próxima decisão de
codificação.
• Quando o número total de ocorrência dos símbolos relacionados a um dado modelo excede um limite, o contador de freqüência é
escalonado para baixo. Este reescalonamento periódico faz com que observações passadas percam peso exponencialmente para que haja adaptação a características não estacionárias da fonte.
Comparação de desempenho:
CAVLC x CABAC
⇒Economias nas taxas de bits x razão sinal-ruído .Economias
percentuais do CABAC em relação ao H.264-Perfil Baseline.
Ex: 9 a 14% de 30 a 38 dB
⇒Comparação entre H.264/MPEG4- AVC HP e MP (ambos com
CABAC e CAVLC) e MPEG-2.
Curvas razão sinal-ruído versus taxas de bits
Conclusões
⇒
As novas técnicas de codificação por entropia CAVLC e CABAC introduzidas no padrão H.264/MPEG4 AVC foram importantes instrumentos para o desempenho e eficiência excelentes que foram alcançados por este padrão.
⇒
Pelo uso de contextos e adaptação, tais técnicas exploram a redundância entre símbolos de maneira eficiente e também se adaptam às mudanças nas probabilidades dos símbolos dinamicamente.
⇒
O CABAC, pelo uso de um maior número de contextos e
pelo uso da codificaçao aritmética consegue uma eficiência
maior na codificação, entretanto não está disponível no perfil
baseline do padrão H.264/MPEG4 AVC.
Referências
[1] (2005) Detlev Marpe, Thomas Wiegand, Stephen Gordon
“H.264/MPEG4-AVC Fidelity Range Extensions: Tools, Profiles,
Performance, and Application Areas”, IEEE International Conference on Image Processing (ICIP'05), Genova, Italy, September 2005.
[2] http://pds.cse.nsysu.edu.tw/lecture/entropy%20coding.pdf [3] (2003) Detlev Marpe, Heiko Schwarz, and Thomas Wiegand
“Context-Based Adaptive Binary Arithmetic Coding in the
H.264/AVC Video Compression Standard”, IEEE Transactions on Circuits and Systems for Video Technology, Vol. 13, No. 7, pp. 620- 636, July 2003, Publication Award of ITG.
[4] (2001) Detlev Marpe, Gabi Blättermann, Guido Heising, and Thomas Wiegand “Video Compression Using Context-Based
Adaptive Arithmetic Coding”, IEEE International Conference on Image Processing (ICIP'01), Thessaloniki, Greece, September 2001.
[5] (2002) Iain E G Richardson “H.264 / MPEG-4 Part 10 : Variable Length Coding”, http://www.rgu.ac.uk/files/h264_vlc.pdf