Modify after merging #9
parent
0df326abcb
commit
db0ec5c3e2
|
@ -8,4 +8,4 @@
|
||||||
# last stride 1
|
# last stride 1
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# with center loss
|
# 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')"
|
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')"
|
|
@ -8,4 +8,4 @@
|
||||||
# last stride 1
|
# last stride 1
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# with center loss
|
# 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')"
|
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')"
|
|
@ -8,4 +8,4 @@
|
||||||
# last stride 1
|
# last stride 1
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# without center loss
|
# 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')"
|
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')"
|
|
@ -8,4 +8,4 @@
|
||||||
# last stride 1
|
# last stride 1
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# without center loss
|
# 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')"
|
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')"
|
|
@ -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')"
|
|
@ -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')"
|
18
README.md
18
README.md
|
@ -67,11 +67,8 @@ The designed architecture follows this guide [PyTorch-Project-Template](https://
|
||||||
|
|
||||||
4. Prepare dataset
|
4. Prepare dataset
|
||||||
|
|
||||||
Create a directory to store reid datasets under this repo via
|
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.
|
||||||
```bash
|
|
||||||
cd reid-strong-baseline
|
|
||||||
mkdir data
|
|
||||||
```
|
|
||||||
(1)Market1501
|
(1)Market1501
|
||||||
|
|
||||||
* Download dataset to `data/` from http://www.liangzheng.org/Project/project_reid.html
|
* 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
|
5. Prepare pretrained model if you don't have
|
||||||
|
|
||||||
|
(1)resnet
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from torchvision import models
|
from torchvision import models
|
||||||
models.resnet50(pretrained=True)
|
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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -9,4 +9,4 @@
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# with center loss
|
# with center loss
|
||||||
# without re-ranking
|
# 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')"
|
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')"
|
|
@ -9,4 +9,4 @@
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# with center loss
|
# with center loss
|
||||||
# without re-ranking
|
# 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')"
|
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')"
|
|
@ -9,4 +9,4 @@
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# without center loss
|
# without center loss
|
||||||
# without re-ranking
|
# 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')"
|
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')"
|
|
@ -9,4 +9,4 @@
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# without center loss
|
# without center loss
|
||||||
# without re-ranking
|
# 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')"
|
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')"
|
|
@ -9,4 +9,4 @@
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# with center loss
|
# with center loss
|
||||||
# with re-ranking
|
# 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')"
|
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')"
|
|
@ -9,4 +9,4 @@
|
||||||
# bnneck on
|
# bnneck on
|
||||||
# with center loss
|
# with center loss
|
||||||
# with re-ranking
|
# 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')"
|
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')"
|
|
@ -8,6 +8,7 @@ from .baseline import Baseline
|
||||||
|
|
||||||
|
|
||||||
def build_model(cfg, num_classes):
|
def build_model(cfg, num_classes):
|
||||||
if cfg.MODEL.NAME == 'resnet50':
|
# 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)
|
||||||
|
model = Baseline(num_classes, cfg.MODEL.LAST_STRIDE, cfg.MODEL.PRETRAIN_PATH, cfg.MODEL.NECK, cfg.TEST.NECK_FEAT, cfg.MODEL.NAME)
|
||||||
return model
|
return model
|
||||||
|
|
|
@ -10,6 +10,12 @@ import torch
|
||||||
from torch import nn
|
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):
|
class BasicBlock(nn.Module):
|
||||||
expansion = 1
|
expansion = 1
|
||||||
|
|
||||||
|
@ -41,6 +47,7 @@ class BasicBlock(nn.Module):
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
class Bottleneck(nn.Module):
|
class Bottleneck(nn.Module):
|
||||||
expansion = 4
|
expansion = 4
|
||||||
|
|
||||||
|
@ -87,6 +94,7 @@ class ResNet(nn.Module):
|
||||||
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
|
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
|
||||||
bias=False)
|
bias=False)
|
||||||
self.bn1 = nn.BatchNorm2d(64)
|
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.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
|
||||||
self.layer1 = self._make_layer(block, 64, layers[0])
|
self.layer1 = self._make_layer(block, 64, layers[0])
|
||||||
self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
|
self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
|
||||||
|
@ -114,6 +122,7 @@ class ResNet(nn.Module):
|
||||||
def forward(self, x):
|
def forward(self, x):
|
||||||
x = self.conv1(x)
|
x = self.conv1(x)
|
||||||
x = self.bn1(x)
|
x = self.bn1(x)
|
||||||
|
# x = self.relu(x) # add missed relu
|
||||||
x = self.maxpool(x)
|
x = self.maxpool(x)
|
||||||
|
|
||||||
x = self.layer1(x)
|
x = self.layer1(x)
|
||||||
|
|
|
@ -11,8 +11,6 @@ from .backbones.resnet import ResNet, BasicBlock, Bottleneck
|
||||||
from .backbones.senet import SENet, SEResNetBottleneck, SEBottleneck, SEResNeXtBottleneck
|
from .backbones.senet import SENet, SEResNetBottleneck, SEBottleneck, SEResNeXtBottleneck
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def weights_init_kaiming(m):
|
def weights_init_kaiming(m):
|
||||||
classname = m.__class__.__name__
|
classname = m.__class__.__name__
|
||||||
if classname.find('Linear') != -1:
|
if classname.find('Linear') != -1:
|
||||||
|
@ -96,7 +94,7 @@ class Baseline(nn.Module):
|
||||||
downsample_padding=0,
|
downsample_padding=0,
|
||||||
last_stride=last_stride)
|
last_stride=last_stride)
|
||||||
elif model_name == 'se_resnext50':
|
elif model_name == 'se_resnext50':
|
||||||
self.base = SENet(block=SEResNeXtBottleneck,
|
self.base = SENet(block=SEResNeXtBottleneck,
|
||||||
layers=[3, 4, 6, 3],
|
layers=[3, 4, 6, 3],
|
||||||
groups=32,
|
groups=32,
|
||||||
reduction=16,
|
reduction=16,
|
||||||
|
@ -107,7 +105,7 @@ class Baseline(nn.Module):
|
||||||
downsample_padding=0,
|
downsample_padding=0,
|
||||||
last_stride=last_stride)
|
last_stride=last_stride)
|
||||||
elif model_name == 'se_resnext101':
|
elif model_name == 'se_resnext101':
|
||||||
self.base = SENet(blok=SEResNeXtBottleneck,
|
self.base = SENet(block=SEResNeXtBottleneck,
|
||||||
layers=[3, 4, 23, 3],
|
layers=[3, 4, 23, 3],
|
||||||
groups=32,
|
groups=32,
|
||||||
reduction=16,
|
reduction=16,
|
||||||
|
@ -124,7 +122,7 @@ class Baseline(nn.Module):
|
||||||
reduction=16,
|
reduction=16,
|
||||||
dropout_p=0.2,
|
dropout_p=0.2,
|
||||||
last_stride=last_stride)
|
last_stride=last_stride)
|
||||||
|
|
||||||
|
|
||||||
self.base.load_param(model_path)
|
self.base.load_param(model_path)
|
||||||
self.gap = nn.AdaptiveAvgPool2d(1)
|
self.gap = nn.AdaptiveAvgPool2d(1)
|
||||||
|
|
Loading…
Reference in New Issue