google / ffcc

Fast Fourier Color Constancy: an auto white balance solution with machine learning in Fourier space
https://jonbarron.info/
Apache License 2.0
203 stars 72 forks source link

A not obvious but important bug about fc-hyper-net(ffcc with meta) #15

Open zhujl3 opened 3 years ago

zhujl3 commented 3 years ago

When I reviewed the code in internal/TrainModel.m, line 283 ~ 288, the original codes are as below:

if params.DEEP.WHITEN_FEATURES
      % Unwhiten the first layer according to the whitening transformation, so
      % that is produces the correct output on the unwhitened feature vectors.
      model.W{1} = model.W{1} * whitening_transformation.A;
      model.b{1} = model.W{1} * whitening_transformation.b + model.b{1};
end

Since model.W{1} changed before model.b{1} it will lead a computational mistake to model.b{1}.And this mistake may weaken the model performance. So I simply change the code order as below:

      model.b{1} = model.W{1} * whitening_transformation.b + model.b{1};
      model.W{1} = model.W{1} * whitening_transformation.A;

And after this change, I got a significant improvement in my experiment.^.^

jonbarron commented 3 years ago

Wow, thanks for identifying this! Definitely a very important bug. Are you able to re-run the fixed code on any of the existing benchmarks (Gehler Shi or Cheng)? Updating the error metric structs in the *Hyperparams.m files under /projects/ with this bug fix would be very helpful for everyone using this code.