Skip to content

Commit 3f69f41

Browse files
SangbumChoiArthurZuckeramyeroberts
authored
Fix auxiliary loss related code in transformers (#28406)
* [DETA] fix freeze/unfreeze function * Update src/transformers/models/deta/modeling_deta.py Co-authored-by: Arthur <[email protected]> * Update src/transformers/models/deta/modeling_deta.py Co-authored-by: Arthur <[email protected]> * add freeze/unfreeze test case in DETA * fix type * fix typo 2 * fix : enable aux and enc loss in training pipeline * Add unsynced variables from original DETA for training * modification for passing CI test * make style * make fix * manual make fix * change deta_modeling_test of configuration 'two_stage' default to TRUE and minor change of dist checking * remove print * divide configuration in DetaModel and DetaForObjectDetection * image smaller size than 224 will give topk error * pred_boxes and logits should be equivalent to two_stage_num_proposals * add missing part in DetaConfig * Update src/transformers/models/deta/modeling_deta.py Co-authored-by: amyeroberts <[email protected]> * add docstring in configure and prettify TO DO part * change distribute related code to accelerate * Update src/transformers/models/deta/configuration_deta.py Co-authored-by: amyeroberts <[email protected]> * Update tests/models/deta/test_modeling_deta.py Co-authored-by: amyeroberts <[email protected]> * protect importing accelerate * change variable name to specific value * wrong import * fix aux_loss in conditional_detr * add test aux_loss * add aux_loss test in deta and table_transformer * fix yolos since it doesn't have auxiliary function * fix maskformer auxiliary_loss related code * make style * change param 'auxiliary_loss' to 'use_auxiliary_loss' * change param 'auxiliary_loss' to 'use_auxiliary_loss' in tests * make style & fix-copies, also revert yolos related parameter * revert variable name 'use_auxiliary_loss' to 'auxiliary_loss' due to DetrConfig * revert variable name in yolos * revert maskformer * add aux_loss test in maskformer * make style * Update src/transformers/models/yolos/configuration_yolos.py Co-authored-by: amyeroberts <[email protected]> --------- Co-authored-by: Arthur <[email protected]> Co-authored-by: amyeroberts <[email protected]>
1 parent 948ffff commit 3f69f41

File tree

6 files changed

+87
-5
lines changed

6 files changed

+87
-5
lines changed

src/transformers/models/conditional_detr/modeling_conditional_detr.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1874,8 +1874,8 @@ def forward(
18741874
intermediate = outputs.intermediate_hidden_states if return_dict else outputs[4]
18751875
outputs_class = self.class_labels_classifier(intermediate)
18761876

1877-
for lvl in range(hs.shape[0]):
1878-
tmp = self.bbox_predictor(hs[lvl])
1877+
for lvl in range(intermediate.shape[0]):
1878+
tmp = self.bbox_predictor(intermediate[lvl])
18791879
tmp[..., :2] += reference_before_sigmoid
18801880
outputs_coord = tmp.sigmoid()
18811881
outputs_coords.append(outputs_coord)
@@ -2118,9 +2118,9 @@ def forward(
21182118
outputs_loss["pred_masks"] = pred_masks
21192119
if self.config.auxiliary_loss:
21202120
intermediate = decoder_outputs.intermediate_hidden_states if return_dict else decoder_outputs[-1]
2121-
outputs_class = self.class_labels_classifier(intermediate)
2122-
outputs_coord = self.bbox_predictor(intermediate).sigmoid()
2123-
auxiliary_outputs = self._set_aux_loss(outputs_class, outputs_coord)
2121+
outputs_class = self.conditional_detr.class_labels_classifier(intermediate)
2122+
outputs_coord = self.conditional_detr.bbox_predictor(intermediate).sigmoid()
2123+
auxiliary_outputs = self.conditional_detr._set_aux_loss(outputs_class, outputs_coord)
21242124
outputs_loss["auxiliary_outputs"] = auxiliary_outputs
21252125

21262126
loss_dict = criterion(outputs_loss, labels)

tests/models/conditional_detr/test_modeling_conditional_detr.py

+16
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,22 @@ def test_retain_grad_hidden_states_attentions(self):
399399
self.assertIsNotNone(decoder_attentions.grad)
400400
self.assertIsNotNone(cross_attentions.grad)
401401

402+
def test_forward_auxiliary_loss(self):
403+
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
404+
config.auxiliary_loss = True
405+
406+
# only test for object detection and segmentation model
407+
for model_class in self.all_model_classes[1:]:
408+
model = model_class(config)
409+
model.to(torch_device)
410+
411+
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
412+
413+
outputs = model(**inputs)
414+
415+
self.assertIsNotNone(outputs.auxiliary_outputs)
416+
self.assertEqual(len(outputs.auxiliary_outputs), self.model_tester.num_hidden_layers - 1)
417+
402418
def test_forward_signature(self):
403419
config, _ = self.model_tester.prepare_config_and_inputs_for_common()
404420

tests/models/deformable_detr/test_modeling_deformable_detr.py

+16
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,22 @@ def test_retain_grad_hidden_states_attentions(self):
476476
self.assertIsNotNone(decoder_attentions.grad)
477477
self.assertIsNotNone(cross_attentions.grad)
478478

479+
def test_forward_auxiliary_loss(self):
480+
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
481+
config.auxiliary_loss = True
482+
483+
# only test for object detection and segmentation model
484+
for model_class in self.all_model_classes[1:]:
485+
model = model_class(config)
486+
model.to(torch_device)
487+
488+
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
489+
490+
outputs = model(**inputs)
491+
492+
self.assertIsNotNone(outputs.auxiliary_outputs)
493+
self.assertEqual(len(outputs.auxiliary_outputs), self.model_tester.num_hidden_layers - 1)
494+
479495
def test_forward_signature(self):
480496
config, _ = self.model_tester.prepare_config_and_inputs_for_common()
481497

tests/models/deta/test_modeling_deta.py

+16
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,22 @@ def test_retain_grad_hidden_states_attentions(self):
449449
self.assertIsNotNone(decoder_attentions.grad)
450450
self.assertIsNotNone(cross_attentions.grad)
451451

452+
def test_forward_auxiliary_loss(self):
453+
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
454+
config.auxiliary_loss = True
455+
456+
# only test for object detection and segmentation model
457+
for model_class in self.all_model_classes[1:]:
458+
model = model_class(config)
459+
model.to(torch_device)
460+
461+
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
462+
463+
outputs = model(**inputs)
464+
465+
self.assertIsNotNone(outputs.auxiliary_outputs)
466+
self.assertEqual(len(outputs.auxiliary_outputs), self.model_tester.num_hidden_layers - 1)
467+
452468
def test_forward_signature(self):
453469
config, _ = self.model_tester.prepare_config_and_inputs_for_common()
454470

tests/models/maskformer/test_modeling_maskformer.py

+18
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,24 @@ def test_retain_grad_hidden_states_attentions(self):
362362
self.assertIsNotNone(transformer_decoder_hidden_states.grad)
363363
self.assertIsNotNone(attentions.grad)
364364

365+
def test_forward_auxiliary_loss(self):
366+
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
367+
config.use_auxiliary_loss = True
368+
config.output_auxiliary_logits = True
369+
config.output_hidden_states = True
370+
371+
# only test for object detection and segmentation model
372+
for model_class in self.all_model_classes[1:]:
373+
model = model_class(config)
374+
model.to(torch_device)
375+
376+
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
377+
378+
outputs = model(**inputs)
379+
380+
self.assertIsNotNone(outputs.auxiliary_logits)
381+
self.assertEqual(len(outputs.auxiliary_logits), self.model_tester.num_channels - 1)
382+
365383

366384
TOLERANCE = 1e-4
367385

tests/models/table_transformer/test_modeling_table_transformer.py

+16
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,22 @@ def test_retain_grad_hidden_states_attentions(self):
411411
self.assertIsNotNone(decoder_attentions.grad)
412412
self.assertIsNotNone(cross_attentions.grad)
413413

414+
def test_forward_auxiliary_loss(self):
415+
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
416+
config.auxiliary_loss = True
417+
418+
# only test for object detection and segmentation model
419+
for model_class in self.all_model_classes[1:]:
420+
model = model_class(config)
421+
model.to(torch_device)
422+
423+
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
424+
425+
outputs = model(**inputs)
426+
427+
self.assertIsNotNone(outputs.auxiliary_outputs)
428+
self.assertEqual(len(outputs.auxiliary_outputs), self.model_tester.num_hidden_layers - 1)
429+
414430
def test_forward_signature(self):
415431
config, _ = self.model_tester.prepare_config_and_inputs_for_common()
416432

0 commit comments

Comments
 (0)