(self)
| 87 | raise NotImplementedError |
| 88 | |
| 89 | def create_model(self): |
| 90 | config = self.config |
| 91 | |
| 92 | backbone_bn_group_size = config.backbone['kwargs'].get('bn_group_size', 1) |
| 93 | assert backbone_bn_group_size == 1, 'other bn group size not support!' |
| 94 | backbone_bn_group_comm = self.ginfo.backbone_share_group |
| 95 | |
| 96 | ## build backbone |
| 97 | config.backbone['kwargs']['bn_group'] = backbone_bn_group_comm |
| 98 | backbone_module = backbones.backbone_entry(config.backbone) |
| 99 | count_parameters_num(backbone_module) |
| 100 | |
| 101 | ## build necks |
| 102 | neck_bn_group_size = config.backbone['kwargs'].get('bn_group_size', 1) |
| 103 | assert neck_bn_group_size == 1, 'other bn group size not support!' |
| 104 | neck_bn_group_comm = self.ginfo.neck_share_group |
| 105 | |
| 106 | neck_args = config.neck['kwargs'] |
| 107 | neck_args['backbone'] = backbone_module |
| 108 | neck_args['bn_group'] = neck_bn_group_comm |
| 109 | neck_module = necks.neck_entry(config.neck) |
| 110 | |
| 111 | ## add decoder |
| 112 | decoder_bn_group_size = config.backbone['kwargs'].get('bn_group_size', 1) |
| 113 | assert decoder_bn_group_size == 1, 'other bn group size not support!' |
| 114 | decoder_bn_group_comm = self.ginfo.decoder_share_group |
| 115 | |
| 116 | decoder_args = config.decoder['kwargs'] |
| 117 | decoder_args['backbone'] = backbone_module |
| 118 | decoder_args['neck'] = neck_module |
| 119 | decoder_args['bn_group'] = decoder_bn_group_comm |
| 120 | decoder_module = decoders.decoder_entry(config.decoder) |
| 121 | |
| 122 | # build |
| 123 | model = model_entry(backbone_module, neck_module, decoder_module) |
| 124 | |
| 125 | ## distributed |
| 126 | model.cuda() |
| 127 | |
| 128 | if self.C_train.rank == 0: |
| 129 | print(model) |
| 130 | |
| 131 | model = DistModule(model, sync=self.sync, task_grp=self.ginfo.group, \ |
| 132 | share_backbone_group=self.ginfo.backbone_share_group, \ |
| 133 | share_neck_group=self.ginfo.neck_share_group, \ |
| 134 | share_decoder_group=self.ginfo.decoder_share_group) |
| 135 | |
| 136 | self.model = model |
| 137 | |
| 138 | def load(self, args): |
| 139 | if args.load_path == '': |
no test coverage detected