Live data from Hacker News

Guetzli: A New Open-Source JPEG Encoder

research.googleblog.com

51–60 of 135 posts

Re: Guetzli: A New Open-Source JPEG Encoder

#51
post #49

As the author of the original libjpeg (back in 1991), I think this has been a long time coming! More power to Google.

Thank you for giving such a present for all of us! JPEG was in my opinion really ahead of its time, is still impressive, and many of the engineering compromises between simplicity and efficiency are just brilliant.

Re: Guetzli: A New Open-Source JPEG Encoder

#53
This seems to be optimizing for a "perceptual loss function" over in https://github.com/google/butteraugli/blob/master/butteraugl...

Looking at the code to that, it looks like 1500 lines of this:

    double MaskDcB(double delta) {
      PROFILER_FUNC;
      static const double extmul = 0.349376011816;
      static const double extoff = -0.894711072781;
      static const double offset = 0.901647926679;
      static const double scaler = 0.380086095024;
      static const double mul = 18.0373825149;
      static const std::array lut =
          MakeMask(extmul, extoff, mul, offset, scaler);
      return InterpolateClampNegative(lut.data(), lut.size(), delta);
    }
The code has hundreds of high precision constants. Some even seem to be set to nonsensical values (like kGamma to 0.38) Where did all of them come from? The real science here seems to be the method by which those constants were chosen, and I see no details how it was done.

Re: Guetzli: A New Open-Source JPEG Encoder

#54

This seems to be optimizing for a "perceptual loss function" over in https://github.com/google/butteraugli/blob/master/butteraugl... Looking at the code to that, it looks like 1500 lines of this: double MaskDcB(double delta) { PROFILER_FUNC; static const double extmul = 0.349376011816; static const double extoff = -0.894711072781; static const double offset = 0.901647926679; static const double scaler = 0.38008609502…

So... machine learning? (Sorry for buzz-wording)

Re: Guetzli: A New Open-Source JPEG Encoder

#56

This seems to be optimizing for a "perceptual loss function" over in https://github.com/google/butteraugli/blob/master/butteraugl... Looking at the code to that, it looks like 1500 lines of this: double MaskDcB(double delta) { PROFILER_FUNC; static const double extmul = 0.349376011816; static const double extoff = -0.894711072781; static const double offset = 0.901647926679; static const double scaler = 0.38008609502…

This kind of constant appears naturally when you approximate some computation, a famous example being Gaussian quadrature (look at x_i values depending on the "precision" you want : https://en.m.wikipedia.org/wiki/Gaussian_quadrature )

I don't know if this code is related to that but just pointing out that seemingly nonsensical constants may appear more than one would thing.

Re: Guetzli: A New Open-Source JPEG Encoder

#58

Lots of Swiss German coming from Google lately. Zöpfli, Brötli and now Guetzli. I'm still hoping for a Google Now that understands Swiss German :)

There's a huge Google lab in Zurich [1], probably that's why.

[1] https://careers.google.com/locations/zurich/

Re: Guetzli: A New Open-Source JPEG Encoder

#59
post #54

This seems to be optimizing for a "perceptual loss function" over in https://github.com/google/butteraugli/blob/master/butteraugl... Looking at the code to that, it looks like 1500 lines of this: double MaskDcB(double delta) { PROFILER_FUNC; static const double extmul = 0.349376011816; static const double extoff = -0.894711072781; static const double offset = 0.901647926679; static const double scaler = 0.38008609502…

So... machine learning? (Sorry for buzz-wording)

It is old school: 100000+ cpu hours of Nelder-Mead method (+common tricks) to match butteraugli to a set of 4000 human rated image pairs created with an earlier version of Guetzli and specially-built image distortion algorithms.

Re: Guetzli: A New Open-Source JPEG Encoder

#60
post #35

Sort of related, but what's the story with fractal image compression? When I was at university (~20 years ago) there was a lot of research going in to it, with great promises heralded for web-based image transfer. There was a Netscape plugin that handled them. They seemed to just disappear in the early 2000s.

Wavelets have horrific local texture artifacts: think a random patch of grass having detail and the rest not.
Post reply on HN