]> granicus.if.org Git - libvpx/commit
Convert Vizier RD parameters to normalized factors
authorPaul Wilkins <paulwilkins@google.com>
Mon, 22 Mar 2021 19:45:10 +0000 (19:45 +0000)
committerPaul Wilkins <paulwilkins@google.com>
Tue, 23 Mar 2021 15:05:32 +0000 (15:05 +0000)
commite37ee40f7ee0dbafa41e7d1c32dc34740727c7a1
tree140156a811218a55e074d91031e3d92dcd04eb0c
parent90c1cc651592f2dbad517ceb65dc0c0fef3d0dbc
Convert Vizier RD parameters to normalized factors

This patch converts the Vizier custom RD multipliers, to factors
that adjust each RD multiplier either side of its default value, where
a factor of 1.0 will give the previous default  behavior.

Ultimately I would like to replace the multiple RD multipliers
triggered at different Q thresholds (eg, low, medium, high q)
with a function that adjusts the rd behavior smoothly as Q
changes.

Vizier could then be presented with a single adjustment control
for each of key frame and inter frame rd.

The current behavior is problematic.

Firstly having hard threshold Q values at which rd behavior changes
may cause anomalies in the rate distortion curve, where in some
situations, raising  Q, for example,  may not cause the expected drop
in rate and rise in distortion, because we have crossed a threshold
where the rate distortion multiplier changes sharply and this alters
the balance of bits spent in the prediction and residual parts of the
signal.

Having a single  value that is used for a range of Q index values
(eg 0-64), (65-128)  may also cause problems and over-fitting in
the context of the Vizier ML project. This project tries to optimize
the values for each Q range, for various YT formats, but does so
by analyzing the results of single point encodes on a set of clips.
For a given format all the clips are encoded with the same parameters
(target rate etc) so  there is likely to be clustering in regards to the
Q values used. For example the training set may give a new value
for the Q  range 0-64 but most of the data points used may have Q
close 64.

It will likely require several iterations working with the Vizier team
to get this right. This patch just gives an initial framework for
testing.

Change-Id: Iaa4cd5561b95a202bcae7a1d876c4f40ef444fa2
vp9/encoder/vp9_rd.c
vp9/encoder/vp9_rd.h