code: def main(args):
      assert (
          args.config is not None
      ), "No configuration file specified, please set --config"
      cfg = Config(
          args.config,
          learning_rate=args.learning_rate,
          iters=args.iters,
          batch_size=args.batch_size,
          to_static_training=args.to_static_training,
          opts=args.opts,
      )
      builder = SegBuilder(cfg)
  
      utils.show_env_info()
      utils.show_cfg_info(cfg)
      utils.set_seed(args.seed)
      utils.set_device(args.device)
      utils.set_cv2_num_threads(args.num_workers)
  
      if args.use_multilabel:
          if "test_config" not in cfg.dic:
              cfg.dic["test_config"] = {"use_multilabel": True}
          else:
              cfg.dic["test_config"]["use_multilabel"] = True
  
      # TODO refactor
      # Only support for the DeepLabv3+ model
      if args.data_format == "NHWC":
          if cfg.dic["model"]["type"] != "DeepLabV3P":
              raise ValueError(
                  'The "NHWC" data format only support the DeepLabV3P model!'
              )
          cfg.dic["model"]["data_format"] = args.data_format
          cfg.dic["model"]["backbone"]["data_format"] = args.data_format
          loss_len = len(cfg.dic["loss"]["types"])
          for i in range(loss_len):
              cfg.dic["loss"]["types"][i][
                  "data_format"
              ] = args.data_format
  
      model = utils.convert_sync_batchnorm(builder.model, args.device)
  
      train_dataset = builder.train_dataset
      # TODO refactor
      if args.repeats > 1:
          train_dataset.file_list *= args.repeats
      val_dataset = builder.val_dataset if args.do_eval else None
      optimizer = builder.optimizer
      loss = builder.loss
  
      train(
          model,
          train_dataset,
          val_dataset=val_dataset,
          optimizer=optimizer,
          save_dir=args.save_dir,
          iters=cfg.iters,
          batch_size=cfg.batch_size,
          resume_model=args.resume_model,
          save_interval=args.save_interval,
          log_iters=args.log_iters,
          num_workers=args.num_workers,
          use_vdl=args.use_vdl,
          use_ema=args.use_ema,
          losses=loss,
          keep_checkpoint_max=args.keep_checkpoint_max,
          test_config=cfg.test_config,
          precision=args.precision,
          amp_level=args.amp_level,
          profiler_options=args.profiler_options,
          to_static_training=cfg.to_static_training,
      )
  
file_path: PaddleSeg/tools/train.py
imports: import argparse
  import random
  import paddle
  import numpy
  import cv2
  from paddleseg.cvlibs import Config, SegBuilder
  from paddleseg.utils import get_sys_env, logger, utils
  from paddleseg.core import train
label_desc: Use image node_id 2 for calling a global function with example usage: main(args) without return types