Fix UnboundLocalError in RT-DETR loss when auxiliary_loss is False #42223
+1
−0
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.
What does this PR do?
Fixes #42219
This PR fixes an
UnboundLocalErrorthat occurs inRTDetrForObjectDetectionLosswhenconfig.auxiliary_lossis set toFalse.Problem
The function
RTDetrForObjectDetectionLossinsrc/transformers/loss/loss_rt_detr.pyalways returnsauxiliary_outputsat line 468, but this variable is only initialized inside theif config.auxiliary_loss:block (line 451). Whenauxiliary_loss=False, the variable is never initialized, causing:Solution
Initialize
auxiliary_outputs = Nonebefore the conditional block (line 450) to ensure it always has a value when returned.Changes:
auxiliary_outputs = Noneinitialization at line 450This is a minimal, defensive fix that ensures the function works correctly regardless of the
auxiliary_lossconfiguration.Testing
The fix ensures that:
auxiliary_loss=True:auxiliary_outputsis set to the computed values (existing behavior)auxiliary_loss=False:auxiliary_outputsisNone(fixed behavior)Additional context
The
auxiliary_lossparameter defaults toTrueinRTDetrConfig, which is why this bug may not have been caught in standard testing scenarios. The bug only manifests when users explicitly setauxiliary_loss=False.