From db0ec5c3e227a691d0229938789522264976f1c2 Mon Sep 17 00:00:00 2001 From: shaoniangu Date: Mon, 25 Mar 2019 22:47:35 +0800 Subject: [PATCH] Modify after merging #9 --- Experiment-all_tricks-tri_center-duke.sh | 2 +- Experiment-all_tricks-tri_center-market.sh | 2 +- Experiment-all_tricks-without_center-duke.sh | 2 +- Experiment-all_tricks-without_center-market.sh | 2 +- ...t-seresnext50-all_tricks-tri_center-duke.sh | 11 +++++++++++ ...seresnext50-all_tricks-tri_center-market.sh | 11 +++++++++++ README.md | 18 ++++++++++++------ ...tricks-tri_center-feat_after_bn-cos-duke.sh | 2 +- ...icks-tri_center-feat_after_bn-cos-market.sh | 2 +- ...ks-without_center-feat_after_bn-cos-duke.sh | 2 +- ...-without_center-feat_after_bn-cos-market.sh | 2 +- ...tricks-tri_center-feat_after_bn-cos-duke.sh | 2 +- ...icks-tri_center-feat_after_bn-cos-market.sh | 2 +- modeling/__init__.py | 5 +++-- modeling/backbones/resnet.py | 9 +++++++++ modeling/baseline.py | 8 +++----- 16 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 Experiment-seresnext50-all_tricks-tri_center-duke.sh create mode 100644 Experiment-seresnext50-all_tricks-tri_center-market.sh diff --git a/Experiment-all_tricks-tri_center-duke.sh b/Experiment-all_tricks-tri_center-duke.sh index 65b2444..c9e240b 100644 --- a/Experiment-all_tricks-tri_center-duke.sh +++ b/Experiment-all_tricks-tri_center-duke.sh @@ -8,4 +8,4 @@ # last stride 1 # bnneck on # with center loss -python3 tools/train.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('3')" DATASETS.NAMES "('dukemtmc')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005')" \ No newline at end of file +python3 tools/train.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('3')" DATASETS.NAMES "('dukemtmc')" DATASETS.ROOT_DIR "('/home/haoluo/data')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005')" \ No newline at end of file diff --git a/Experiment-all_tricks-tri_center-market.sh b/Experiment-all_tricks-tri_center-market.sh index 92389f5..da858cd 100644 --- a/Experiment-all_tricks-tri_center-market.sh +++ b/Experiment-all_tricks-tri_center-market.sh @@ -8,4 +8,4 @@ # last stride 1 # bnneck on # with center loss -python3 tools/train.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('2')" DATASETS.NAMES "('market1501')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005')" \ No newline at end of file +python3 tools/train.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('2')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/home/haoluo/data')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005')" \ No newline at end of file diff --git a/Experiment-all_tricks-without_center-duke.sh b/Experiment-all_tricks-without_center-duke.sh index 06ba3cc..78a3304 100644 --- a/Experiment-all_tricks-without_center-duke.sh +++ b/Experiment-all_tricks-without_center-duke.sh @@ -8,4 +8,4 @@ # last stride 1 # bnneck on # without center loss -python3 tools/train.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on')" \ No newline at end of file +python3 tools/train.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" DATASETS.ROOT_DIR "('/home/haoluo/data')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on')" \ No newline at end of file diff --git a/Experiment-all_tricks-without_center-market.sh b/Experiment-all_tricks-without_center-market.sh index 7577246..2fc2340 100644 --- a/Experiment-all_tricks-without_center-market.sh +++ b/Experiment-all_tricks-without_center-market.sh @@ -8,4 +8,4 @@ # last stride 1 # bnneck on # without center loss -python3 tools/train.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on')" \ No newline at end of file +python3 tools/train.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/home/haoluo/data')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on')" \ No newline at end of file diff --git a/Experiment-seresnext50-all_tricks-tri_center-duke.sh b/Experiment-seresnext50-all_tricks-tri_center-duke.sh new file mode 100644 index 0000000..ba72f24 --- /dev/null +++ b/Experiment-seresnext50-all_tricks-tri_center-duke.sh @@ -0,0 +1,11 @@ +# Experiment all tricks with center loss : 256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005 +# Dataset 2: dukemtmc +# imagesize: 256x128 +# batchsize: 16x4 +# warmup_step 10 +# random erase prob 0.5 +# labelsmooth: on +# last stride 1 +# bnneck on +# with center loss +python3 tools/train.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('1')" MODEL.NAME "('se_resnext50')" MODEL.PRETRAIN_PATH "('/home/haoluo/.torch/models/se_resnext50_32x4d-a260b3a4.pth')" DATASETS.NAMES "('dukemtmc')" DATASETS.ROOT_DIR "('/home/haoluo/data')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-seresnext50-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005')" \ No newline at end of file diff --git a/Experiment-seresnext50-all_tricks-tri_center-market.sh b/Experiment-seresnext50-all_tricks-tri_center-market.sh new file mode 100644 index 0000000..05d1c2e --- /dev/null +++ b/Experiment-seresnext50-all_tricks-tri_center-market.sh @@ -0,0 +1,11 @@ +# Experiment all tricks with center loss : 256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005 +# Dataset 1: market1501 +# imagesize: 256x128 +# batchsize: 16x4 +# warmup_step 10 +# random erase prob 0.5 +# labelsmooth: on +# last stride 1 +# bnneck on +# with center loss +python3 tools/train.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('0')" MODEL.NAME "('se_resnext50')" MODEL.PRETRAIN_PATH "('/home/haoluo/.torch/models/se_resnext50_32x4d-a260b3a4.pth')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/home/haoluo/data')" OUTPUT_DIR "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-seresnext50-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005')" \ No newline at end of file diff --git a/README.md b/README.md index 03020d0..0043128 100644 --- a/README.md +++ b/README.md @@ -67,11 +67,8 @@ The designed architecture follows this guide [PyTorch-Project-Template](https:// 4. Prepare dataset - Create a directory to store reid datasets under this repo via - ```bash - cd reid-strong-baseline - mkdir data - ``` + Create a directory to store reid datasets under this repo or outside this repo. Remember to set your path to the root of the dataset in `config/defaults.py` for all training and testing or set in every single config file in `configs/` or set in every single command. + (1)Market1501 * Download dataset to `data/` from http://www.liangzheng.org/Project/project_reid.html @@ -99,11 +96,20 @@ The designed architecture follows this guide [PyTorch-Project-Template](https:// ``` 5. Prepare pretrained model if you don't have + + (1)resnet + ```python from torchvision import models models.resnet50(pretrained=True) ``` - Then it will automatically download model in `~/.torch/models/`, you should set this path in `config/defaults.py` for all training or set in every single training config file in `configs/`. + (2)senet + + ```python + import torch.utils.model_zoo as model_zoo + model_zoo.load_url('the pth you want to download (specific urls are listed in ./modeling/backbones/senet.py)') + ``` + Then it will automatically download model in `~/.torch/models/`, you should set this path in `config/defaults.py` for all training or set in every single training config file in `configs/` or set in every single command. 6. If you want to know the detained configurations and their meaning, please refer to `config/defaults.py`. If you want to set your own parameters, you can follow our method: create a new yml file, then set your own parameters. Add `--config_file='configs/your yml file'` int the commands described below, then our code will merge your configuration. automatically. diff --git a/Test-all_tricks-tri_center-feat_after_bn-cos-duke.sh b/Test-all_tricks-tri_center-feat_after_bn-cos-duke.sh index 0dac9b6..671f4ce 100644 --- a/Test-all_tricks-tri_center-feat_after_bn-cos-duke.sh +++ b/Test-all_tricks-tri_center-feat_after_bn-cos-duke.sh @@ -9,4 +9,4 @@ # bnneck on # with center loss # without re-ranking -python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file +python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" DATASETS.ROOT_DIR "('/home/haoluo/data')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file diff --git a/Test-all_tricks-tri_center-feat_after_bn-cos-market.sh b/Test-all_tricks-tri_center-feat_after_bn-cos-market.sh index b3db9a6..2d89a79 100644 --- a/Test-all_tricks-tri_center-feat_after_bn-cos-market.sh +++ b/Test-all_tricks-tri_center-feat_after_bn-cos-market.sh @@ -9,4 +9,4 @@ # bnneck on # with center loss # without re-ranking -python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file +python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/home/haoluo/data')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file diff --git a/Test-all_tricks-without_center-feat_after_bn-cos-duke.sh b/Test-all_tricks-without_center-feat_after_bn-cos-duke.sh index 9d98f8e..895a240 100644 --- a/Test-all_tricks-without_center-feat_after_bn-cos-duke.sh +++ b/Test-all_tricks-without_center-feat_after_bn-cos-duke.sh @@ -9,4 +9,4 @@ # bnneck on # without center loss # without re-ranking -python3 tools/test.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on/resnet50_model_120.pth')" \ No newline at end of file +python3 tools/test.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" DATASETS.ROOT_DIR "('/home/haoluo/data')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on/resnet50_model_120.pth')" \ No newline at end of file diff --git a/Test-all_tricks-without_center-feat_after_bn-cos-market.sh b/Test-all_tricks-without_center-feat_after_bn-cos-market.sh index a641d53..15c3392 100644 --- a/Test-all_tricks-without_center-feat_after_bn-cos-market.sh +++ b/Test-all_tricks-without_center-feat_after_bn-cos-market.sh @@ -9,4 +9,4 @@ # bnneck on # without center loss # without re-ranking -python3 tools/test.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on/resnet50_model_120.pth')" \ No newline at end of file +python3 tools/test.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/home/haoluo/data')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on/resnet50_model_120.pth')" \ No newline at end of file diff --git a/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-duke.sh b/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-duke.sh index c4c35d5..f3f38f7 100644 --- a/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-duke.sh +++ b/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-duke.sh @@ -9,4 +9,4 @@ # bnneck on # with center loss # with re-ranking -python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" TEST.RE_RANKING "('yes')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file +python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('1')" DATASETS.NAMES "('dukemtmc')" TEST.RE_RANKING "('yes')" DATASETS.ROOT_DIR "('/home/haoluo/data')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/dukemtmc/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file diff --git a/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-market.sh b/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-market.sh index 845f43f..e3dcecd 100644 --- a/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-market.sh +++ b/Test-reranking-all_tricks-tri_center-feat_after_bn-cos-market.sh @@ -9,4 +9,4 @@ # bnneck on # with center loss # with re-ranking -python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" TEST.RE_RANKING "('yes')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file +python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "('/home/haoluo/data')" TEST.RE_RANKING "('yes')" TEST.WEIGHT "('/home/haoluo/log/gu/reid_baseline_review/Opensource_test/market1501/Experiment-all-tricks-tri_center-256x128-bs16x4-warmup10-erase0_5-labelsmooth_on-laststride1-bnneck_on-triplet_centerloss0_0005/resnet50_model_120.pth')" \ No newline at end of file diff --git a/modeling/__init__.py b/modeling/__init__.py index 97a69b5..ed2418e 100644 --- a/modeling/__init__.py +++ b/modeling/__init__.py @@ -8,6 +8,7 @@ from .baseline import Baseline def build_model(cfg, num_classes): - if cfg.MODEL.NAME == 'resnet50': - model = Baseline(num_classes, cfg.MODEL.LAST_STRIDE, cfg.MODEL.PRETRAIN_PATH, cfg.MODEL.NECK, cfg.TEST.NECK_FEAT) + # if cfg.MODEL.NAME == 'resnet50': + # model = Baseline(num_classes, cfg.MODEL.LAST_STRIDE, cfg.MODEL.PRETRAIN_PATH, cfg.MODEL.NECK, cfg.TEST.NECK_FEAT) + model = Baseline(num_classes, cfg.MODEL.LAST_STRIDE, cfg.MODEL.PRETRAIN_PATH, cfg.MODEL.NECK, cfg.TEST.NECK_FEAT, cfg.MODEL.NAME) return model diff --git a/modeling/backbones/resnet.py b/modeling/backbones/resnet.py index 516dacd..86364d2 100644 --- a/modeling/backbones/resnet.py +++ b/modeling/backbones/resnet.py @@ -10,6 +10,12 @@ import torch from torch import nn +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + class BasicBlock(nn.Module): expansion = 1 @@ -41,6 +47,7 @@ class BasicBlock(nn.Module): return out + class Bottleneck(nn.Module): expansion = 4 @@ -87,6 +94,7 @@ class ResNet(nn.Module): self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) self.bn1 = nn.BatchNorm2d(64) + # self.relu = nn.ReLU(inplace=True) # add missed relu self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) self.layer1 = self._make_layer(block, 64, layers[0]) self.layer2 = self._make_layer(block, 128, layers[1], stride=2) @@ -114,6 +122,7 @@ class ResNet(nn.Module): def forward(self, x): x = self.conv1(x) x = self.bn1(x) + # x = self.relu(x) # add missed relu x = self.maxpool(x) x = self.layer1(x) diff --git a/modeling/baseline.py b/modeling/baseline.py index 0ea66c2..64fcb00 100644 --- a/modeling/baseline.py +++ b/modeling/baseline.py @@ -11,8 +11,6 @@ from .backbones.resnet import ResNet, BasicBlock, Bottleneck from .backbones.senet import SENet, SEResNetBottleneck, SEBottleneck, SEResNeXtBottleneck - - def weights_init_kaiming(m): classname = m.__class__.__name__ if classname.find('Linear') != -1: @@ -96,7 +94,7 @@ class Baseline(nn.Module): downsample_padding=0, last_stride=last_stride) elif model_name == 'se_resnext50': - self.base = SENet(block=SEResNeXtBottleneck, + self.base = SENet(block=SEResNeXtBottleneck, layers=[3, 4, 6, 3], groups=32, reduction=16, @@ -107,7 +105,7 @@ class Baseline(nn.Module): downsample_padding=0, last_stride=last_stride) elif model_name == 'se_resnext101': - self.base = SENet(blok=SEResNeXtBottleneck, + self.base = SENet(block=SEResNeXtBottleneck, layers=[3, 4, 23, 3], groups=32, reduction=16, @@ -124,7 +122,7 @@ class Baseline(nn.Module): reduction=16, dropout_p=0.2, last_stride=last_stride) - + self.base.load_param(model_path) self.gap = nn.AdaptiveAvgPool2d(1)