# system
self.parser.add_argument('--gpus',
default='0', # 0, 5, 6
help='-1 for CPU, use comma for multiple gpus')
self.parser.add_argument('--num_workers',
type=int,
default=8, # 8, 6, 4
help='dataloader threads. 0 for single-thread.')
self.parser.add_argument('--not_cuda_benchmark', action='store_true',
help='disable when the input size is not fixed.')
self.parser.add_argument('--seed', type=int, default=317,
help='random seed') # from CornerNet
self.parser.add_argument('--gen-scale',
type=bool,
default=True,
help='Whether to generate multi-scales')
self.parser.add_argument('--is_debug',
type=bool,
default=False, # 是否使用多线程加载数据, default: False
help='whether in debug mode or not') # debug模式下只能使用单进程
# log
self.parser.add_argument('--print_iter', type=int, default=0,
help='disable progress bar and print to screen.')
self.parser.add_argument('--hide_data_time', action='store_true',
help='not display time during training.')
self.parser.add_argument('--save_all', action='store_true',
help='save model to disk every 5 epochs.')
self.parser.add_argument('--metric', default='loss',
help='main metric to save best model')
self.parser.add_argument('--vis_thresh', type=float, default=0.5,
help='visualization threshold.')
# model: backbone and so on...
self.parser.add_argument('--arch',
default='resdcn_18',
help='model architecture. Currently tested'
'resdcn_18 |resdcn_34 | resdcn_50 | resfpndcn_34 |'
'dla_34 | hrnet_32 | hrnet_18 | cspdarknet_53')
self.parser.add_argument('--head_conv',
type=int,
default=-1,
help='conv layer channels for output head'
'0 for no conv layer'
'-1 for default setting: '
'256 for resnets and 256 for dla.')
self.parser.add_argument('--down_ratio',
type=int,
default=4, # 输出特征图的下采样率 H=H_image/4 and W=W_image/4
help='output stride. Currently only supports 4.')
# input
self.parser.add_argument('--input_res',
type=int,
default=-1,
help='input height and width. -1 for default from '
'dataset. Will be overriden by input_h | input_w')
self.parser.add_argument('--input_h',
type=int,
default=-1,
help='input height. -1 for default from dataset.')
self.parser.add_argument('--input_w',
type=int,
default=-1,
help='input width. -1 for default from dataset.')
# train
self.parser.add_argument('--lr',
type=float,
default=7e-5, # 1e-4, 7e-5, 5e-5, 3e-5
help='learning rate for batch size 32.')
self.parser.add_argument('--lr_step',
type=str,
default='10,20', # 20,27
help='drop learning rate by 10.')
self.parser.add_argument('--num_epochs',
type=int,
default=30, # 30, 10, 3, 1
help='total training epochs.')
self.parser.add_argument('--batch-size',
type=int,
default=10, # 18, 16, 14, 12, 10, 8, 4
help='batch size')
self.parser.add_argument('--master_batch_size', type=int, default=-1,
help='batch size on the master gpu.')
self.parser.add_argument('--num_iters', type=int, default=-1,
help='default: #samples / batch_size.')
self.parser.add_argument('--val_intervals', type=int, default=10,
help='number of epochs to run validation.')
self.parser.add_argument('--trainval',
action='store_true',
help='include validation in training and '
'test on test set')
# test
self.parser.add_argument('--K',
type=int,
default=200, # 128
help='max number of output objects.') # 一张图输出检测目标最大数量
self.parser.add_argument('--not_prefetch_test',
action='store_true',
help='not use parallal data pre-processing.')
self.parser.add_argument('--fix_res',
action='store_true',
help='fix testing resolution or keep '
'the original resolution')
self.parser.add_argument('--keep_res',
action='store_true',
help='keep the original resolution'
' during validation.')
# tracking
self.parser.add_argument(
'--test_mot16', default=False, help='test mot16')
self.parser.add_argument(
'--val_mot15', default=False, help='val mot15')
self.parser.add_argument(
'--test_mot15', default=False, help='test mot15')
self.parser.add_argument(
'--val_mot16', default=False, help='val mot16 or mot15')
self.parser.add_argument(
'--test_mot17', default=False, help='test mot17')
self.parser.add_argument(
'--val_mot17', default=False, help='val mot17')
self.parser.add_argument(
'--val_mot20', default=False, help='val mot20')
self.parser.add_argument(
'--test_mot20', default=False, help='test mot20')
self.parser.add_argument(
'--conf_thres',
type=float,
default=0.4, # 0.6, 0.4
help='confidence thresh for tracking') # heat-map置信度阈值
self.parser.add_argument('--det_thres',
type=float,
default=0.3,
help='confidence thresh for detection')
self.parser.add_argument('--nms_thres',
type=float,
default=0.4,
help='iou thresh for nms')
self.parser.add_argument('--track_buffer',
type=int,
default=30, # 30
help='tracking buffer')
self.parser.add_argument('--min-box-area',
type=float,
default=200,
help='filter out tiny boxes')
# 测试阶段的输入数据模式: video or image dir
self.parser.add_argument('--input-mode',
type=str,
default='video', # video or image_dir or img_path_list_txt
help='input data type(video or image dir)')
# 输入的video文件路径
self.parser.add_argument('--input-video',
type=str,
default='/home/suyx/MCMOT/dataset/val/VisDrone-val/videos/uav0000086_00000_v.avi',
help='path to the input video')
# 输入的image目录
self.parser.add_argument('--input-img',
type=str,
default='/users/duanyou/c5/all_pretrain/test.txt', # ../images/
help='path to the input image directory or image file list(.txt)')
self.parser.add_argument('--output-format',
type=str,
default='video',
help='video or text')
self.parser.add_argument('--output-root',
type=str,
default='../results',
help='expected output root path')
# mot: 选择数据集的配置文件
self.parser.add_argument('--data_cfg', type=str,
default='../src/lib/cfg/visdrone.json', # 'mot15.json', 'visdrone.json'
help='load data from cfg')
# self.parser.add_argument('--data_cfg', type=str,
# default='../src/lib/cfg/mcmot_det.json', # mcmot.json, mcmot_det.json,
# help='load data from cfg')
self.parser.add_argument('--data_dir',
type=str,
default='/home/suyx/MCMOT/dataset')
# loss
self.parser.add_argument('--mse_loss', # default: false
action='store_true',
help='use mse loss or focal loss to train '
'keypoint heatmaps.')
self.parser.add_argument('--reg_loss',
default='l1',
help='regression loss: sl1 | l1 | l2') # sl1: smooth L1 loss
self.parser.add_argument('--hm_weight',
type=float,
default=1,
help='loss weight for keypoint heatmaps.')
self.parser.add_argument('--off_weight',
type=float,
default=1,
help='loss weight for keypoint local offsets.')
self.parser.add_argument('--wh_weight',
type=float,
default=0.1,
help='loss weight for bounding box size.')
self.parser.add_argument('--id_loss',
default='ce',
help='reid loss: ce | triplet')
self.parser.add_argument('--id_weight',
type=float,
default=1, # 0for detection only and 1 for detection and re-ida
help='loss weight for id') # ReID feature extraction or not
self.parser.add_argument('--reid_dim',
type=int,
default=128, # 128, 256, 512
help='feature dim for reid')
self.parser.add_argument('--input-wh',
type=tuple,
default=(1088, 608), # (768, 448) or (1088, 608)
help='net input resplution')
self.parser.add_argument('--multi-scale',
type=bool,
default=True,
help='Whether to use multi-scale training or not')
# ----------------------1~10 object classes are what we need
# pedestrian (1), --> 0
# people (2), --> 1
# bicycle (3), --> 2
# car (4), --> 3
# van (5), --> 4
# truck (6), --> 5
# tricycle (7), --> 6
# awning-tricycle (8), --> 7
# bus (9), --> 8
# motor (10), --> 9
# ----------------------
# others (11)
self.parser.add_argument('--reid_cls_ids',
default='0,1,2,3,4,5,6,7,8,9', # '0,1,2,3,4' or '0,1,2,3,4,5,6,7,8,9'
help='') # the object classes need to do reid
self.parser.add_argument('--norm_wh', action='store_true',
help='L1(\hat(y) / y, 1) or L1(\hat(y), y)')
self.parser.add_argument('--dense_wh', action='store_true',
help='apply weighted regression near center or '
'just apply regression on center point.')
self.parser.add_argument('--cat_spec_wh',
action='store_true',
help='category specific bounding box size.')
self.parser.add_argument('--not_reg_offset',
action='store_true',
help='not regress local offset.')