| 514 | printlog('add buffer {} as backbone_specific'.format(name)) |
| 515 | |
| 516 | def add_neck_specific(m, neck_specific): |
| 517 | for name, param in m.named_parameters(): |
| 518 | param.task_specific = False |
| 519 | param.backbone_specific = False |
| 520 | param.neck_specific = neck_specific |
| 521 | param.decoder_specific = False |
| 522 | if neck_specific: |
| 523 | printlog('add param {} as neck_specific'.format(name)) |
| 524 | |
| 525 | if not hasattr(torch.nn.Module, 'named_buffers'): |
| 526 | printlog('registering named_buffers for nn.Module at add_neck_specific') |
| 527 | torch.nn.Module.named_buffers = named_buffers |
| 528 | |
| 529 | #m.cuda() # neccesary for broadcast in DistModule, since buffers are tensors which will be changed after .cuda() |
| 530 | for name, buffer in m.named_buffers(): |
| 531 | buffer.task_specific = False |
| 532 | buffer.backbone_specific = False |
| 533 | buffer.neck_specific = neck_specific |
| 534 | buffer.decoder_specific = False |
| 535 | if neck_specific: |
| 536 | printlog('add buffer {} as neck_specific'.format(name)) |
| 537 | |
| 538 | def add_decoder_specific(m, decoder_specific): |
| 539 | for name, param in m.named_parameters(): |