[Enhance] Support evaluate on both EMA and non-EMA models. #1204
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Sometimes, we want to get the metrics of both EMA and original models during validation and testing.
Modification
Add an
EMAHook
in MMCLS which inherits theEMAHook
in MMEngine.BC-breaking (Optional)
Almost not, the only breaking is the modification about
after_load_checkpoint
. In the original logic, both the source model and the ema model load ema parameters ifresume=False
, which caused we cannot to access the source parameters during testing.In this PR, this logic is moved to
before_train
, which means therunner.load_or_resume
will always load ema parameters to the ema model and load source parameters to the source model. And only whenrunner.train
is called andresume=False
, we will load ema parameters to the source parametersUse cases (Optional)
Checklist
Before PR:
After PR: