Closed nanggn closed 3 years ago
应该是超参设置有问题,batch size,pk 采样以及 gpu 数目设置的不对
我的batchsize设为16(4 images / person),gpu也就一块,最后实验结果不如直接CE loss 和 triplet loss。这是什么情况?
你可以把 config 发出来看看,我怀疑你设置错了
我用的是其他代码 (简单的resnet50) 以下是我的参数设置:
import argparse def argument_parser(): parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
# ************************************************************
# Datasets (general)
# ************************************************************
parser.add_argument('--root', type=str, default=r'F:\Code\ve-reid\vehicle-ReID-baseline-master\dataset',
help='root path to data directory')
# parser.add_argument('--root', type=str, default=r'F:\Code\ve-reid\vehicle-ReID-baseline-master\dataset\VRAI',
# help='root path to data directory')
# parser.add_argument('-s', '--source-names', type=str, required=False, nargs='+',
# help='source dataset for training(delimited by space)')
# parser.add_argument('-t', '--target-names', type=str, required=False, nargs='+',
# help='target dataset for testing(delimited by space)')
parser.add_argument('-s', '--source-names', type=str, default=['VRAI'],
help='source dataset for training(delimited by space)')
parser.add_argument('-t', '--target-names', type=str, default=['VRAI'],
help='target dataset for testing(delimited by space)')
parser.add_argument('-j', '--workers', default=0, type=int,
help='number of data loading workers (tips: 4 or 8 times number of gpus)')
# split-id not used
parser.add_argument('--split-id', type=int, default=0, ###################################
help='split index (note: 0-based)')
parser.add_argument('--height', type=int, default=128,
help='height of an image')
parser.add_argument('--width', type=int, default=256,
help='width of an image')
parser.add_argument('--train-sampler', type=str, default='RandomIdentitySampler',
help='sampler for trainloader')
# ************************************************************
# Data augmentation
# ************************************************************
parser.add_argument('--random-erase', type=bool, default=True, # action='store_true', ##### 只要有传参,就将该变量设为True
help='use random erasing for data augmentation')
parser.add_argument('--color-jitter', type=bool, default=True, ## action='store_true',
help='randomly change the brightness, contrast and saturation') ## 亮度,对比度和饱和度
parser.add_argument('--color-aug', type=bool, default=True, # action='store_true',
help='randomly alter the intensities of RGB channels') ## 强度
# ************************************************************
# Optimization options
# ************************************************************
parser.add_argument('--optim', type=str, default='adam',
help='optimization algorithm (see optimizers.py)')
parser.add_argument('--lr', default=0.01, type=float,
help='initial learning rate')
parser.add_argument('--weight-decay', default=5e-04, type=float,
help='weight decay')
# sgd
parser.add_argument('--momentum', default=0.9, type=float,
help='momentum factor for sgd and rmsprop')
parser.add_argument('--sgd-dampening', default=0, type=float,
help='sgd\'s dampening for momentum')
parser.add_argument('--sgd-nesterov', action='store_true',
help='whether to enable sgd\'s Nesterov momentum')
# rmsprop
parser.add_argument('--rmsprop-alpha', default=0.99, type=float,
help='rmsprop\'s smoothing constant')
# adam/amsgrad
parser.add_argument('--adam-beta1', default=0.9, type=float,
help='exponential decay rate for adam\'s first moment')
parser.add_argument('--adam-beta2', default=0.999, type=float,
help='exponential decay rate for adam\'s second moment')
# ************************************************************
# Training hyperparameters
# ************************************************************
parser.add_argument('--max-epoch', default=100, type=int,
help='maximum epochs to run')
parser.add_argument('--start-epoch', default=0, type=int,
help='manual epoch number (useful when restart)')
parser.add_argument('--train-batch-size', default=32, type=int,
help='training batch size')
parser.add_argument('--test-batch-size', default=100, type=int,
help='test batch size')
# ************************************************************
# Learning rate scheduler options
# ************************************************************
parser.add_argument('--lr-scheduler', type=str, default='multi_step',
help='learning rate scheduler (see lr_schedulers.py)')
parser.add_argument('--stepsize', default=[20, 40, 60], nargs='+', type=int,
help='stepsize to decay learning rate')
parser.add_argument('--gamma', default=0.1, type=float,
help='learning rate decay')
# ************************************************************
# Cross entropy loss-specific setting
# ************************************************************
parser.add_argument('--label-smooth', type=bool, default=True,
help='use label smoothing regularizer in cross entropy loss')
# ************************************************************
# Hard triplet loss-specific setting
# ************************************************************
parser.add_argument('--margin', type=float, `default=0.5,`
help='margin for triplet loss')
parser.add_argument('--num-instances', type=int, default=4, #####################
help='number of instances per identity')
parser.add_argument('--lambda-xent', type=float, default=1,
help='weight to balance cross entropy loss')
parser.add_argument('--lambda-htri', type=float, default=1, ###############
help='weight to balance hard triplet loss')
# ************************************************************
# Architecture
# ************************************************************
parser.add_argument('-a', '--arch', type=str, default='resnet50')
parser.add_argument('--no-pretrained', action='store_true',
help='do not load pretrained weights')
# ************************************************************
# Test settings
# ************************************************************
parser.add_argument('--load-weights', type=str, default=r'H:\models\resnet50-19c8e357.pth',
help='load pretrained weights but ignore layers that don\'t match in size')
# parser.add_argument('--evaluate', action='store_true',
# help='evaluate only')
parser.add_argument('--evaluate', action='store_true',
help='evaluate only')
parser.add_argument('--eval-freq', type=int, default=5,
help='evaluation frequency (set to -1 to test only in the end)')
parser.add_argument('--start-eval', type=int, default=0,
help='start to evaluate after a specific epoch')
parser.add_argument('--test_size', type=int, default=800,
help='test-size for vehicleID dataset, choices=[800,1600,2400]')
parser.add_argument('--query-remove', type=bool, default=False) ##########################
# ************************************************************
# Miscs
# ************************************************************
parser.add_argument('--print-freq', type=int, default=10,
help='print frequency')
parser.add_argument('--seed', type=int, default=1,
help='manual seed')
parser.add_argument('--resume', type=str, default='', metavar='PATH',
help='resume from a checkpoint')
parser.add_argument('--save-dir', type=str, default='log/VRAI_weight',
help='path to save log and model weights')
parser.add_argument('--use-cpu', action='store_true',
help='use cpu')
parser.add_argument('--gpu-devices', default='0', type=str,
help='gpu device ids for CUDA_VISIBLE_DEVICES')
# parser.add_argument('--visualize-ranks', action='store_true',
# help='visualize ranked results, only available in evaluation mode')
parser.add_argument('--visualize-ranks', type=bool, default=False,
help='visualize ranked results, only available in evaluation mode')
parser.add_argument('--use-avai-gpus', action='store_true',
help='use available gpus instead of specified devices (useful when using managed clusters)')
return parser
如果不是用的 fastreid,我们就不管了
好的 感谢您的回复
推荐你试一下 fastreid,应该会有不错的效果