code: def main(args):
      cfg = setup(args)
      # disable strict kwargs checking: allow one to specify path handle
      # hints through kwargs, like timeout in DP evaluation
      PathManager.set_strict_kwargs_checking(False)
  
      if args.eval_only:
          model = Trainer.build_model(cfg)
          DensePoseCheckpointer(
              model, save_dir=cfg.OUTPUT_DIR
          ).resume_or_load(cfg.MODEL.WEIGHTS, resume=args.resume)
          res = Trainer.test(cfg, model)
          if cfg.TEST.AUG.ENABLED:
              res.update(Trainer.test_with_TTA(cfg, model))
          if comm.is_main_process():
              verify_results(cfg, res)
          return res
  
      trainer = Trainer(cfg)
      trainer.resume_or_load(resume=args.resume)
      if cfg.TEST.AUG.ENABLED:
          trainer.register_hooks(
              [
                  hooks.EvalHook(
                      0,
                      lambda: trainer.test_with_TTA(cfg, trainer.model),
                  )
              ]
          )
      return trainer.train()
  
file_path: detectron2/projects/DensePose/train_net.py
imports: from datetime import timedelta
  import detectron2.utils.comm
  from detectron2.config import get_cfg
  from detectron2.engine import DEFAULT_TIMEOUT, default_argument_parser, default_setup, hooks, launch
  from detectron2.evaluation import verify_results
  from detectron2.utils.file_io import PathManager
  from detectron2.utils.logger import setup_logger
  from densepose import add_densepose_config
  from densepose.engine import Trainer
  from densepose.modeling.densepose_checkpoint import DensePoseCheckpointer
label_desc: Use image node_id 2 for calling a global function with example usage: main(args) and returns: trainer, res