diff --git a/README.md b/README.md index f34591f..3b9e4b0 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,16 @@ -# reid_baseline -reid baseline model for exploring softmax and triplet hard loss's influence. +# ReID_baseline +Baseline model (with bottleneck) for person ReID (using softmax and triplet loss). -### Classification -<img src='https://ws3.sinaimg.cn/large/006tKfTcly1fs76ysvu3zj30kg0d60t5.jpg' height='200'> <img src='https://ws2.sinaimg.cn/large/006tKfTcly1fs76zbtfxcj30js0d674m.jpg' height='200'> - - -### Triplet Hard -<img src='https://ws2.sinaimg.cn/large/006tNc79ly1fs3sxc54xjj30ka0d6dgd.jpg' height='200'> <img src='https://ws2.sinaimg.cn/large/006tNc79ly1fs3tpat6emj30k00d2t93.jpg' height=200> - - -### Classification + Triplet Hard - -<img src='https://ws2.sinaimg.cn/large/006tKfTcly1fs79doog34j30ja0cudg5.jpg' height='200'> <img src='https://ws2.sinaimg.cn/large/006tNc79ly1fs3tpat6emj30k00d2t93.jpg' height=200> +## Learning rate +This is the warmpup strategy learning rate +<img src='https://ws3.sinaimg.cn/large/006tNc79ly1fthmcjwoaaj31kw0natad.jpg' height='200'> ## Results | loss | rank1 | map | | --- | --| ---| -| triplet hard | 89.9% | 76.8% | | softmax | 87.9% | 70.1% | -|triplet + softmax | 92% | 78.1% | - +| triplet | 88.8% | 74.8% | +|triplet + softmax | 92.0% | 78.1% | diff --git a/main_reid.py b/main_reid.py index 6de54d8..f299563 100644 --- a/main_reid.py +++ b/main_reid.py @@ -27,7 +27,7 @@ from datasets.data_loader import ImageData from datasets.samplers import RandomIdentitySampler from models import get_baseline_model from trainers import clsTrainer, cls_tripletTrainer, tripletTrainer, ResNetEvaluator -from utils.loss import TripletLoss +from utils.loss import TripletLoss, CrossEntropyLabelSmooth from utils.serialization import Logger from utils.serialization import save_checkpoint from utils.transforms import TrainTransform, TestTransform @@ -94,7 +94,8 @@ def train(**kwargs): print('model size: {:.5f}M'.format(sum(p.numel() for p in model.parameters()) / 1e6)) - xent_criterion = nn.CrossEntropyLoss() + # xent_criterion = nn.CrossEntropyLoss() + xent_criterion = CrossEntropyLabelSmooth(dataset.num_train_pids) tri_criterion = TripletLoss(opt.margin) def cls_criterion(cls_scores, targets): @@ -113,7 +114,7 @@ def train(**kwargs): # get optimizer optimizer = torch.optim.Adam( - optim_policy, lr=opt.lr, weight_decay=opt.weight_decay, + optim_policy, lr=opt.lr, weight_decay=opt.weight_decay ) def adjust_lr(optimizer, ep): @@ -121,13 +122,15 @@ def train(**kwargs): lr = 1e-4 * (ep + 1) / 2 elif ep < 80: lr = 1e-3 * opt.num_gpu - elif 80 <= ep <= 180: + elif ep < 180: lr = 1e-4 * opt.num_gpu - elif 180 <= ep <= 300: + elif ep < 300: lr = 1e-5 * opt.num_gpu - elif 300 <= ep <= 320: - lr = 1e-4 * (ep - 300 + 1) / 2 * opt.num_gpu - elif 380 <= ep <= 480: + elif ep < 320: + lr = 1e-5 * 0.1 ** ((ep - 320) / 80) * opt.num_gpu + elif ep < 400: + lr = 1e-6 + elif ep < 480: lr = 1e-4 * opt.num_gpu else: lr = 1e-5 * opt.num_gpu