container-batch-inference/resources/FairMOT/config.py [9:237]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
class Config(object):
  def __init__(self, load_model, frame_rate):
    # basic experiment setting
    self.task = 'mot'
    self.dataset = 'jde'
    self.exp_id = 'default'
    self.test = True
    self.pretrained = False

    # path to pretrained model
    self.load_model = load_model
    # resume an experiment. Reloaded the selfimizer parameter and 
    # set load_model to model_last.pth in the exp dir if load_model is empty.
    self.resume = True

    # system
    # -1 for CPU, use comma for multiple gpus
    self.gpus = '0'
    # dataloader threads. 0 for single-thread.
    self.num_workes = 0
    # disable when the input size is not fixed.
    self.not_cuda_benchmark = True
    self.seed = 317 # random seed for CornerNet

    # log
    # disable progress bar and print to screen.
    self.print_iter = 0
    # not display time during training.
    self.hide_data_time = True
    # save model to disk every 5 epochs.
    self.save_all = True
    # main metric to save best model
    self.metric = 'loss'
    # visualization threshold.
    self.vis_thresh = 0.5
   
    # model
    # model architecture. Currently tested resdcn_34 | resdcn_50 | resfpndcn_34 | dla_34 | hrnet_18
    self.arch = 'dla_34'
    # conv layer channels for output head 0 for no conv layer -1 for default setting: 
    # 256 for resnets and 256 for dla.
    self.head_conv = -1
    # output stride. Currently only supports 4.
    self.down_ratio = 4

    # input
    # input height and width. -1 for default from
    # dataset. Will be overriden by input_h | input_w
    self.input_res = -1
    # input height. -1 for default from dataset.
    self.input_h = -1
    # input width. -1 for default from dataset.
    self.input_w = -1

    self.frame_w = 1920
    self.frame_h = 1080
    self.inp_w = 1088
    self.inp_h = 608
    
    self.frame_rate = frame_rate
   
    # train
    # learning rate for batch size 12.
    self.lr = 1e-4
    # drop learning rate by 10.
    self.lr_step = '20'
    # total training epochs.
    self.num_epochs = 30
    # batch size
    self.batch_size = 12
    # batch size on the master gpu.
    self.master_batch_size = -1
    # default: #samples / batch_size.
    self.num_iters = -1
    # number of epochs to run validation.
    self.val_intervals = 5
    # include validation in training and test on test set
    self.trainval = True

    # test
    # max number of output objects.
    self.K = 500
    # not use parallal data pre-processing.
    self.not_prefetch_test = True
    # fix testing resolution or keep the original resolution
    self.fix_res = True
    # keep the original resolution during validation.
    self.keep_res = True
    
    # confidence thresh for tracking
    self.conf_thres = 0.4
    # confidence thresh for detection
    self.det_thres = 0.3
    # iou thresh for nms
    self.nms_thres = 0.4
    # track_buffer
    self.track_buffer = 2

    # filter out tiny boxes
    self.min_box_area = 300
    # path to the input video
    self.input_video = '../videos/MOT16-03.mp4'
    # video or text
    self.output_format = 'video'
    # expected output root path
    self.output_root = '../demos'

    # mot
    # load data from cfg
    self.data_cfg = '../src/lib/cfg/data.json'
    # 
    self.data_dir = '/home/ubuntu/mot/FairMOT'

    # loss
    # use mse loss or focal loss to train keypoint heatmaps.
    self.mse_loss = True
    # regression loss: sl1 | l1 | l2
    self.reg_loss = 'l1'
    # loss weight for keypoint heatmaps.
    self.hm_weight = 1
    # loss weight for keypoint local offsets.
    self.off_weight = 1
    # loss weight for bounding box size.
    self.wh_weight = 0.1
    # reid loss: ce | triplet
    self.id_loss = 'ce'
    # loss weight for id
    self.id_weight = 1
    # feature dim for reid
    # self.reid_dim = 128
    self.reid_dim = 32
    # regress left, top, right, bottom of bbox
    self.ltrb = True
    # L1(\hat(y) / y, 1) or L1(\hat(y), y)
    self.norm_wh = True
    # apply weighted regression near center or just apply regression on center point.
    self.dense_wh = True
    # category specific bounding box size.
    self.cat_spec_wh = True
    # not regress local offset.
    self.not_reg_offset = False

    self.init()

  def parse(self, args=''):
    #self.gpus='0'
    self.gpus_str = self.gpus
    self.gpus = [int(gpu) for gpu in self.gpus.split(',')]
    self.gpus = [i for i in range(len(self.gpus))] if self.gpus[0] >=0 else [-1]
    self.lr_step = [int(i) for i in self.lr_step.split(',')]

    self.fix_res = not self.keep_res
    print('Fix size testing.' if self.fix_res else 'Keep resolution testing.')
    self.reg_offset = not self.not_reg_offset

    if self.head_conv == -1: # init default head_conv
      self.head_conv = 256 if 'dla' in self.arch else 256
    self.pad = 31
    self.num_stacks = 1

    if self.trainval:
      self.val_intervals = 100000000

    if self.master_batch_size == -1:
      self.master_batch_size = self.batch_size // len(self.gpus)
    rest_batch_size = (self.batch_size - self.master_batch_size)
    self.chunk_sizes = [self.master_batch_size]
    for i in range(len(self.gpus) - 1):
      slave_chunk_size = rest_batch_size // (len(self.gpus) - 1)
      if i < rest_batch_size % (len(self.gpus) - 1):
        slave_chunk_size += 1
      self.chunk_sizes.append(slave_chunk_size)
    print('training chunk_sizes:', self.chunk_sizes)

    self.root_dir = os.path.join(os.path.dirname(__file__), '..', '..')
    self.exp_dir = os.path.join(self.root_dir, 'exp', self.task)
    self.save_dir = os.path.join(self.exp_dir, self.exp_id)
    self.debug_dir = os.path.join(self.save_dir, 'debug')
    print('The output will be saved to ', self.save_dir)
    
    if self.resume and self.load_model == '':
      model_path = self.save_dir[:-4] if self.save_dir.endswith('TEST') \
                  else self.save_dir
      self.load_model = os.path.join(model_path, 'model_last.pth')

  def update_dataset_info_and_set_heads(self, dataset):
    input_h, input_w = dataset.default_resolution
    self.mean, self.std = dataset.mean, dataset.std
    self.num_classes = dataset.num_classes

    # input_h(w): self.input_h overrides self.input_res overrides dataset default
    input_h = self.input_res if self.input_res > 0 else input_h
    input_w = self.input_res if self.input_res > 0 else input_w
    self.input_h = self.input_h if self.input_h > 0 else input_h
    self.input_w = self.input_w if self.input_w > 0 else input_w
    self.output_h = self.input_h // self.down_ratio
    self.output_w = self.input_w // self.down_ratio
    self.input_res = max(self.input_h, self.input_w)
    self.output_res = max(self.output_h, self.output_w)

    if self.task == 'mot':
      self.heads = {'hm': self.num_classes,
                   'wh': 2 if not self.ltrb else 4,
                   'id': self.reid_dim}
      if self.reg_offset:
        self.heads.update({'reg': 2})
      self.nID = dataset.nID
      self.img_size = (1088, 608)
      #self.img_size = (864, 480)
      #self.img_size = (576, 320)
      #self.img_size = (576, 320)
    else:
      assert 0, 'task not defined!'
    print('heads', self.heads)

  def init(self, args=''):
    default_dataset_info = {
      'mot': {'default_resolution': [608, 1088], 'num_classes': 1,
                'mean': [0.408, 0.447, 0.470], 'std': [0.289, 0.274, 0.278],
                'dataset': 'jde', 'nID': 14455},
    }
    class Struct:
      def __init__(self, entries):
        for k, v in entries.items():
          self.__setattr__(k, v)
    self.parse()
    dataset = Struct(default_dataset_info[self.task])
    self.dataset = dataset.dataset
    self.update_dataset_info_and_set_heads(dataset)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



container-serving/resources/FairMOT/config.py [9:237]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
class Config(object):
  def __init__(self, load_model, frame_rate):
    # basic experiment setting
    self.task = 'mot'
    self.dataset = 'jde'
    self.exp_id = 'default'
    self.test = True
    self.pretrained = False

    # path to pretrained model
    self.load_model = load_model
    # resume an experiment. Reloaded the selfimizer parameter and 
    # set load_model to model_last.pth in the exp dir if load_model is empty.
    self.resume = True

    # system
    # -1 for CPU, use comma for multiple gpus
    self.gpus = '0'
    # dataloader threads. 0 for single-thread.
    self.num_workes = 0
    # disable when the input size is not fixed.
    self.not_cuda_benchmark = True
    self.seed = 317 # random seed for CornerNet

    # log
    # disable progress bar and print to screen.
    self.print_iter = 0
    # not display time during training.
    self.hide_data_time = True
    # save model to disk every 5 epochs.
    self.save_all = True
    # main metric to save best model
    self.metric = 'loss'
    # visualization threshold.
    self.vis_thresh = 0.5
   
    # model
    # model architecture. Currently tested resdcn_34 | resdcn_50 | resfpndcn_34 | dla_34 | hrnet_18
    self.arch = 'dla_34'
    # conv layer channels for output head 0 for no conv layer -1 for default setting: 
    # 256 for resnets and 256 for dla.
    self.head_conv = -1
    # output stride. Currently only supports 4.
    self.down_ratio = 4

    # input
    # input height and width. -1 for default from
    # dataset. Will be overriden by input_h | input_w
    self.input_res = -1
    # input height. -1 for default from dataset.
    self.input_h = -1
    # input width. -1 for default from dataset.
    self.input_w = -1

    self.frame_w = 1920
    self.frame_h = 1080
    self.inp_w = 1088
    self.inp_h = 608
    
    self.frame_rate = frame_rate
   
    # train
    # learning rate for batch size 12.
    self.lr = 1e-4
    # drop learning rate by 10.
    self.lr_step = '20'
    # total training epochs.
    self.num_epochs = 30
    # batch size
    self.batch_size = 12
    # batch size on the master gpu.
    self.master_batch_size = -1
    # default: #samples / batch_size.
    self.num_iters = -1
    # number of epochs to run validation.
    self.val_intervals = 5
    # include validation in training and test on test set
    self.trainval = True

    # test
    # max number of output objects.
    self.K = 500
    # not use parallal data pre-processing.
    self.not_prefetch_test = True
    # fix testing resolution or keep the original resolution
    self.fix_res = True
    # keep the original resolution during validation.
    self.keep_res = True
    
    # confidence thresh for tracking
    self.conf_thres = 0.4
    # confidence thresh for detection
    self.det_thres = 0.3
    # iou thresh for nms
    self.nms_thres = 0.4
    # track_buffer
    self.track_buffer = 2

    # filter out tiny boxes
    self.min_box_area = 300
    # path to the input video
    self.input_video = '../videos/MOT16-03.mp4'
    # video or text
    self.output_format = 'video'
    # expected output root path
    self.output_root = '../demos'

    # mot
    # load data from cfg
    self.data_cfg = '../src/lib/cfg/data.json'
    # 
    self.data_dir = '/home/ubuntu/mot/FairMOT'

    # loss
    # use mse loss or focal loss to train keypoint heatmaps.
    self.mse_loss = True
    # regression loss: sl1 | l1 | l2
    self.reg_loss = 'l1'
    # loss weight for keypoint heatmaps.
    self.hm_weight = 1
    # loss weight for keypoint local offsets.
    self.off_weight = 1
    # loss weight for bounding box size.
    self.wh_weight = 0.1
    # reid loss: ce | triplet
    self.id_loss = 'ce'
    # loss weight for id
    self.id_weight = 1
    # feature dim for reid
    # self.reid_dim = 128
    self.reid_dim = 32
    # regress left, top, right, bottom of bbox
    self.ltrb = True
    # L1(\hat(y) / y, 1) or L1(\hat(y), y)
    self.norm_wh = True
    # apply weighted regression near center or just apply regression on center point.
    self.dense_wh = True
    # category specific bounding box size.
    self.cat_spec_wh = True
    # not regress local offset.
    self.not_reg_offset = False

    self.init()

  def parse(self, args=''):
    #self.gpus='0'
    self.gpus_str = self.gpus
    self.gpus = [int(gpu) for gpu in self.gpus.split(',')]
    self.gpus = [i for i in range(len(self.gpus))] if self.gpus[0] >=0 else [-1]
    self.lr_step = [int(i) for i in self.lr_step.split(',')]

    self.fix_res = not self.keep_res
    print('Fix size testing.' if self.fix_res else 'Keep resolution testing.')
    self.reg_offset = not self.not_reg_offset

    if self.head_conv == -1: # init default head_conv
      self.head_conv = 256 if 'dla' in self.arch else 256
    self.pad = 31
    self.num_stacks = 1

    if self.trainval:
      self.val_intervals = 100000000

    if self.master_batch_size == -1:
      self.master_batch_size = self.batch_size // len(self.gpus)
    rest_batch_size = (self.batch_size - self.master_batch_size)
    self.chunk_sizes = [self.master_batch_size]
    for i in range(len(self.gpus) - 1):
      slave_chunk_size = rest_batch_size // (len(self.gpus) - 1)
      if i < rest_batch_size % (len(self.gpus) - 1):
        slave_chunk_size += 1
      self.chunk_sizes.append(slave_chunk_size)
    print('training chunk_sizes:', self.chunk_sizes)

    self.root_dir = os.path.join(os.path.dirname(__file__), '..', '..')
    self.exp_dir = os.path.join(self.root_dir, 'exp', self.task)
    self.save_dir = os.path.join(self.exp_dir, self.exp_id)
    self.debug_dir = os.path.join(self.save_dir, 'debug')
    print('The output will be saved to ', self.save_dir)
    
    if self.resume and self.load_model == '':
      model_path = self.save_dir[:-4] if self.save_dir.endswith('TEST') \
                  else self.save_dir
      self.load_model = os.path.join(model_path, 'model_last.pth')

  def update_dataset_info_and_set_heads(self, dataset):
    input_h, input_w = dataset.default_resolution
    self.mean, self.std = dataset.mean, dataset.std
    self.num_classes = dataset.num_classes

    # input_h(w): self.input_h overrides self.input_res overrides dataset default
    input_h = self.input_res if self.input_res > 0 else input_h
    input_w = self.input_res if self.input_res > 0 else input_w
    self.input_h = self.input_h if self.input_h > 0 else input_h
    self.input_w = self.input_w if self.input_w > 0 else input_w
    self.output_h = self.input_h // self.down_ratio
    self.output_w = self.input_w // self.down_ratio
    self.input_res = max(self.input_h, self.input_w)
    self.output_res = max(self.output_h, self.output_w)

    if self.task == 'mot':
      self.heads = {'hm': self.num_classes,
                   'wh': 2 if not self.ltrb else 4,
                   'id': self.reid_dim}
      if self.reg_offset:
        self.heads.update({'reg': 2})
      self.nID = dataset.nID
      self.img_size = (1088, 608)
      #self.img_size = (864, 480)
      #self.img_size = (576, 320)
      #self.img_size = (576, 320)
    else:
      assert 0, 'task not defined!'
    print('heads', self.heads)

  def init(self, args=''):
    default_dataset_info = {
      'mot': {'default_resolution': [608, 1088], 'num_classes': 1,
                'mean': [0.408, 0.447, 0.470], 'std': [0.289, 0.274, 0.278],
                'dataset': 'jde', 'nID': 14455},
    }
    class Struct:
      def __init__(self, entries):
        for k, v in entries.items():
          self.__setattr__(k, v)
    self.parse()
    dataset = Struct(default_dataset_info[self.task])
    self.dataset = dataset.dataset
    self.update_dataset_info_and_set_heads(dataset)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



