(self, cfg)
| 60 | Extension of the Trainer class adapted to MaskFormer. |
| 61 | """ |
| 62 | def __init__(self, cfg): |
| 63 | super(DefaultTrainer, self).__init__() |
| 64 | logger = logging.getLogger("detectron2") |
| 65 | if not logger.isEnabledFor(logging.INFO): # setup_logger is not called for d2 |
| 66 | setup_logger() |
| 67 | cfg = DefaultTrainer.auto_scale_workers(cfg, comm.get_world_size()) |
| 68 | |
| 69 | # Assume these objects must be constructed in this order. |
| 70 | model = self.build_model(cfg) |
| 71 | optimizer = self.build_optimizer(cfg, model) |
| 72 | data_loader = self.build_train_loader(cfg) |
| 73 | |
| 74 | model = create_ddp_model(model, broadcast_buffers=False) |
| 75 | self._trainer = (AMPTrainer if cfg.SOLVER.AMP.ENABLED else SimpleTrainer)( |
| 76 | model, data_loader, optimizer |
| 77 | ) |
| 78 | self.scheduler = self.build_lr_scheduler(cfg, optimizer) |
| 79 | |
| 80 | # add model EMA |
| 81 | kwargs = { |
| 82 | 'trainer': weakref.proxy(self), |
| 83 | } |
| 84 | # kwargs.update(model_ema.may_get_ema_checkpointer(cfg, model)) TODO: release ema training for large models |
| 85 | self.checkpointer = DetectionCheckpointer( |
| 86 | # Assume you want to save checkpoints together with logs/statistics |
| 87 | model, |
| 88 | cfg['OUTPUT_DIR'], |
| 89 | **kwargs, |
| 90 | ) |
| 91 | self.start_iter = 0 |
| 92 | self.max_iter = cfg['SOLVER']['MAX_ITER'] |
| 93 | self.cfg = cfg |
| 94 | |
| 95 | self.register_hooks(self.build_hooks()) |
| 96 | # TODO: release model conversion checkpointer from DINO to MaskDINO |
| 97 | self.checkpointer = DetectionCheckpointer( |
| 98 | # Assume you want to save checkpoints together with logs/statistics |
| 99 | model, |
| 100 | cfg['OUTPUT_DIR'], |
| 101 | **kwargs, |
| 102 | ) |
| 103 | # TODO: release GPU cluster submit scripts based on submitit for multi-node training |
| 104 | |
| 105 | def build_hooks(self): |
| 106 | """ |
nothing calls this directly
no test coverage detected