deep-person-reid/default_parser.py

196 lines
11 KiB
Python
Raw Normal View History

2019-03-20 01:26:08 +08:00
from __future__ import absolute_import
from __future__ import print_function
2018-11-07 23:36:49 +08:00
import argparse
2019-03-20 01:26:08 +08:00
def init_parser():
2018-11-08 01:09:23 +08:00
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
2019-03-20 01:26:08 +08:00
# ************************************************************
# Method
# ************************************************************
parser.add_argument('--application', type=str, default='image', choices=['image', 'video'],
help='image-reid or video-reid')
parser.add_argument('--method', type=str, default='softmax',
help='methodology')
2018-11-07 23:36:49 +08:00
# ************************************************************
2019-03-20 01:26:08 +08:00
# Datasets
2018-11-07 23:36:49 +08:00
# ************************************************************
parser.add_argument('--root', type=str, default='data',
2019-01-31 06:41:47 +08:00
help='root path to data directory')
parser.add_argument('-s', '--source-names', type=str, required=True, nargs='+',
2019-01-31 06:41:47 +08:00
help='source datasets (delimited by space)')
parser.add_argument('-t', '--target-names', type=str, required=True, nargs='+',
2019-01-31 06:41:47 +08:00
help='target datasets (delimited by space)')
2019-03-20 01:26:08 +08:00
parser.add_argument('-j', '--workers', type=int, default=4,
2019-01-31 06:41:47 +08:00
help='number of data loading workers (tips: 4 or 8 times number of gpus)')
2019-02-19 23:44:56 +08:00
parser.add_argument('--split-id', type=int, default=0,
help='split index (note: 0-based)')
2018-11-07 23:36:49 +08:00
parser.add_argument('--height', type=int, default=256,
2019-01-31 06:41:47 +08:00
help='height of an image')
2018-11-07 23:36:49 +08:00
parser.add_argument('--width', type=int, default=128,
2019-01-31 06:41:47 +08:00
help='width of an image')
2019-01-29 02:50:09 +08:00
parser.add_argument('--train-sampler', type=str, default='RandomSampler',
2019-01-31 06:41:47 +08:00
help='sampler for trainloader')
2019-03-16 01:45:47 +08:00
parser.add_argument('--combineall', action='store_true',
help='combine all data in a dataset (train+query+gallery) for training')
2019-02-19 23:44:56 +08:00
# ************************************************************
# Data augmentation
# ************************************************************
parser.add_argument('--random-erase', action='store_true',
2019-02-03 22:03:22 +08:00
help='use random erasing for data augmentation')
2019-02-19 23:44:56 +08:00
parser.add_argument('--color-jitter', action='store_true',
help='randomly change the brightness, contrast and saturation')
parser.add_argument('--color-aug', action='store_true',
help='randomly alter the intensities of RGB channels')
2018-11-07 23:36:49 +08:00
# ************************************************************
# Video datasets
# ************************************************************
parser.add_argument('--seq-len', type=int, default=15,
2019-01-31 06:41:47 +08:00
help='number of images to sample in a tracklet')
parser.add_argument('--sample-method', type=str, default='evenly',
2019-01-31 06:41:47 +08:00
help='how to sample images from a tracklet')
2019-03-20 01:26:08 +08:00
parser.add_argument('--pooling-method', type=str, default='avg', choices=['avg', 'max'],
2019-01-31 06:41:47 +08:00
help='how to pool features over a tracklet (for video reid)')
2018-11-07 23:36:49 +08:00
# ************************************************************
2019-01-23 00:42:13 +08:00
# Dataset-specific setting
2018-11-07 23:36:49 +08:00
# ************************************************************
parser.add_argument('--cuhk03-labeled', action='store_true',
2019-01-31 06:41:47 +08:00
help='use labeled images, if false, use detected images')
2018-11-07 23:36:49 +08:00
parser.add_argument('--cuhk03-classic-split', action='store_true',
2019-01-31 06:41:47 +08:00
help='use classic split by Li et al. CVPR\'14')
2018-11-07 23:36:49 +08:00
parser.add_argument('--use-metric-cuhk03', action='store_true',
2019-01-31 06:41:47 +08:00
help='use cuhk03\'s metric for evaluation')
2019-01-23 00:07:43 +08:00
parser.add_argument('--market1501-500k', action='store_true',
help='add 500k distractors to the gallery set for market1501')
2018-11-07 23:36:49 +08:00
# ************************************************************
# Optimization options
# ************************************************************
parser.add_argument('--optim', type=str, default='adam',
2019-01-31 06:41:47 +08:00
help='optimization algorithm (see optimizers.py)')
2019-03-20 01:26:08 +08:00
parser.add_argument('--lr', type=float, default=0.0003,
2019-01-31 06:41:47 +08:00
help='initial learning rate')
2019-03-20 01:26:08 +08:00
parser.add_argument('--weight-decay', type=float, default=5e-04,
2019-01-31 06:41:47 +08:00
help='weight decay')
2018-11-08 01:09:23 +08:00
# sgd
2019-03-20 01:26:08 +08:00
parser.add_argument('--momentum', type=float, default=0.9,
2019-01-31 06:41:47 +08:00
help='momentum factor for sgd and rmsprop')
2019-03-20 01:26:08 +08:00
parser.add_argument('--sgd-dampening', type=float, default=0,
2019-01-31 06:41:47 +08:00
help='sgd\'s dampening for momentum')
2018-11-08 01:09:23 +08:00
parser.add_argument('--sgd-nesterov', action='store_true',
2019-01-31 06:41:47 +08:00
help='whether to enable sgd\'s Nesterov momentum')
2018-11-08 01:09:23 +08:00
# rmsprop
2019-03-20 01:26:08 +08:00
parser.add_argument('--rmsprop-alpha', type=float, default=0.99,
2019-01-31 06:41:47 +08:00
help='rmsprop\'s smoothing constant')
2018-11-08 01:09:23 +08:00
# adam/amsgrad
2019-03-20 01:26:08 +08:00
parser.add_argument('--adam-beta1', type=float, default=0.9,
2019-01-31 06:41:47 +08:00
help='exponential decay rate for adam\'s first moment')
2019-03-20 01:26:08 +08:00
parser.add_argument('--adam-beta2', type=float, default=0.999,
2019-01-31 06:41:47 +08:00
help='exponential decay rate for adam\'s second moment')
2018-11-07 23:36:49 +08:00
# ************************************************************
# Training hyperparameters
# ************************************************************
2019-03-20 01:26:08 +08:00
parser.add_argument('--max-epoch', type=int, default=60,
2019-01-31 06:41:47 +08:00
help='maximum epochs to run')
2019-03-20 01:26:08 +08:00
parser.add_argument('--start-epoch', type=int, default=0,
2019-01-31 06:41:47 +08:00
help='manual epoch number (useful when restart)')
2018-11-08 01:09:23 +08:00
2019-03-20 01:26:08 +08:00
parser.add_argument('--train-batch-size', type=int, default=32,
2019-01-31 06:41:47 +08:00
help='training batch size')
2019-03-20 01:26:08 +08:00
parser.add_argument('--test-batch-size', type=int, default=100,
2019-01-31 06:41:47 +08:00
help='test batch size')
2018-11-07 23:36:49 +08:00
2018-11-15 06:33:00 +08:00
parser.add_argument('--always-fixbase', action='store_true',
2019-01-31 06:41:47 +08:00
help='always fix base network and only train specified layers')
2018-11-09 08:02:46 +08:00
parser.add_argument('--fixbase-epoch', type=int, default=0,
2019-01-31 06:41:47 +08:00
help='how many epochs to fix base network (only train randomly initialized classifier)')
2018-11-09 07:04:50 +08:00
parser.add_argument('--open-layers', type=str, nargs='+', default=['classifier'],
2019-01-31 06:41:47 +08:00
help='open specified layers for training while keeping others frozen')
2018-11-08 01:09:23 +08:00
2019-02-03 22:03:22 +08:00
parser.add_argument('--staged-lr', action='store_true',
help='set different lr to different layers')
parser.add_argument('--new-layers', type=str, nargs='+', default=['classifier'],
help='newly added layers with default lr')
parser.add_argument('--base-lr-mult', type=float, default=0.1,
help='learning rate multiplier for base layers')
2019-02-08 19:44:12 +08:00
# ************************************************************
# Learning rate scheduler options
# ************************************************************
parser.add_argument('--lr-scheduler', type=str, default='multi_step',
help='learning rate scheduler (see lr_schedulers.py)')
2019-03-20 01:26:08 +08:00
parser.add_argument('--stepsize', type=int, default=[20, 40], nargs='+',
2019-02-08 19:44:12 +08:00
help='stepsize to decay learning rate')
2019-03-20 01:26:08 +08:00
parser.add_argument('--gamma', type=float, default=0.1,
2019-02-08 19:44:12 +08:00
help='learning rate decay')
2018-11-08 01:09:23 +08:00
# ************************************************************
# Cross entropy loss-specific setting
# ************************************************************
2018-11-07 23:36:49 +08:00
parser.add_argument('--label-smooth', action='store_true',
2019-01-31 06:41:47 +08:00
help='use label smoothing regularizer in cross entropy loss')
2018-11-07 23:36:49 +08:00
# ************************************************************
# Hard triplet loss-specific setting
# ************************************************************
parser.add_argument('--margin', type=float, default=0.3,
2019-01-31 06:41:47 +08:00
help='margin for triplet loss')
2018-11-07 23:36:49 +08:00
parser.add_argument('--num-instances', type=int, default=4,
2019-01-31 06:41:47 +08:00
help='number of instances per identity')
2019-03-20 01:26:08 +08:00
parser.add_argument('--weight-t', type=float, default=1,
2019-01-31 06:41:47 +08:00
help='weight to balance hard triplet loss')
2019-03-20 01:26:08 +08:00
parser.add_argument('--weight-x', type=float, default=1,
help='weight to balance cross entropy loss')
2018-11-07 23:36:49 +08:00
# ************************************************************
# Architecture
# ************************************************************
parser.add_argument('-a', '--arch', type=str, default='resnet50')
2019-02-19 19:16:48 +08:00
parser.add_argument('--no-pretrained', action='store_true',
help='do not load pretrained weights')
2018-11-09 21:54:18 +08:00
2018-11-07 23:36:49 +08:00
# ************************************************************
2018-11-09 21:54:18 +08:00
# Test settings
2018-11-07 23:36:49 +08:00
# ************************************************************
parser.add_argument('--load-weights', type=str, default='',
2019-03-20 01:26:08 +08:00
help='load pretrained weights but ignore layers that do not match in size')
2018-11-07 23:36:49 +08:00
parser.add_argument('--evaluate', action='store_true',
2019-01-31 06:41:47 +08:00
help='evaluate only')
2018-11-10 05:58:58 +08:00
parser.add_argument('--eval-freq', type=int, default=-1,
2019-01-31 06:41:47 +08:00
help='evaluation frequency (set to -1 to test only in the end)')
2018-11-07 23:36:49 +08:00
parser.add_argument('--start-eval', type=int, default=0,
2019-01-31 06:41:47 +08:00
help='start to evaluate after a specific epoch')
2019-03-20 01:26:08 +08:00
parser.add_argument('--dist-metric', type=str, default='euclidean',
help='distance metric')
2018-11-09 21:54:18 +08:00
# ************************************************************
# Miscs
# ************************************************************
parser.add_argument('--print-freq', type=int, default=10,
2019-01-31 06:41:47 +08:00
help='print frequency')
2018-11-09 21:54:18 +08:00
parser.add_argument('--seed', type=int, default=1,
2019-01-31 06:41:47 +08:00
help='manual seed')
2018-11-09 21:54:18 +08:00
parser.add_argument('--resume', type=str, default='', metavar='PATH',
2019-01-31 06:41:47 +08:00
help='resume from a checkpoint')
2018-11-09 21:54:18 +08:00
parser.add_argument('--save-dir', type=str, default='log',
2019-01-31 06:41:47 +08:00
help='path to save log and model weights')
2018-11-07 23:36:49 +08:00
parser.add_argument('--use-cpu', action='store_true',
2019-01-31 06:41:47 +08:00
help='use cpu')
2019-03-20 01:26:08 +08:00
parser.add_argument('--gpu-devices', type=str, default='0',
2018-11-07 23:36:49 +08:00
help='gpu device ids for CUDA_VISIBLE_DEVICES')
parser.add_argument('--use-avai-gpus', action='store_true',
2019-01-31 06:41:47 +08:00
help='use available gpus instead of specified devices (useful when using managed clusters)')
2019-03-20 01:26:08 +08:00
parser.add_argument('--visrank', action='store_true',
2019-01-31 06:41:47 +08:00
help='visualize ranked results, only available in evaluation mode')
2019-03-20 01:26:08 +08:00
parser.add_argument('--visrank-topk', type=int, default=20,
help='visualize topk ranks')
2018-11-07 23:36:49 +08:00
2019-03-20 01:26:08 +08:00
return parser