JVET-K0564 Specification draft for Adaptive Loop Filter [V. Seregin, N. Hu, M. Karczewicz (Qualcomm)] [late]
Some suggestions were made during the review of this proposed draft text as follows:
- Specifiy the ranges of variables
- Correctly specify the bit depth of filtering operations
- Impose constraints that an encoder should not send coefficients that cause overflows
- Describe in a way that it is neutral about the bit depth of the signal samples
This looked generally OK, but probably needed more detailed checking by editors.
Sub-CE5: Non-local filter
Test# | Description | Document# |
2.5.1 | Non-local Structure-based Filter | |
2.5.2 | Non-local mean in-loop filter | |
2.5.3 | Noise Suppression Filter |
Notes: SVD: singular-value decomposition
Test# | Line buffer size | Filter unit | Search window size | Overlapped units? | matching criterion | Division Required ? | How to filter | Matrix size/filter tap | Filter coeffs | On/off control | Stage |
2.5.1 | 8 (L), 4 (C) | 6×6 | 32×32 | Y | SSD | Y | SVD-based filtering | 21×6×6 | Derived on-the-fly | Frame and CTU level | After deblocking, before SAO |
2.5.2 | 16 (L) | 8×8 | 33 x 33 | N | SSD | Y | Linear filter with normalization | 16-tap | Based on estimated quantization noise (signalled index) and SSD between current and reference patch | Slice/CTB/ 32×32 | After deblocking, before SAO |
2.5.3 | 0 (L) | 8×8 | 16×16 within CTB | N | SSD | Y | Noise Suppressor’s Collaborative Filter in Hadamard transform domain | Hadamard transform 8x1; 8x1-tap filter | Based on QP value | Slice/256×256/128×128/64×64/32×32 | After SAO, before ALF |
Results vs. VTM
| AI | RA | LDB | |||||||||||||||
Test# | Y | U | V | EncT | DecT | Y | U | V | EncT | DecT | Y | U | V | EncT | DecT | |||
2.5.1 | -2.55% | -4.26% | -5.03% | 108% | 4748% | -3.66% | -2.26% | -2.56% | 100% | 2431% | -2.20% | -0.84% | -1.27% | 112% | 3086% | |||
2.5.2* | -0.63% | -1.98% | -1.99% | 102% | 235% | -1.24% | -3.95% | -3.49% | 100% | 211% | -1.00% | -3.99% | -4.24% | 101% | 179% | |||
2.5.3.a* | -0.61% | -1.58% | -1.79% | 100% | 135% | -1.03% | -2.04% | -1.89% | 100% | 134% | -0.67% | -1.49% | -1.59% | 100% | 128% | |||
2.5.3.b* | -0.61% | 0.09% | 0.09% | 100% | 125% | -0.99% | -0.02% | 0.00% | 100% | 123% | -0.62% | 0.69% | 0.50% | 100% | 119% | |||
Results vs. BMS
| AI | RA | LDB | |||||||||||||
Test# | Y | U | V | EncT | DecT | Y | U | V | EncT | DecT | Y | U | V | EncT | DecT | |
2.5.1 | -0.93% | -1.95% | -2.30% | 100% | 2581% | -1.47% | -1.88% | -2.16% | 97% | 1255% | -1.53% | -1.10% | -0.88% | 103% | 1861% | |
2.5.2* | -0.31% | -1.45% | -1.48% | 100% | 167% | -0.57% | -3.57% | -3.25% | 100% | 139% | -0.76% | -3.94% | -3.99% | 101% | 138% | |
2.5.3.a* | -0.34% | -0.81% | -0.90% | 100% | 119% | -0.62% | -2.41% | -2.42% | 100% | 114% | -0.73% | -2.58% | -2.35% | 100% | 117% | |
2.5.3.b* | -0.34% | 0.11% | 0.11% | 100% | 113% | -0.60% | 0.18% | 0.18% | 100% | 109% | -0.68% | 0.40% | 0.43% | 100% | 112% | |
2.5.1: Current SVD as used in CE uses floating point implementation. There was a proposal on fixed point implementation by the last meeting, but this was not investigated in CE. Overall, decoder complexity of 2.5.1 is very high. The compression is reduced (but still around 1.5% rate reduction) when combined with GALF (in BMS). The method itself is probably more complex than GALF but provides less gain on top of VTM.
2.5.2/2.5.3 These two approaches provide 1.2% (non-local mean filter) and 1% (Hadamard based noise suppression). This reduces to roughly 0.6% when used in BMS (probably less gain when combined with ALF). Both of these approaches are more complex than e.g. the current design of the bilateral filter from CE2.1, which still gives similar gain (0.5%) for BMS.
No action at this moment, further study for significant complexity reduction. Would also be interesting to identify in which cases the non-local filters are able to provide gain that the other loop filters cannot provide. For the SVD based approach, the proponents report that the usage is between 10% and 50%, depending on sequence.
As a general statement, VVC should have an overall clean design, and it should be avoided to operate a large number of loop filters sequentially, unless they provide substantial individual gains, and not being overly complex.