├── .idea
├── .gitignore
├── TransSTAM.iml
├── inspectionProfiles
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
└── vcs.xml
├── LICENSE
├── ReadMe.md
├── datasets
├── LRU.py
├── QuickTrackletDetMatchDatasetPB.py
├── StaticDataset.py
├── __init__.py
├── memmory_bank_pb.py
├── pre_load_static_dataset.py
├── samplers.py
├── video_info.py
└── warp_tracklet_and_detection_tensor.py
├── engine.py
├── fast-reid
├── LICENSE
├── README.md
├── configs
│ ├── Base-bagtricks.yml
│ └── MOT-Strongerbaseline.yml
├── demo
│ ├── Eval_MOT.py
│ ├── README.md
│ ├── demo.py
│ ├── plot_roc_with_pickle.py
│ ├── predictor.py
│ ├── run_bjz.sh
│ ├── run_demo.sh
│ ├── test.json
│ ├── test.png
│ └── visualize_result.py
├── fastreid
│ ├── __init__.py
│ ├── config
│ │ ├── __init__.py
│ │ ├── config.py
│ │ └── defaults.py
│ ├── data
│ │ ├── __init__.py
│ │ ├── build.py
│ │ ├── common.py
│ │ ├── data_utils.py
│ │ ├── datasets
│ │ │ ├── __init__.py
│ │ │ ├── bases.py
│ │ │ ├── cuhk03.py
│ │ │ ├── dukemtmcreid.py
│ │ │ ├── market1501.py
│ │ │ ├── mot17.py
│ │ │ ├── mot20.py
│ │ │ ├── msmt17.py
│ │ │ ├── naic.py
│ │ │ ├── product10k.py
│ │ │ ├── reid2019.py
│ │ │ ├── vehicleid.py
│ │ │ ├── veri.py
│ │ │ └── veriwild.py
│ │ ├── samplers
│ │ │ ├── __init__.py
│ │ │ ├── data_sampler.py
│ │ │ └── triplet_sampler.py
│ │ └── transforms
│ │ │ ├── __init__.py
│ │ │ ├── autoaugment.py
│ │ │ ├── build.py
│ │ │ ├── functional.py
│ │ │ └── transforms.py
│ ├── engine
│ │ ├── __init__.py
│ │ ├── defaults.py
│ │ ├── hooks.py
│ │ ├── launch.py
│ │ └── train_loop.py
│ ├── evaluation
│ │ ├── __init__.py
│ │ ├── evaluator.py
│ │ ├── query_expansion.py
│ │ ├── rank.py
│ │ ├── rank_cylib
│ │ │ ├── Makefile
│ │ │ ├── __init__.py
│ │ │ ├── rank_cy.c
│ │ │ ├── rank_cy.cpython-37m-x86_64-linux-gnu.so
│ │ │ ├── rank_cy.pyx
│ │ │ ├── roc_cy.c
│ │ │ ├── roc_cy.cpython-37m-x86_64-linux-gnu.so
│ │ │ ├── roc_cy.pyx
│ │ │ ├── setup.py
│ │ │ └── test_cython.py
│ │ ├── reid_evaluation.py
│ │ ├── rerank.py
│ │ ├── roc.py
│ │ └── testing.py
│ ├── layers
│ │ ├── __init__.py
│ │ ├── activation.py
│ │ ├── am_softmax.py
│ │ ├── arc_softmax.py
│ │ ├── batch_drop.py
│ │ ├── batch_norm.py
│ │ ├── cd_conv.py
│ │ ├── circle_softmax.py
│ │ ├── context_block.py
│ │ ├── frn.py
│ │ ├── non_local.py
│ │ ├── pooling.py
│ │ ├── se_layer.py
│ │ └── splat.py
│ ├── modeling
│ │ ├── __init__.py
│ │ ├── backbones
│ │ │ ├── __init__.py
│ │ │ ├── build.py
│ │ │ ├── osnet.py
│ │ │ ├── regnet
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.py
│ │ │ │ ├── regnet.py
│ │ │ │ ├── regnetx
│ │ │ │ │ ├── RegNetX-1.6GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-12GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-16GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-200MF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-3.2GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-32GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-4.0GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-400MF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-6.4GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-600MF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetX-8.0GF_dds_8gpu.yaml
│ │ │ │ │ └── RegNetX-800MF_dds_8gpu.yaml
│ │ │ │ └── regnety
│ │ │ │ │ ├── RegNetY-1.6GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-12GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-16GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-200MF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-3.2GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-32GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-4.0GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-400MF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-6.4GF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-600MF_dds_8gpu.yaml
│ │ │ │ │ ├── RegNetY-8.0GF_dds_8gpu.yaml
│ │ │ │ │ └── RegNetY-800MF_dds_8gpu.yaml
│ │ │ ├── resnest.py
│ │ │ ├── resnet.py
│ │ │ └── resnext.py
│ │ ├── heads
│ │ │ ├── __init__.py
│ │ │ ├── bnneck_head.py
│ │ │ ├── build.py
│ │ │ ├── linear_head.py
│ │ │ ├── reduction_head.py
│ │ │ └── sigma_head.py
│ │ ├── losses
│ │ │ ├── __init__.py
│ │ │ ├── circle_loss.py
│ │ │ ├── cross_entroy_loss.py
│ │ │ ├── focal_loss.py
│ │ │ ├── loss_kd.py
│ │ │ ├── npair_loss.py
│ │ │ ├── smooth_ap.py
│ │ │ ├── triplet_loss.py
│ │ │ └── utils.py
│ │ └── meta_arch
│ │ │ ├── __init__.py
│ │ │ ├── baseline.py
│ │ │ ├── build.py
│ │ │ ├── iresnet.py
│ │ │ └── mgn.py
│ ├── solver
│ │ ├── __init__.py
│ │ ├── build.py
│ │ ├── lr_scheduler.py
│ │ └── optim
│ │ │ ├── __init__.py
│ │ │ ├── adam.py
│ │ │ ├── lamb.py
│ │ │ ├── sgd.py
│ │ │ └── swa.py
│ └── utils
│ │ ├── __init__.py
│ │ ├── checkpoint.py
│ │ ├── cluster_utils.py
│ │ ├── collect_env.py
│ │ ├── comm.py
│ │ ├── env.py
│ │ ├── events.py
│ │ ├── file_io.py
│ │ ├── history_buffer.py
│ │ ├── logger.py
│ │ ├── precision_bn.py
│ │ ├── registry.py
│ │ ├── summary.py
│ │ ├── timer.py
│ │ ├── visualizer.py
│ │ └── weight_init.py
├── projects
│ ├── Cross-domain-reid
│ │ └── README.md
│ ├── CrowdReID
│ ├── DistillReID
│ │ ├── README.md
│ │ ├── configs-bagtricks-ibn-dukemtmcreid
│ │ │ ├── KD-bot101ibn-bot18.yml
│ │ │ ├── KD-bot101ibn-bot18ibn.yml
│ │ │ ├── KD-bot101ibn-bot34.yml
│ │ │ ├── KD-bot101ibn-bot34ibn.yml
│ │ │ ├── KD-bot101ibn-bot50.yml
│ │ │ ├── KD-bot101ibn-bot50ibn.yml
│ │ │ ├── KD-bot34ibn-bot18ibn.yml
│ │ │ ├── KD-bot50-bot18.yml
│ │ │ ├── KD-bot50ibn-bot18ibn.yml
│ │ │ ├── KD-bot50ibn-bot34ibn.yml
│ │ │ ├── bagtricks_R101-ibn.yml
│ │ │ ├── bagtricks_R18-ibn.yml
│ │ │ ├── bagtricks_R34-ibn.yml
│ │ │ └── bagtricks_R50-ibn.yml
│ │ ├── configs-bagtricks-ibn-market1501
│ │ │ ├── KD-bot101ibn-bot18.yml
│ │ │ ├── KD-bot101ibn-bot18ibn.yml
│ │ │ ├── KD-bot101ibn-bot34.yml
│ │ │ ├── KD-bot101ibn-bot34ibn.yml
│ │ │ ├── KD-bot101ibn-bot50.yml
│ │ │ ├── KD-bot101ibn-bot50ibn.yml
│ │ │ ├── KD-bot34ibn-bot18ibn.yml
│ │ │ ├── KD-bot50-bot18.yml
│ │ │ ├── KD-bot50ibn-bot18ibn.yml
│ │ │ ├── KD-bot50ibn-bot34ibn.yml
│ │ │ ├── bagtricks_R101-ibn.yml
│ │ │ ├── bagtricks_R18-ibn.yml
│ │ │ ├── bagtricks_R34-ibn.yml
│ │ │ └── bagtricks_R50-ibn.yml
│ │ ├── configs-bagtricks-ibn-msmt17
│ │ │ ├── KD-bot101ibn-bot18.yml
│ │ │ ├── KD-bot101ibn-bot18ibn.yml
│ │ │ ├── KD-bot101ibn-bot34.yml
│ │ │ ├── KD-bot101ibn-bot34ibn.yml
│ │ │ ├── KD-bot101ibn-bot50.yml
│ │ │ ├── KD-bot101ibn-bot50ibn.yml
│ │ │ ├── KD-bot34ibn-bot18ibn.yml
│ │ │ ├── KD-bot50-bot18.yml
│ │ │ ├── KD-bot50ibn-bot18ibn.yml
│ │ │ ├── KD-bot50ibn-bot34ibn.yml
│ │ │ ├── bagtricks_R101-ibn.yml
│ │ │ ├── bagtricks_R18-ibn.yml
│ │ │ ├── bagtricks_R34-ibn.yml
│ │ │ └── bagtricks_R50-ibn.yml
│ │ ├── configs-sbs-ibn-dukemtmcreid
│ │ │ ├── KD-bot50-bot18-uncertainty.yml
│ │ │ ├── KD-bot50-bot18.yml
│ │ │ ├── KD-sbs101ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs101ibn-sbs34ibn.yml
│ │ │ ├── KD-sbs101ibn-sbs50ibn.yml
│ │ │ ├── KD-sbs34ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs50ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs50ibn-sbs34ibn.yml
│ │ │ ├── sbs_R101-ibn.yml
│ │ │ ├── sbs_R18-ibn.yml
│ │ │ ├── sbs_R34-ibn.yml
│ │ │ └── sbs_R50-ibn.yml
│ │ ├── configs-sbs-ibn-market1501
│ │ │ ├── KD-bot50-bot18-uncertainty.yml
│ │ │ ├── KD-bot50-bot18.yml
│ │ │ ├── KD-sbs101ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs101ibn-sbs34ibn.yml
│ │ │ ├── KD-sbs101ibn-sbs50ibn.yml
│ │ │ ├── KD-sbs34ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs50ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs50ibn-sbs34ibn.yml
│ │ │ ├── sbs_R101-ibn.yml
│ │ │ ├── sbs_R18-ibn.yml
│ │ │ ├── sbs_R34-ibn.yml
│ │ │ └── sbs_R50-ibn.yml
│ │ ├── configs-sbs-ibn-msmt17
│ │ │ ├── KD-bot50-bot18-uncertainty.yml
│ │ │ ├── KD-bot50-bot18.yml
│ │ │ ├── KD-sbs101ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs101ibn-sbs34ibn.yml
│ │ │ ├── KD-sbs101ibn-sbs50ibn.yml
│ │ │ ├── KD-sbs34ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs50ibn-sbs18ibn.yml
│ │ │ ├── KD-sbs50ibn-sbs34ibn.yml
│ │ │ ├── sbs_R101-ibn.yml
│ │ │ ├── sbs_R18-ibn.yml
│ │ │ ├── sbs_R34-ibn.yml
│ │ │ └── sbs_R50-ibn.yml
│ │ ├── kdreid
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── kd_trainer.py
│ │ │ ├── loss_kd.py
│ │ │ └── modeling
│ │ │ │ ├── __init__.py
│ │ │ │ ├── backbones
│ │ │ │ ├── __init__.py
│ │ │ │ └── shufflenetv2
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── blocks.py
│ │ │ │ │ └── network.py
│ │ │ │ └── sigma.py
│ │ ├── run_bagtricks.sh
│ │ └── train_net.py
│ ├── HAA
│ │ └── Readme.md
│ ├── NAIC
│ │ └── dataset_analysis.py
│ ├── PartialReID
│ │ ├── README.md
│ │ ├── configs
│ │ │ └── partial_market.yml
│ │ ├── partialreid
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── dsr_distance.py
│ │ │ ├── dsr_evaluation.py
│ │ │ ├── dsr_head.py
│ │ │ ├── partial_dataset.py
│ │ │ └── partialbaseline.py
│ │ └── train_net.py
│ └── README.md
├── start.sh
├── start_docker.sh
├── tests
│ ├── __init__.py
│ ├── dataset_test.py
│ ├── feature_align.py
│ ├── interp_test.py
│ ├── lr_scheduler_test.py
│ ├── model_test.py
│ └── sampler_test.py
└── tools
│ ├── NAIC_train.txt
│ ├── NAIC_train_val.txt
│ ├── NAIC_val_gallery.txt
│ ├── NAIC_val_query.txt
│ ├── crop_body.py
│ ├── deploy
│ ├── Caffe
│ │ ├── ReadMe.md
│ │ ├── __init__.py
│ │ ├── caffe.proto
│ │ ├── caffe_lmdb.py
│ │ ├── caffe_net.py
│ │ ├── caffe_pb2.py
│ │ ├── layer_param.py
│ │ └── net.py
│ ├── README.md
│ ├── caffe_export.py
│ ├── caffe_inference.py
│ ├── onnx_export.py
│ ├── onnx_inference.py
│ ├── pytorch_to_caffe.py
│ ├── run_export.sh
│ ├── trt_export.py
│ └── trt_inference.py
│ ├── ensemble.py
│ ├── mot17_test.log
│ ├── mot17_train.log
│ ├── split_train_eval.py
│ └── train_net.py
├── images
└── framework.png
├── model_summary.py
├── models
├── EdgeTransformer.py
├── StrictSimpleCaseTracker.py
├── TemporalEncoder.py
├── TranSTAM.py
├── TranSTAMCal.py
├── __init__.py
├── help.py
├── inference.py
├── loss.py
├── model_factory.py
└── utils.py
├── proto
├── __init__.py
├── common.proto
├── common_pb2.py
├── detection_results.proto
├── detection_results_pb2.py
├── online_tracking_results.proto
└── online_tracking_results_pb2.py
├── scripts
├── ReID_feature_extraction.py
├── __init__.py
├── ablation.sh
├── build_3folder_cross_dataset.sh
├── build_train_dataset.sh
├── convert_pb_to_json.py
├── convert_pb_to_txt.py
├── convert_txt_to_json.py
├── eval_motchallenge.py
├── inference_with_trained_model.sh
├── match_det_and_gt_bboxes_app_dim_generic.py
├── post_process_trajectory.py
├── reduce_pb_reid_dim_by_pca.py
├── train.sh
└── train_3folder_and_evaluation.sh
├── test.py
├── train.py
└── utils
├── __init__.py
├── matcher.py
├── metrics.py
└── misc.py
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/TransSTAM.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/datasets/LRU.py:
--------------------------------------------------------------------------------
1 |
2 | class DoubleDirNode:
3 | def __init__(self, key=0, value=0):
4 | self.key = key
5 | self.value = value
6 | self.pre = None
7 | self.next = None
8 |
9 |
10 | class LRUCache:
11 | def __init__(self, capacity: int):
12 | self.cache = {}
13 | self.capacity = capacity
14 | self.head = DoubleDirNode()
15 | self.tail = DoubleDirNode()
16 | self.head.next = self.tail
17 | self.tail.pre = self.head
18 |
19 | def get(self, key):
20 | if self.cache.get(key):
21 | self.moveToHead(self.cache[key])
22 | return self.cache[key].value
23 | else:
24 | return None
25 |
26 | def put(self, key, value) -> None:
27 | if self.cache.get(key):
28 | self.moveToHead(self.cache[key])
29 | self.cache[key].value = value
30 | else:
31 | if self.capacity == len(self.cache):
32 | new_node = DoubleDirNode(key, value)
33 | removed = self.removeTailNode()
34 | self.cache.pop(removed.key)
35 | self.AddToHead(new_node)
36 | self.cache[key] = new_node
37 | else:
38 | new_node = DoubleDirNode(key, value)
39 | self.AddToHead(new_node)
40 | self.cache[key] = new_node
41 |
42 | def AddToHead(self, node):
43 | node.next = self.head.next
44 | node.pre = self.head
45 | self.head.next.pre = node
46 | self.head.next = node
47 |
48 | def moveToHead(self, node):
49 | self.removeNode(node)
50 | self.AddToHead(node)
51 |
52 | def removeNode(self, node):
53 | node.pre.next = node.next
54 | node.next.pre = node.pre
55 |
56 | def removeTailNode(self):
57 | removed_node = self.tail.pre
58 | self.removeNode(removed_node)
59 | return removed_node
60 |
--------------------------------------------------------------------------------
/datasets/__init__.py:
--------------------------------------------------------------------------------
1 | from .samplers import Sampler
--------------------------------------------------------------------------------
/fast-reid/configs/Base-bagtricks.yml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | META_ARCHITECTURE: "Baseline"
3 |
4 | BACKBONE:
5 | NAME: "build_resnet_backbone"
6 | NORM: "BN"
7 | DEPTH: "50x"
8 | LAST_STRIDE: 1
9 | WITH_IBN: False
10 | PRETRAIN: True
11 |
12 | HEADS:
13 | NAME: "BNneckHead"
14 | NORM: "BN"
15 | POOL_LAYER: "avgpool"
16 | NECK_FEAT: "before"
17 | CLS_LAYER: "linear"
18 |
19 | LOSSES:
20 | NAME: ("CrossEntropyLoss", "TripletLoss",)
21 |
22 | CE:
23 | EPSILON: 0.1
24 | SCALE: 1.
25 |
26 | TRI:
27 | MARGIN: 0.3
28 | HARD_MINING: True
29 | NORM_FEAT: False
30 | SCALE: 1.
31 |
32 | INPUT:
33 | SIZE_TRAIN: [256, 128]
34 | SIZE_TEST: [256, 128]
35 | REA:
36 | ENABLED: True
37 | PROB: 0.5
38 | MEAN: [123.675, 116.28, 103.53]
39 | DO_PAD: True
40 |
41 | DATALOADER:
42 | PK_SAMPLER: True
43 | NAIVE_WAY: True
44 | NUM_INSTANCE: 4
45 | NUM_WORKERS: 8
46 |
47 | SOLVER:
48 | OPT: "Adam"
49 | MAX_ITER: 120
50 | BASE_LR: 0.00035
51 | BIAS_LR_FACTOR: 2.
52 | WEIGHT_DECAY: 0.0005
53 | WEIGHT_DECAY_BIAS: 0.0005
54 | IMS_PER_BATCH: 64
55 |
56 | SCHED: "WarmupMultiStepLR"
57 | STEPS: [40, 90]
58 | GAMMA: 0.1
59 |
60 | WARMUP_FACTOR: 0.01
61 | WARMUP_ITERS: 10
62 |
63 | CHECKPOINT_PERIOD: 60
64 |
65 | TEST:
66 | EVAL_PERIOD: 30
67 | IMS_PER_BATCH: 128
68 |
69 | CUDNN_BENCHMARK: True
70 |
71 |
--------------------------------------------------------------------------------
/fast-reid/configs/MOT-Strongerbaseline.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "Base-bagtricks.yml"
2 |
3 | MODEL:
4 | WEIGHTS: "/root/transtam/data/model_weights/reid_model_wo_MOT17_traindata.pth"
5 | FREEZE_LAYERS: ["backbone"]
6 | DEVICE: "cuda:3"
7 |
8 | BACKBONE:
9 | WITH_NL: True
10 | WITH_IBN: True
11 | NORM: "syncBN"
12 | PRETRAIN: False
13 | WITH_SE: False
14 |
15 | HEADS:
16 | NECK_FEAT: "after"
17 | POOL_LAYER: "gempool"
18 | CLS_LAYER: "circleSoftmax"
19 | # SCALE: 64
20 | MARGIN: 0.35
21 |
22 | # HEADS:
23 | # NAME: "ReductionHead"
24 | # IN_FEAT: 2048
25 | # REDUCTION_DIM: 256
26 | # POOL_LAYER: "gempool"
27 | # CLS_LAYER: "circleSoftmax"
28 | # MARGIN: 0.15
29 | # SCALE: 128
30 | LOSSES:
31 | NAME: ("CrossEntropyLoss", "TripletLoss",)
32 | CE:
33 | EPSILON: 0.1
34 | SCALE: 1.0
35 | TRI:
36 | MARGIN: 0.0
37 | HARD_MINING: True
38 | NORM_FEAT: False
39 | SCALE: 1.0
40 | DATASETS:
41 | ROOT: "/ssd/zphe/data/reid/MOT17_reid"
42 | NAMES: ("MOT20",)
43 | TESTS: ("MOT17",)
44 |
45 | INPUT:
46 | SIZE_TRAIN: [384, 128]
47 | SIZE_TEST: [384, 128]
48 | DO_AUTOAUG: True
49 |
50 | DATALOADER:
51 | NUM_INSTANCE: 16
52 |
53 | SOLVER:
54 | OPT: "Adam"
55 | MAX_ITER: 120
56 | BASE_LR: 0.00035
57 | BIAS_LR_FACTOR: 1.
58 | WEIGHT_DECAY: 0.0005
59 | WEIGHT_DECAY_BIAS: 0.0005
60 | IMS_PER_BATCH: 128
61 |
62 | SCHED: "WarmupCosineAnnealingLR"
63 | DELAY_ITERS: 30
64 | ETA_MIN_LR: 0.00000077
65 |
66 | WARMUP_FACTOR: 0.01
67 | WARMUP_ITERS: 10
68 | FREEZE_ITERS: 10
69 | CHECKPOINT_PERIOD: 2
70 | TEST:
71 | EVAL_PERIOD: 2
72 | EVAL_INIT: True
73 | IMS_PER_BATCH: 128
74 | ROC_ENABLED: True
75 |
76 | CUDNN_BENCHMARK: True
77 | OUTPUT_DIR: "./logs/MOT20"
78 |
--------------------------------------------------------------------------------
/fast-reid/demo/README.md:
--------------------------------------------------------------------------------
1 | # FastReID Demo
2 |
3 | We provide a command line tool to run a simple demo of builtin models.
4 |
5 | You can run this command to get cosine similarites between different images
6 |
7 | ```bash
8 | cd demo/
9 | sh run_demo.sh
10 | ```
--------------------------------------------------------------------------------
/fast-reid/demo/plot_roc_with_pickle.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import matplotlib.pyplot as plt
8 | import sys
9 |
10 | sys.path.append('.')
11 | from fastreid.utils.visualizer import Visualizer
12 |
13 | if __name__ == "__main__":
14 | baseline_res = Visualizer.load_roc_info("logs/duke_vis/roc_info.pickle")
15 | mgn_res = Visualizer.load_roc_info("logs/mgn_duke_vis/roc_info.pickle")
16 |
17 | fig = Visualizer.plot_roc_curve(baseline_res['fpr'], baseline_res['tpr'], name='baseline')
18 | Visualizer.plot_roc_curve(mgn_res['fpr'], mgn_res['tpr'], name='mgn', fig=fig)
19 | plt.savefig('roc.jpg')
20 |
21 | fig = Visualizer.plot_distribution(baseline_res['pos'], baseline_res['neg'], name='baseline')
22 | Visualizer.plot_distribution(mgn_res['pos'], mgn_res['neg'], name='mgn', fig=fig)
23 | plt.savefig('dist.jpg')
24 |
--------------------------------------------------------------------------------
/fast-reid/demo/run_bjz.sh:
--------------------------------------------------------------------------------
1 | python demo.py --config-file ../projects/bjzProject/logs/bjz/R50_512dim_circle_bjz_0618_8x3/config.yaml \
2 | --input \
3 | "/home/liaoxingyu2/lxy/logs/badcase/seed.jpg" \
4 | "/home/liaoxingyu2/lxy/logs/badcase/leaf_0.4883.jpg" \
5 | "/home/liaoxingyu2/lxy/logs/badcase/leaf_0.467.jpg" \
6 | --output logs/R50_256x128_pytorch_feat_output \
7 | --opts MODEL.WEIGHTS ../projects/bjzProject/logs/bjz/R50_512dim_circle_bjz_0618_8x32/model_final.pth \
8 | MODEL.DEVICE "cuda: 2"
9 |
10 |
--------------------------------------------------------------------------------
/fast-reid/demo/run_demo.sh:
--------------------------------------------------------------------------------
1 | python demo/visualize_result.py \
2 | --config-file config/NAIC/sbs_R50-cd.yaml \
3 | --parallel \
4 | --vis-label \
5 | --dataset-name 'NAIC' \
6 | --output logs/mgn_duke_vis \
7 | --opts MODEL.WEIGHTS logs/naic/sbs_R50_cd/model_partial.pth
8 |
--------------------------------------------------------------------------------
/fast-reid/demo/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/fast-reid/demo/test.png
--------------------------------------------------------------------------------
/fast-reid/fastreid/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 |
8 | __version__ = "0.1.0"
--------------------------------------------------------------------------------
/fast-reid/fastreid/config/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: l1aoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .config import CfgNode, get_cfg
8 | from .defaults import _C as cfg
9 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: sherlock
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .build import build_reid_train_loader, build_reid_test_loader
8 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/common.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import torch
8 | from torch.utils.data import Dataset
9 |
10 | from .data_utils import read_image
11 |
12 |
13 | class CommDataset(Dataset):
14 | """Image Person ReID Dataset"""
15 |
16 | def __init__(self, img_items, transform=None, relabel=True):
17 | self.img_items = img_items
18 | self.transform = transform
19 | self.relabel = relabel
20 |
21 | self.pid_dict = {}
22 | if self.relabel:
23 | pids = list()
24 | for i, item in enumerate(img_items):
25 | if item[1] in pids: continue
26 | pids.append(item[1])
27 | self.pids = pids
28 | self.pid_dict = dict([(p, i) for i, p in enumerate(self.pids)])
29 |
30 | def __len__(self):
31 | return len(self.img_items)
32 |
33 | def __getitem__(self, index):
34 | img_path, pid, camid = self.img_items[index]
35 | img = read_image(img_path)
36 | if self.transform is not None: img = self.transform(img)
37 | if self.relabel: pid = self.pid_dict[pid]
38 | return {
39 | "images": img,
40 | "targets": pid,
41 | "camid": camid,
42 | "img_path": img_path.split('/')[-1]
43 | }
44 |
45 | @property
46 | def num_classes(self):
47 | return len(self.pids)
48 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/data_utils.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 | import numpy as np
7 | from PIL import Image, ImageOps
8 | import cv2
9 | import numpy as np
10 |
11 | from fastreid.utils.file_io import PathManager
12 |
13 |
14 | def read_image(file_name, format=None):
15 | """
16 | Read an image into the given format.
17 | Will apply rotation and flipping if the image has such exif information.
18 | Args:
19 | file_name (str): image file path
20 | format (str): one of the supported image modes in PIL, or "BGR"
21 | Returns:
22 | image (np.ndarray): an HWC image
23 | """
24 | with PathManager.open(file_name, "rb") as f:
25 | image = Image.open(f)
26 |
27 | # capture and ignore this bug: https://github.com/python-pillow/Pillow/issues/3973
28 | try:
29 | image = ImageOps.exif_transpose(image)
30 | except Exception:
31 | pass
32 |
33 | if format is not None:
34 | # PIL only supports RGB, so convert to RGB and flip channels over below
35 | conversion_format = format
36 | if format == "BGR":
37 | conversion_format = "RGB"
38 | image = image.convert(conversion_format)
39 | image = np.asarray(image)
40 | if format == "BGR":
41 | # flip channels if needed
42 | image = image[:, :, ::-1]
43 | # PIL squeezes out the channel dimension for "L", so make it HWC
44 | if format == "L":
45 | image = np.expand_dims(image, -1)
46 | # image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
47 | # image = np.tile(image[..., np.newaxis], [1, 1, 3])
48 | image = Image.fromarray(image)
49 | return image
50 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/datasets/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from ...utils.registry import Registry
8 |
9 | DATASET_REGISTRY = Registry("DATASET")
10 | DATASET_REGISTRY.__doc__ = """
11 | Registry for datasets
12 | It must returns an instance of :class:`Backbone`.
13 | """
14 |
15 | from .cuhk03 import CUHK03
16 | from .dukemtmcreid import DukeMTMC
17 | from .market1501 import Market1501
18 | from .msmt17 import MSMT17
19 | from .veri import VeRi
20 | from .vehicleid import VehicleID, SmallVehicleID, MediumVehicleID, LargeVehicleID
21 | from .veriwild import VeRiWild, SmallVeRiWild, MediumVeRiWild, LargeVeRiWild
22 | from .naic import NAIC
23 | from .reid2019 import REID2019
24 | from .mot17 import MOT17
25 | from .mot20 import MOT20
26 | from .product10k import Product10k
27 |
28 | __all__ = [k for k in globals().keys() if "builtin" not in k and not k.startswith("_")]
29 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/datasets/mot17.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: He Zhangping
4 | @contact: zphe@aibee.cn
5 | """
6 |
7 | import glob
8 | import os
9 | import os.path as osp
10 | import re
11 | import random
12 | import warnings
13 |
14 | from .bases import ImageDataset
15 | from ..datasets import DATASET_REGISTRY
16 |
17 |
18 | @DATASET_REGISTRY.register()
19 | class MOT17(ImageDataset):
20 | dataset_name = "MOT17"
21 |
22 | def __init__(self, root='/ssd/zphe/data/reid/MOT17_reid', **kwargs):
23 | self.root = root
24 | self.data_dir = root
25 |
26 | self.train_dir = osp.join(self.data_dir, 'train')
27 | self.test_dir = osp.join(self.data_dir, 'test')
28 |
29 | required_files = [
30 | self.train_dir,
31 | self.test_dir,
32 | ]
33 | self.check_before_run(required_files)
34 |
35 | train = self.process_dir(self.train_dir, train_or_val='train')
36 | query, gallery = self.process_dir(self.test_dir, train_or_val='test')
37 | super(MOT17, self).__init__(train, query, gallery, **kwargs)
38 |
39 | def process_dir(self, dir_path, train_or_val='train'):
40 | if train_or_val == 'train':
41 | train = []
42 | total_num = 0
43 | for pid in os.listdir(dir_path):
44 | if not osp.isdir(osp.join(dir_path, pid)):
45 | continue
46 | imgs = glob.glob(osp.join(dir_path, pid, '*.jpg'))
47 | for img in imgs:
48 | total_num += 1
49 | cam_id = total_num
50 | train.append([img, str(pid), cam_id])
51 | return train
52 | else:
53 | query = []
54 | gallery = []
55 | total_num = 0
56 | for pid in os.listdir(dir_path):
57 | if not osp.isdir(osp.join(dir_path, pid)):
58 | continue
59 | imgs = glob.glob(osp.join(dir_path, pid, '*.jpg'))
60 | num = len(imgs)
61 | random.shuffle(imgs)
62 | for idx, img in enumerate(imgs):
63 | total_num += 1
64 | cam_id = total_num
65 | if idx < (num//2):
66 | query.append([img, str(pid), cam_id])
67 | else:
68 | gallery.append([img, str(pid), cam_id])
69 | return query, gallery
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/datasets/mot20.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: He Zhangping
4 | @contact: zphe@aibee.cn
5 | """
6 |
7 | import glob
8 | import os
9 | import os.path as osp
10 | import re
11 | import random
12 | import warnings
13 |
14 | from .bases import ImageDataset
15 | from ..datasets import DATASET_REGISTRY
16 |
17 |
18 | @DATASET_REGISTRY.register()
19 | class MOT20(ImageDataset):
20 | dataset_name = "MOT17"
21 |
22 | def __init__(self, root='/ssd/zphe/data/reid/MOT20_reid', **kwargs):
23 | self.root = root
24 | self.data_dir = root
25 |
26 | self.train_dir = osp.join(self.data_dir, 'train')
27 | # self.test_dir = osp.join(self.data_dir, 'test')
28 |
29 | required_files = [
30 | self.train_dir
31 | ]
32 | self.check_before_run(required_files)
33 |
34 | train = self.process_dir(self.train_dir, train_or_val='train')
35 | # query, gallery = self.process_dir(self.test_dir, train_or_val='test')
36 | query, gallery = [], []
37 | super(MOT20, self).__init__(train, query, gallery, **kwargs)
38 |
39 | def process_dir(self, dir_path, train_or_val='train'):
40 | if train_or_val == 'train':
41 | train = []
42 | total_num = 0
43 | for pid in os.listdir(dir_path):
44 | if not osp.isdir(osp.join(dir_path, pid)):
45 | continue
46 | imgs = glob.glob(osp.join(dir_path, pid, '*.jpg'))
47 | for img in imgs:
48 | total_num += 1
49 | cam_id = total_num
50 | train.append([img, str(pid), cam_id])
51 | return train
52 | else:
53 | query = []
54 | gallery = []
55 | total_num = 0
56 | for pid in os.listdir(dir_path):
57 | if not osp.isdir(osp.join(dir_path, pid)):
58 | continue
59 | imgs = glob.glob(osp.join(dir_path, pid, '*.jpg'))
60 | num = len(imgs)
61 | random.shuffle(imgs)
62 | for idx, img in enumerate(imgs):
63 | total_num += 1
64 | cam_id = total_num
65 | if idx < (num//2):
66 | query.append([img, str(pid), cam_id])
67 | else:
68 | gallery.append([img, str(pid), cam_id])
69 | return query, gallery
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/datasets/reid2019.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: sherlock
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import glob
8 | import os
9 | import os.path as osp
10 | import re
11 | import warnings
12 |
13 | from .bases import ImageDataset
14 | from ..datasets import DATASET_REGISTRY
15 |
16 |
17 | @DATASET_REGISTRY.register()
18 | class REID2019(ImageDataset):
19 | _junk_pids = [0, -1]
20 | data_dir = 'NAIC/1/A'
21 | dataset_name = "REID2019"
22 | def __init__(self, root='', **kwargs):
23 | self.root = root
24 | self.dataset_dir = osp.join(self.root, self.data_dir, self.dataset_name)
25 | if not osp.isdir(self.dataset_dir):
26 | warnings.warn('The current data dir:%s is not a dir.' % self.dataset_dir)
27 |
28 | self.train_dir = osp.join(self.dataset_dir)
29 | required_files = [
30 | self.train_dir,
31 | ]
32 | train = self.process_dir(self.train_dir)
33 | query = []
34 | gallery = []
35 | super(REID2019, self).__init__(train, query, gallery, **kwargs)
36 |
37 | def process_dir(self, dir_path):
38 | data = []
39 | num = 0
40 | for pid in os.listdir(dir_path):
41 | for img in glob.glob(osp.join(dir_path, pid, '*.png')):
42 | data.append([img, pid, num])
43 | num += 1
44 | return data
45 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/datasets/veri.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: Jinkai Zheng
4 | @contact: 1315673509@qq.com
5 | """
6 |
7 | import glob
8 | import os.path as osp
9 | import re
10 |
11 | from .bases import ImageDataset
12 | from ..datasets import DATASET_REGISTRY
13 |
14 |
15 | @DATASET_REGISTRY.register()
16 | class VeRi(ImageDataset):
17 | """VeRi.
18 |
19 | Reference:
20 | Liu et al. A Deep Learning based Approach for Progressive Vehicle Re-Identification. ECCV 2016.
21 |
22 | URL: ``_
23 |
24 | Dataset statistics:
25 | - identities: 775.
26 | - images: 37778 (train) + 1678 (query) + 11579 (gallery).
27 | """
28 | dataset_dir = "veri"
29 | dataset_name = "veri"
30 |
31 | def __init__(self, root='datasets', **kwargs):
32 | self.dataset_dir = osp.join(root, self.dataset_dir)
33 |
34 | self.train_dir = osp.join(self.dataset_dir, 'image_train')
35 | self.query_dir = osp.join(self.dataset_dir, 'image_query')
36 | self.gallery_dir = osp.join(self.dataset_dir, 'image_test')
37 |
38 | required_files = [
39 | self.dataset_dir,
40 | self.train_dir,
41 | self.query_dir,
42 | self.gallery_dir,
43 | ]
44 | self.check_before_run(required_files)
45 |
46 | train = self.process_dir(self.train_dir)
47 | query = self.process_dir(self.query_dir, is_train=False)
48 | gallery = self.process_dir(self.gallery_dir, is_train=False)
49 |
50 | super(VeRi, self).__init__(train, query, gallery, **kwargs)
51 |
52 | def process_dir(self, dir_path, is_train=True):
53 | img_paths = glob.glob(osp.join(dir_path, '*.jpg'))
54 | pattern = re.compile(r'([\d]+)_c(\d\d\d)')
55 |
56 | data = []
57 | for img_path in img_paths:
58 | pid, camid = map(int, pattern.search(img_path).groups())
59 | if pid == -1: continue # junk images are just ignored
60 | assert 1 <= pid <= 776
61 | assert 1 <= camid <= 20
62 | camid -= 1 # index starts from 0
63 | if is_train:
64 | pid = self.dataset_name + "_" + str(pid)
65 | data.append((img_path, pid, camid))
66 |
67 | return data
68 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/samplers/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .triplet_sampler import BalancedIdentitySampler, NaiveIdentitySampler
8 | from .data_sampler import TrainingSampler, InferenceSampler
9 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/data/transforms/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: sherlock
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 |
8 | from .build import build_transforms
9 | from .transforms import *
10 | from .autoaugment import *
11 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/engine/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 | from .train_loop import *
7 |
8 | __all__ = [k for k in globals().keys() if not k.startswith("_")]
9 |
10 |
11 | # prefer to let hooks and defaults live in separate namespaces (therefore not in __all__)
12 | # but still make them available here
13 | from .hooks import *
14 | from .defaults import *
15 | from .launch import *
16 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/evaluation/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
2 | from .evaluator import DatasetEvaluator, inference_context, inference_on_dataset
3 | from .rank import evaluate_rank
4 | from .roc import evaluate_roc
5 | from .reid_evaluation import ReidEvaluator
6 | from .testing import print_csv_format, verify_results
7 |
8 | __all__ = [k for k in globals().keys() if not k.startswith("_")]
9 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/evaluation/query_expansion.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | # based on
8 | # https://github.com/PyRetri/PyRetri/blob/master/pyretri/index/re_ranker/re_ranker_impl/query_expansion.py
9 |
10 | import numpy as np
11 | import torch
12 | import torch.nn.functional as F
13 |
14 |
15 | def aqe(query_feat: torch.tensor, gallery_feat: torch.tensor,
16 | qe_times: int = 1, qe_k: int = 10, alpha: float = 3.0):
17 | """
18 | Combining the retrieved topk nearest neighbors with the original query and doing another retrieval.
19 | c.f. https://www.robots.ox.ac.uk/~vgg/publications/papers/chum07b.pdf
20 | Args :
21 | query_feat (torch.tensor):
22 | gallery_feat (torch.tensor):
23 | qe_times (int): number of query expansion times.
24 | qe_k (int): number of the neighbors to be combined.
25 | alpha (float):
26 | """
27 | num_query = query_feat.shape[0]
28 | all_feat = torch.cat((query_feat, gallery_feat), dim=0)
29 | norm_feat = F.normalize(all_feat, p=2, dim=1)
30 |
31 | all_feat = all_feat.numpy()
32 | for i in range(qe_times):
33 | all_feat_list = []
34 | sims = torch.mm(norm_feat, norm_feat.t())
35 | sims = sims.data.cpu().numpy()
36 | for sim in sims:
37 | init_rank = np.argpartition(-sim, range(1, qe_k + 1))
38 | weights = sim[init_rank[:qe_k]].reshape((-1, 1))
39 | weights = np.power(weights, alpha)
40 | all_feat_list.append(np.mean(all_feat[init_rank[:qe_k], :] * weights, axis=0))
41 | all_feat = np.stack(all_feat_list, axis=0)
42 | norm_feat = F.normalize(torch.from_numpy(all_feat), p=2, dim=1)
43 |
44 | query_feat = torch.from_numpy(all_feat[:num_query])
45 | gallery_feat = torch.from_numpy(all_feat[num_query:])
46 | return query_feat, gallery_feat
47 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/evaluation/rank_cylib/Makefile:
--------------------------------------------------------------------------------
1 | all:
2 | python3 setup.py build_ext --inplace
3 | rm -rf build
4 | python3 test_cython.py
5 | clean:
6 | rm -rf build
7 | rm -f rank_cy.c *.so
8 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/evaluation/rank_cylib/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
--------------------------------------------------------------------------------
/fast-reid/fastreid/evaluation/rank_cylib/rank_cy.cpython-37m-x86_64-linux-gnu.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/fast-reid/fastreid/evaluation/rank_cylib/rank_cy.cpython-37m-x86_64-linux-gnu.so
--------------------------------------------------------------------------------
/fast-reid/fastreid/evaluation/rank_cylib/roc_cy.cpython-37m-x86_64-linux-gnu.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/fast-reid/fastreid/evaluation/rank_cylib/roc_cy.cpython-37m-x86_64-linux-gnu.so
--------------------------------------------------------------------------------
/fast-reid/fastreid/evaluation/rank_cylib/setup.py:
--------------------------------------------------------------------------------
1 | from distutils.core import setup
2 | from distutils.extension import Extension
3 |
4 | import numpy as np
5 | from Cython.Build import cythonize
6 |
7 |
8 | def numpy_include():
9 | try:
10 | numpy_include = np.get_include()
11 | except AttributeError:
12 | numpy_include = np.get_numpy_include()
13 | return numpy_include
14 |
15 |
16 | ext_modules = [
17 | Extension(
18 | 'rank_cy',
19 | ['rank_cy.pyx'],
20 | include_dirs=[numpy_include()],
21 | ),
22 | Extension(
23 | 'roc_cy',
24 | ['roc_cy.pyx'],
25 | include_dirs=[numpy_include()],
26 | )
27 | ]
28 |
29 | setup(
30 | name='Cython-based reid evaluation code',
31 | ext_modules=cythonize(ext_modules)
32 | )
33 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .activation import *
8 | from .arc_softmax import ArcSoftmax
9 | from .circle_softmax import CircleSoftmax
10 | from .am_softmax import AMSoftmax
11 | from .batch_drop import BatchDrop
12 | from .batch_norm import *
13 | from .context_block import ContextBlock
14 | from .frn import FRN, TLU
15 | from .non_local import Non_local
16 | from .pooling import *
17 | from .se_layer import SELayer
18 | from .splat import SplAtConv2d
19 | from .cd_conv import CDConvBlock
20 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/activation.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import math
8 |
9 | import torch
10 | import torch.nn as nn
11 | import torch.nn.functional as F
12 |
13 | __all__ = [
14 | 'Mish',
15 | 'Swish',
16 | 'MemoryEfficientSwish',
17 | 'GELU']
18 |
19 |
20 | class Mish(nn.Module):
21 | def __init__(self):
22 | super().__init__()
23 |
24 | def forward(self, x):
25 | # inlining this saves 1 second per epoch (V100 GPU) vs having a temp x and then returning x(!)
26 | return x * (torch.tanh(F.softplus(x)))
27 |
28 |
29 | class Swish(nn.Module):
30 | def forward(self, x):
31 | return x * torch.sigmoid(x)
32 |
33 |
34 | class SwishImplementation(torch.autograd.Function):
35 | @staticmethod
36 | def forward(ctx, i):
37 | result = i * torch.sigmoid(i)
38 | ctx.save_for_backward(i)
39 | return result
40 |
41 | @staticmethod
42 | def backward(ctx, grad_output):
43 | i = ctx.saved_variables[0]
44 | sigmoid_i = torch.sigmoid(i)
45 | return grad_output * (sigmoid_i * (1 + i * (1 - sigmoid_i)))
46 |
47 |
48 | class MemoryEfficientSwish(nn.Module):
49 | def forward(self, x):
50 | return SwishImplementation.apply(x)
51 |
52 |
53 | class GELU(nn.Module):
54 | """
55 | Paper Section 3.4, last paragraph notice that BERT used the GELU instead of RELU
56 | """
57 |
58 | def forward(self, x):
59 | return 0.5 * x * (1 + torch.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * torch.pow(x, 3))))
60 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/am_softmax.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import torch
8 | from torch import nn
9 | import torch.nn.functional as F
10 | from torch.nn import Parameter
11 |
12 |
13 | class AMSoftmax(nn.Module):
14 | r"""Implement of large margin cosine distance:
15 | Args:
16 | in_feat: size of each input sample
17 | num_classes: size of each output sample
18 | """
19 |
20 | def __init__(self, cfg, in_feat, num_classes):
21 | super().__init__()
22 | self.in_features = in_feat
23 | self._num_classes = num_classes
24 | self._s = cfg.MODEL.HEADS.SCALE
25 | self._m = cfg.MODEL.HEADS.MARGIN
26 | self.weight = Parameter(torch.Tensor(num_classes, in_feat))
27 | nn.init.xavier_uniform_(self.weight)
28 |
29 | def forward(self, features, targets):
30 | # --------------------------- cos(theta) & phi(theta) ---------------------------
31 | cosine = F.linear(F.normalize(features), F.normalize(self.weight))
32 | phi = cosine - self._m
33 | # --------------------------- convert label to one-hot ---------------------------
34 | targets = F.one_hot(targets, num_classes=self._num_classes)
35 | output = (targets * phi) + ((1.0 - targets) * cosine)
36 | output *= self._s
37 |
38 | return output
39 |
40 | def extra_repr(self):
41 | return 'in_features={}, num_classes={}, scale={}, margin={}'.format(
42 | self.in_feat, self._num_classes, self._s, self._m
43 | )
44 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/arc_softmax.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import math
8 |
9 | import torch
10 | import torch.nn as nn
11 | import torch.nn.functional as F
12 | from torch.nn import Parameter
13 |
14 |
15 | class ArcSoftmax(nn.Module):
16 | def __init__(self, cfg, in_feat, num_classes):
17 | super().__init__()
18 | self.in_feat = in_feat
19 | self._num_classes = num_classes
20 | self._s = cfg.MODEL.HEADS.SCALE
21 | self._m = cfg.MODEL.HEADS.MARGIN
22 |
23 | self.cos_m = math.cos(self._m)
24 | self.sin_m = math.sin(self._m)
25 | self.threshold = math.cos(math.pi - self._m)
26 | self.mm = math.sin(math.pi - self._m) * self._m
27 |
28 | self.weight = Parameter(torch.Tensor(num_classes, in_feat))
29 | nn.init.xavier_uniform_(self.weight)
30 | self.register_buffer('t', torch.zeros(1))
31 |
32 | def forward(self, features, targets):
33 | # get cos(theta)
34 | cos_theta = F.linear(F.normalize(features), F.normalize(self.weight))
35 | cos_theta = cos_theta.clamp(-1, 1) # for numerical stability
36 |
37 | target_logit = cos_theta[torch.arange(0, features.size(0)), targets].view(-1, 1)
38 |
39 | sin_theta = torch.sqrt(1.0 - torch.pow(target_logit, 2))
40 | cos_theta_m = target_logit * self.cos_m - sin_theta * self.sin_m # cos(target+margin)
41 | mask = cos_theta > cos_theta_m
42 | final_target_logit = torch.where(target_logit > self.threshold, cos_theta_m, target_logit - self.mm)
43 |
44 | hard_example = cos_theta[mask]
45 | with torch.no_grad():
46 | self.t = target_logit.mean() * 0.01 + (1 - 0.01) * self.t
47 | cos_theta[mask] = hard_example * (self.t + hard_example)
48 | cos_theta.scatter_(1, targets.view(-1, 1).long(), final_target_logit)
49 | pred_class_logits = cos_theta * self._s
50 | return pred_class_logits
51 |
52 | def extra_repr(self):
53 | return 'in_features={}, num_classes={}, scale={}, margin={}'.format(
54 | self.in_feat, self._num_classes, self._s, self._m
55 | )
56 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/batch_drop.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import random
8 |
9 | from torch import nn
10 |
11 |
12 | class BatchDrop(nn.Module):
13 | """ref: https://github.com/daizuozhuo/batch-dropblock-network/blob/master/models/networks.py
14 | batch drop mask
15 | """
16 |
17 | def __init__(self, h_ratio, w_ratio):
18 | super(BatchDrop, self).__init__()
19 | self.h_ratio = h_ratio
20 | self.w_ratio = w_ratio
21 |
22 | def forward(self, x):
23 | if self.training:
24 | h, w = x.size()[-2:]
25 | rh = round(self.h_ratio * h)
26 | rw = round(self.w_ratio * w)
27 | sx = random.randint(0, h - rh)
28 | sy = random.randint(0, w - rw)
29 | mask = x.new_ones(x.size())
30 | mask[:, :, sx:sx + rh, sy:sy + rw] = 0
31 | x = x * mask
32 | return x
33 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/circle_softmax.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import math
8 |
9 | import torch
10 | import torch.nn as nn
11 | import torch.nn.functional as F
12 | from torch.nn import Parameter
13 |
14 |
15 | class CircleSoftmax(nn.Module):
16 | def __init__(self, cfg, in_feat, num_classes):
17 | super().__init__()
18 | self.in_feat = in_feat
19 | self._num_classes = num_classes
20 | self._s = cfg.MODEL.HEADS.SCALE
21 | self._m = cfg.MODEL.HEADS.MARGIN
22 |
23 | self.weight = Parameter(torch.Tensor(num_classes, in_feat))
24 | nn.init.kaiming_uniform_(self.weight, a=math.sqrt(5))
25 |
26 | def forward(self, features, targets):
27 | sim_mat = F.linear(F.normalize(features), F.normalize(self.weight))
28 | alpha_p = torch.clamp_min(-sim_mat.detach() + 1 + self._m, min=0.)
29 | alpha_n = torch.clamp_min(sim_mat.detach() + self._m, min=0.)
30 | delta_p = 1 - self._m
31 | delta_n = self._m
32 |
33 | s_p = self._s * alpha_p * (sim_mat - delta_p)
34 | s_n = self._s * alpha_n * (sim_mat - delta_n)
35 |
36 | targets = F.one_hot(targets, num_classes=self._num_classes)
37 |
38 | pred_class_logits = targets * s_p + (1.0 - targets) * s_n
39 |
40 | return pred_class_logits
41 |
42 | def extra_repr(self):
43 | return 'in_features={}, num_classes={}, scale={}, margin={}'.format(
44 | self.in_feat, self._num_classes, self._s, self._m
45 | )
46 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/non_local.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 |
3 |
4 | import torch
5 | from torch import nn
6 | from .batch_norm import get_norm
7 |
8 |
9 | class Non_local(nn.Module):
10 | def __init__(self, in_channels, bn_norm, num_splits, reduc_ratio=2):
11 | super(Non_local, self).__init__()
12 |
13 | self.in_channels = in_channels
14 | #self.inter_channels = in_channels // reduc_ratio
15 | self.inter_channels = 1
16 |
17 | self.g = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels,
18 | kernel_size=1, stride=1, padding=0)
19 |
20 | self.W = nn.Sequential(
21 | nn.Conv2d(in_channels=self.inter_channels, out_channels=self.in_channels,
22 | kernel_size=1, stride=1, padding=0),
23 | get_norm(bn_norm, self.in_channels, num_splits),
24 | )
25 | nn.init.constant_(self.W[1].weight, 0.0)
26 | nn.init.constant_(self.W[1].bias, 0.0)
27 |
28 | self.theta = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels,
29 | kernel_size=1, stride=1, padding=0)
30 |
31 | self.phi = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels,
32 | kernel_size=1, stride=1, padding=0)
33 |
34 | def forward(self, x):
35 | '''
36 | :param x: (b, t, h, w)
37 | :return x: (b, t, h, w)
38 | '''
39 | batch_size = x.size(0)
40 | g_x = self.g(x).view(batch_size, self.inter_channels, -1)
41 | g_x = g_x.permute(0, 2, 1)
42 |
43 | theta_x = self.theta(x).view(batch_size, self.inter_channels, -1)
44 | theta_x = theta_x.permute(0, 2, 1)
45 | phi_x = self.phi(x).view(batch_size, self.inter_channels, -1)
46 | f = torch.matmul(theta_x, phi_x)
47 | N = f.size(-1)
48 | f_div_C = f / N
49 |
50 | y = torch.matmul(f_div_C, g_x)
51 | y = y.permute(0, 2, 1).contiguous()
52 | y = y.view(batch_size, self.inter_channels, *x.size()[2:])
53 | W_y = self.W(y)
54 | z = W_y + x
55 | return z
56 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/layers/se_layer.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from torch import nn
8 |
9 |
10 | class SELayer(nn.Module):
11 | def __init__(self, channel, reduction=16):
12 | super(SELayer, self).__init__()
13 | self.avg_pool = nn.AdaptiveAvgPool2d(1)
14 | self.fc = nn.Sequential(
15 | nn.Linear(channel, int(channel / reduction), bias=False),
16 | nn.ReLU(inplace=True),
17 | nn.Linear(int(channel / reduction), channel, bias=False),
18 | nn.Sigmoid()
19 | )
20 |
21 | def forward(self, x):
22 | b, c, _, _ = x.size()
23 | y = self.avg_pool(x).view(b, c)
24 | y = self.fc(y).view(b, c, 1, 1)
25 | return x * y.expand_as(x)
26 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: sherlock
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .meta_arch import build_model
8 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .build import build_backbone, BACKBONE_REGISTRY
8 |
9 | from .resnet import build_resnet_backbone
10 | from .osnet import build_osnet_backbone
11 | from .resnest import build_resnest_backbone
12 | from .resnext import build_resnext_backbone
13 | from .regnet import build_regnet_backbone
14 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/build.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from ...utils.registry import Registry
8 |
9 | BACKBONE_REGISTRY = Registry("BACKBONE")
10 | BACKBONE_REGISTRY.__doc__ = """
11 | Registry for backbones, which extract feature maps from images
12 | The registered object must be a callable that accepts two arguments:
13 | 1. A :class:`detectron2.config.CfgNode`
14 | 2. A :class:`detectron2.layers.ShapeSpec`, which contains the input shape specification.
15 | It must returns an instance of :class:`Backbone`.
16 | """
17 |
18 |
19 | def build_backbone(cfg):
20 | """
21 | Build a backbone from `cfg.MODEL.BACKBONE.NAME`.
22 | Returns:
23 | an instance of :class:`Backbone`
24 | """
25 |
26 | backbone_name = cfg.MODEL.BACKBONE.NAME
27 | backbone = BACKBONE_REGISTRY.get(backbone_name)(cfg)
28 | return backbone
29 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
3 | from .regnet import build_regnet_backbone
4 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-1.6GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 18
6 | W0: 80
7 | WA: 34.01
8 | WM: 2.25
9 | GROUP_W: 24
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.8
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 1024
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 800
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-12GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 19
6 | W0: 168
7 | WA: 73.36
8 | WM: 2.37
9 | GROUP_W: 112
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.4
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 512
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 400
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-16GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 22
6 | W0: 216
7 | WA: 55.59
8 | WM: 2.1
9 | GROUP_W: 128
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.4
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 512
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 400
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-200MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 13
6 | W0: 24
7 | WA: 36.44
8 | WM: 2.49
9 | GROUP_W: 8
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.8
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 1024
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 800
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-3.2GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 25
6 | W0: 88
7 | WA: 26.31
8 | WM: 2.25
9 | GROUP_W: 48
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.4
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 512
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 400
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-32GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 23
6 | W0: 320
7 | WA: 69.86
8 | WM: 2.0
9 | GROUP_W: 168
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.2
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 256
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 200
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-4.0GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 23
6 | W0: 96
7 | WA: 38.65
8 | WM: 2.43
9 | GROUP_W: 40
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.4
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 512
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 400
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-400MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 22
6 | W0: 24
7 | WA: 24.48
8 | WM: 2.54
9 | GROUP_W: 16
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.8
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 1024
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 800
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-6.4GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 17
6 | W0: 184
7 | WA: 60.83
8 | WM: 2.07
9 | GROUP_W: 56
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.4
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 512
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 400
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-600MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 16
6 | W0: 48
7 | WA: 36.97
8 | WM: 2.24
9 | GROUP_W: 24
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.8
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 1024
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 800
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-8.0GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 23
6 | W0: 80
7 | WA: 49.56
8 | WM: 2.88
9 | GROUP_W: 120
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.4
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 512
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 400
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-800MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | DEPTH: 16
6 | W0: 56
7 | WA: 35.73
8 | WM: 2.28
9 | GROUP_W: 16
10 | OPTIM:
11 | LR_POLICY: cos
12 | BASE_LR: 0.8
13 | MAX_EPOCH: 100
14 | MOMENTUM: 0.9
15 | WEIGHT_DECAY: 5e-5
16 | WARMUP_EPOCHS: 5
17 | TRAIN:
18 | DATASET: imagenet
19 | IM_SIZE: 224
20 | BATCH_SIZE: 1024
21 | TEST:
22 | DATASET: imagenet
23 | IM_SIZE: 256
24 | BATCH_SIZE: 800
25 | NUM_GPUS: 8
26 | OUT_DIR: .
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-1.6GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 27
7 | W0: 48
8 | WA: 20.71
9 | WM: 2.65
10 | GROUP_W: 24
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.8
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 1024
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 800
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-12GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 19
7 | W0: 168
8 | WA: 73.36
9 | WM: 2.37
10 | GROUP_W: 112
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.4
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 512
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 400
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-16GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 18
7 | W0: 200
8 | WA: 106.23
9 | WM: 2.48
10 | GROUP_W: 112
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.2
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 256
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 200
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-200MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 13
7 | W0: 24
8 | WA: 36.44
9 | WM: 2.49
10 | GROUP_W: 8
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.8
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 1024
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 800
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-3.2GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 21
7 | W0: 80
8 | WA: 42.63
9 | WM: 2.66
10 | GROUP_W: 24
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.4
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 512
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 400
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-32GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 20
7 | W0: 232
8 | WA: 115.89
9 | WM: 2.53
10 | GROUP_W: 232
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.2
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 256
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 200
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-4.0GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 22
7 | W0: 96
8 | WA: 31.41
9 | WM: 2.24
10 | GROUP_W: 64
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.4
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 512
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 400
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-400MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 16
7 | W0: 48
8 | WA: 27.89
9 | WM: 2.09
10 | GROUP_W: 8
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.8
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 1024
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 800
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-6.4GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 25
7 | W0: 112
8 | WA: 33.22
9 | WM: 2.27
10 | GROUP_W: 72
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.4
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 512
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 400
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-600MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 15
7 | W0: 48
8 | WA: 32.54
9 | WM: 2.32
10 | GROUP_W: 16
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.8
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 1024
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 800
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-8.0GF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: true
6 | DEPTH: 17
7 | W0: 192
8 | WA: 76.82
9 | WM: 2.19
10 | GROUP_W: 56
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.4
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 512
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 400
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-800MF_dds_8gpu.yaml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | TYPE: regnet
3 | NUM_CLASSES: 1000
4 | REGNET:
5 | SE_ON: True
6 | DEPTH: 14
7 | W0: 56
8 | WA: 38.84
9 | WM: 2.4
10 | GROUP_W: 16
11 | OPTIM:
12 | LR_POLICY: cos
13 | BASE_LR: 0.8
14 | MAX_EPOCH: 100
15 | MOMENTUM: 0.9
16 | WEIGHT_DECAY: 5e-5
17 | WARMUP_EPOCHS: 5
18 | TRAIN:
19 | DATASET: imagenet
20 | IM_SIZE: 224
21 | BATCH_SIZE: 1024
22 | TEST:
23 | DATASET: imagenet
24 | IM_SIZE: 256
25 | BATCH_SIZE: 800
26 | NUM_GPUS: 8
27 | OUT_DIR: .
28 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/heads/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .build import REID_HEADS_REGISTRY, build_reid_heads
8 |
9 | # import all the meta_arch, so they will be registered
10 | from .linear_head import LinearHead
11 | from .bnneck_head import BNneckHead
12 | from .reduction_head import ReductionHead
13 | from .sigma_head import SigmaHead
14 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/heads/build.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from ...utils.registry import Registry
8 |
9 | REID_HEADS_REGISTRY = Registry("HEADS")
10 | REID_HEADS_REGISTRY.__doc__ = """
11 | Registry for ROI heads in a generalized R-CNN model.
12 | ROIHeads take feature maps and region proposals, and
13 | perform per-region computation.
14 | The registered object will be called with `obj(cfg, input_shape)`.
15 | The call is expected to return an :class:`ROIHeads`.
16 | """
17 |
18 |
19 | def build_reid_heads(cfg, in_feat, num_classes, pool_layer):
20 | """
21 | Build REIDHeads defined by `cfg.MODEL.REID_HEADS.NAME`.
22 | """
23 | head = cfg.MODEL.HEADS.NAME
24 | return REID_HEADS_REGISTRY.get(head)(cfg, in_feat, num_classes, pool_layer)
25 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/heads/linear_head.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from fastreid.layers import *
8 | from fastreid.utils.weight_init import weights_init_classifier
9 | from .build import REID_HEADS_REGISTRY
10 |
11 |
12 | @REID_HEADS_REGISTRY.register()
13 | class LinearHead(nn.Module):
14 | def __init__(self, cfg, in_feat, num_classes, pool_layer):
15 | super().__init__()
16 | self.pool_layer = pool_layer
17 |
18 | # identity classification layer
19 | cls_type = cfg.MODEL.HEADS.CLS_LAYER
20 | self.classifier = None
21 | if cls_type == 'linear': self.classifier = nn.Linear(in_feat, num_classes, bias=False)
22 | elif cls_type == 'arcSoftmax': self.classifier = ArcSoftmax(cfg, in_feat, num_classes)
23 | elif cls_type == 'circleSoftmax': self.classifier = CircleSoftmax(cfg, in_feat, num_classes)
24 | elif cls_type == 'amSoftmax': self.classifier = AMSoftmax(cfg, in_feat, num_classes)
25 | else:
26 | print(f"{cls_type} is invalid, please choose from "
27 | f"'linear', 'arcSoftmax', 'amSoftmax' and 'circleSoftmax'.")
28 | if self.classifier:
29 | self.classifier.apply(weights_init_classifier)
30 |
31 | def forward(self, features, targets=None, extra_feat=None):
32 | """
33 | See :class:`ReIDHeads.forward`.
34 | """
35 | global_feat = self.pool_layer(features)
36 | global_feat = global_feat.view(global_feat.size(0), -1)
37 |
38 | # Evaluation
39 | if not self.training: return {'feat': global_feat}
40 | if self.classifier:
41 | # Training
42 | try: cls_outputs = self.classifier(global_feat)
43 | except TypeError: cls_outputs = self.classifier(global_feat, targets)
44 |
45 | pred_class_logits = F.linear(global_feat, self.classifier.weight)
46 |
47 | return {'cls': cls_outputs, 'logits': pred_class_logits, 'feat': global_feat}
48 | else:
49 | return {'cls': None, 'logits': None, 'feat': global_feat}
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/losses/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: l1aoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .cross_entroy_loss import CrossEntropyLoss
8 | from .focal_loss import FocalLoss
9 | from .triplet_loss import TripletLoss
10 | from .circle_loss import CircleLoss
11 | from .npair_loss import NpairLoss
12 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/losses/circle_loss.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import torch
8 | from torch import nn
9 | import torch.nn.functional as F
10 |
11 | from fastreid.utils import comm
12 | from .utils import concat_all_gather
13 |
14 |
15 | class CircleLoss(object):
16 | def __init__(self, cfg):
17 | self._scale = cfg.MODEL.LOSSES.CIRCLE.SCALE
18 |
19 | self._m = cfg.MODEL.LOSSES.CIRCLE.MARGIN
20 | self._s = cfg.MODEL.LOSSES.CIRCLE.ALPHA
21 |
22 | def __call__(self, embedding, targets):
23 | embedding = nn.functional.normalize(embedding, dim=1)
24 |
25 | if comm.get_world_size() > 1:
26 | all_embedding = concat_all_gather(embedding)
27 | all_targets = concat_all_gather(targets)
28 | else:
29 | all_embedding = embedding
30 | all_targets = targets
31 |
32 | dist_mat = torch.matmul(embedding, all_embedding.t())
33 |
34 | N, M = dist_mat.size()
35 | is_pos = targets.view(N, 1).expand(N, M).eq(all_targets.view(M, 1).expand(M, N).t()).float()
36 |
37 | # Compute the mask which ignores the relevance score of the query to itself
38 | if M > N:
39 | identity_indx = torch.eye(N, N, device=is_pos.device)
40 | remain_indx = torch.zeros(N, M - N, device=is_pos.device)
41 | identity_indx = torch.cat((identity_indx, remain_indx), dim=1)
42 | is_pos = is_pos - identity_indx
43 | else:
44 | is_pos = is_pos - torch.eye(N, N, device=is_pos.device)
45 |
46 | is_neg = targets.view(N, 1).expand(N, M).ne(all_targets.view(M, 1).expand(M, N).t())
47 |
48 | s_p = dist_mat * is_pos
49 | s_n = dist_mat * is_neg
50 |
51 | alpha_p = torch.clamp_min(-s_p.detach() + 1 + self._m, min=0.)
52 | alpha_n = torch.clamp_min(s_n.detach() + self._m, min=0.)
53 | delta_p = 1 - self._m
54 | delta_n = self._m
55 |
56 | logit_p = - self._s * alpha_p * (s_p - delta_p)
57 | logit_n = self._s * alpha_n * (s_n - delta_n)
58 |
59 | loss = nn.functional.softplus(torch.logsumexp(logit_p, dim=1) + torch.logsumexp(logit_n, dim=1)).mean()
60 |
61 | return loss * self._scale
62 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/losses/utils.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import torch
8 |
9 |
10 | @torch.no_grad()
11 | def concat_all_gather(tensor):
12 | """
13 | Performs all_gather operation on the provided tensors.
14 | *** Warning ***: torch.distributed.all_gather has no gradient.
15 | """
16 | tensors_gather = [torch.ones_like(tensor)
17 | for _ in range(torch.distributed.get_world_size())]
18 | torch.distributed.all_gather(tensors_gather, tensor, async_op=False)
19 |
20 | output = torch.cat(tensors_gather, dim=0)
21 | return output
22 |
23 |
24 | def normalize(x, axis=-1):
25 | """Normalizing to unit length along the specified dimension.
26 | Args:
27 | x: pytorch Variable
28 | Returns:
29 | x: pytorch Variable, same shape as input
30 | """
31 | x = 1. * x / (torch.norm(x, 2, axis, keepdim=True).expand_as(x) + 1e-12)
32 | return x
33 |
34 |
35 | def euclidean_dist(x, y):
36 | m, n = x.size(0), y.size(0)
37 | xx = torch.pow(x, 2).sum(1, keepdim=True).expand(m, n)
38 | yy = torch.pow(y, 2).sum(1, keepdim=True).expand(n, m).t()
39 | dist = xx + yy
40 | dist.addmm_(x, y.t(), beta=1, alpha=-2)
41 | dist = dist.clamp(min=1e-12).sqrt() # for numerical stability
42 | return dist
43 |
44 |
45 | def cosine_dist(x, y):
46 | bs1, bs2 = x.size(0), y.size(0)
47 | frac_up = torch.matmul(x, y.transpose(0, 1))
48 | frac_down = (torch.sqrt(torch.sum(torch.pow(x, 2), 1))).view(bs1, 1).repeat(1, bs2) * \
49 | (torch.sqrt(torch.sum(torch.pow(y, 2), 1))).view(1, bs2).repeat(bs1, 1)
50 | cosine = frac_up / frac_down
51 | return 1 - cosine
52 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/meta_arch/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .build import META_ARCH_REGISTRY, build_model
8 |
9 |
10 | # import all the meta_arch, so they will be registered
11 | from .baseline import Baseline
12 | from .mgn import MGN
13 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/modeling/meta_arch/build.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 | import torch
7 |
8 | from fastreid.utils.registry import Registry
9 |
10 | META_ARCH_REGISTRY = Registry("META_ARCH") # noqa F401 isort:skip
11 | META_ARCH_REGISTRY.__doc__ = """
12 | Registry for meta-architectures, i.e. the whole model.
13 | The registered object will be called with `obj(cfg)`
14 | and expected to return a `nn.Module` object.
15 | """
16 |
17 |
18 | def build_model(cfg):
19 | """
20 | Build the whole model architecture, defined by ``cfg.MODEL.META_ARCHITECTURE``.
21 | Note that it does not load any weights from ``cfg``.
22 | """
23 | meta_arch = cfg.MODEL.META_ARCHITECTURE
24 | model = META_ARCH_REGISTRY.get(meta_arch)(cfg)
25 | model.to(torch.device(cfg.MODEL.DEVICE))
26 | return model
27 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/solver/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 |
8 | from .build import build_lr_scheduler, build_optimizer
--------------------------------------------------------------------------------
/fast-reid/fastreid/solver/build.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from . import lr_scheduler
8 | from . import optim
9 |
10 |
11 | def build_optimizer(cfg, model):
12 | params = []
13 | for key, value in model.named_parameters():
14 | if not value.requires_grad:
15 | continue
16 | lr = cfg.SOLVER.BASE_LR
17 | weight_decay = cfg.SOLVER.WEIGHT_DECAY
18 | if "heads" in key:
19 | lr *= cfg.SOLVER.HEADS_LR_FACTOR
20 | if "bias" in key:
21 | lr *= cfg.SOLVER.BIAS_LR_FACTOR
22 | weight_decay = cfg.SOLVER.WEIGHT_DECAY_BIAS
23 | params += [{"name": key, "params": [value], "lr": lr, "weight_decay": weight_decay, "freeze": False}]
24 |
25 | solver_opt = cfg.SOLVER.OPT
26 | if hasattr(optim, solver_opt):
27 | if solver_opt == "SGD":
28 | opt_fns = getattr(optim, solver_opt)(params, momentum=cfg.SOLVER.MOMENTUM)
29 | else:
30 | opt_fns = getattr(optim, solver_opt)(params)
31 | else:
32 | raise NameError("optimizer {} not support".format(cfg.SOLVER.OPT))
33 | return opt_fns
34 |
35 |
36 | def build_lr_scheduler(cfg, optimizer):
37 | scheduler_args = {
38 | "optimizer": optimizer,
39 |
40 | # warmup options
41 | "warmup_factor": cfg.SOLVER.WARMUP_FACTOR,
42 | "warmup_iters": cfg.SOLVER.WARMUP_ITERS,
43 | "warmup_method": cfg.SOLVER.WARMUP_METHOD,
44 |
45 | # multi-step lr scheduler options
46 | "milestones": cfg.SOLVER.STEPS,
47 | "gamma": cfg.SOLVER.GAMMA,
48 |
49 | # cosine annealing lr scheduler options
50 | "max_iters": cfg.SOLVER.MAX_ITER,
51 | "delay_iters": cfg.SOLVER.DELAY_ITERS,
52 | "eta_min_lr": cfg.SOLVER.ETA_MIN_LR,
53 |
54 | }
55 | return getattr(lr_scheduler, cfg.SOLVER.SCHED)(**scheduler_args)
56 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/solver/optim/__init__.py:
--------------------------------------------------------------------------------
1 | from .lamb import Lamb
2 | from .swa import SWA
3 | from .adam import Adam
4 | from .sgd import SGD
5 |
6 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/utils/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: sherlock
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/utils/registry.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
3 |
4 | from typing import Dict, Optional
5 |
6 |
7 | class Registry(object):
8 | """
9 | The registry that provides name -> object mapping, to support third-party
10 | users' custom modules.
11 | To create a registry (e.g. a backbone registry):
12 | .. code-block:: python
13 | BACKBONE_REGISTRY = Registry('BACKBONE')
14 | To register an object:
15 | .. code-block:: python
16 | @BACKBONE_REGISTRY.register()
17 | class MyBackbone():
18 | ...
19 | Or:
20 | .. code-block:: python
21 | BACKBONE_REGISTRY.register(MyBackbone)
22 | """
23 |
24 | def __init__(self, name: str) -> None:
25 | """
26 | Args:
27 | name (str): the name of this registry
28 | """
29 | self._name: str = name
30 | self._obj_map: Dict[str, object] = {}
31 |
32 | def _do_register(self, name: str, obj: object) -> None:
33 | assert (
34 | name not in self._obj_map
35 | ), "An object named '{}' was already registered in '{}' registry!".format(
36 | name, self._name
37 | )
38 | self._obj_map[name] = obj
39 |
40 | def register(self, obj: object = None) -> Optional[object]:
41 | """
42 | Register the given object under the the name `obj.__name__`.
43 | Can be used as either a decorator or not. See docstring of this class for usage.
44 | """
45 | if obj is None:
46 | # used as a decorator
47 | def deco(func_or_class: object) -> object:
48 | name = func_or_class.__name__ # pyre-ignore
49 | self._do_register(name, func_or_class)
50 | return func_or_class
51 |
52 | return deco
53 |
54 | # used as a function call
55 | name = obj.__name__ # pyre-ignore
56 | self._do_register(name, obj)
57 |
58 | def get(self, name: str) -> object:
59 | ret = self._obj_map.get(name)
60 | if ret is None:
61 | raise KeyError(
62 | "No object named '{}' found in '{}' registry!".format(
63 | name, self._name
64 | )
65 | )
66 | return ret
67 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/utils/timer.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
2 | # -*- coding: utf-8 -*-
3 |
4 | from time import perf_counter
5 | from typing import Optional
6 |
7 |
8 | class Timer:
9 | """
10 | A timer which computes the time elapsed since the start/reset of the timer.
11 | """
12 |
13 | def __init__(self):
14 | self.reset()
15 |
16 | def reset(self):
17 | """
18 | Reset the timer.
19 | """
20 | self._start = perf_counter()
21 | self._paused: Optional[float] = None
22 | self._total_paused = 0
23 | self._count_start = 1
24 |
25 | def pause(self):
26 | """
27 | Pause the timer.
28 | """
29 | if self._paused is not None:
30 | raise ValueError("Trying to pause a Timer that is already paused!")
31 | self._paused = perf_counter()
32 |
33 | def is_paused(self) -> bool:
34 | """
35 | Returns:
36 | bool: whether the timer is currently paused
37 | """
38 | return self._paused is not None
39 |
40 | def resume(self):
41 | """
42 | Resume the timer.
43 | """
44 | if self._paused is None:
45 | raise ValueError("Trying to resume a Timer that is not paused!")
46 | self._total_paused += perf_counter() - self._paused
47 | self._paused = None
48 | self._count_start += 1
49 |
50 | def seconds(self) -> float:
51 | """
52 | Returns:
53 | (float): the total number of seconds since the start/reset of the
54 | timer, excluding the time when the timer is paused.
55 | """
56 | if self._paused is not None:
57 | end_time: float = self._paused # type: ignore
58 | else:
59 | end_time = perf_counter()
60 | return end_time - self._start - self._total_paused
61 |
62 | def avg_seconds(self) -> float:
63 | """
64 | Returns:
65 | (float): the average number of seconds between every start/reset and
66 | pause.
67 | """
68 | return self.seconds() / self._count_start
69 |
--------------------------------------------------------------------------------
/fast-reid/fastreid/utils/weight_init.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import math
8 | from torch import nn
9 |
10 | __all__ = [
11 | 'weights_init_classifier',
12 | 'weights_init_kaiming',
13 | ]
14 |
15 |
16 | def weights_init_kaiming(m):
17 | classname = m.__class__.__name__
18 | if classname.find('Linear') != -1:
19 | nn.init.normal_(m.weight, 0, 0.01)
20 | if m.bias is not None:
21 | nn.init.constant_(m.bias, 0.0)
22 | elif classname.find('Conv') != -1:
23 | nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
24 | if m.bias is not None:
25 | nn.init.constant_(m.bias, 0.0)
26 | elif classname.find('BatchNorm') != -1:
27 | if m.affine:
28 | nn.init.normal_(m.weight, 1.0, 0.02)
29 | nn.init.constant_(m.bias, 0.0)
30 |
31 |
32 | def weights_init_classifier(m):
33 | classname = m.__class__.__name__
34 | if classname.find('Linear') != -1:
35 | nn.init.normal_(m.weight, std=0.001)
36 | if m.bias is not None:
37 | nn.init.constant_(m.bias, 0.0)
38 |
--------------------------------------------------------------------------------
/fast-reid/projects/CrowdReID:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot101ibn-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot101ibn-kd-bot18"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot101ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot101ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot101ibn-bot34.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot101ibn-kd-bot34"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot101ibn-bot34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot101ibn-kd-bot34ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot101ibn-bot50.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "50x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 2048
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot101ibn-kd-bot50"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot101ibn-bot50ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "50x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 2048
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot101ibn-kd-bot50ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot34ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "34x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 512
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R34-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot34ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot50-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | PRETRAIN: False
16 |
17 | HEADS:
18 | NAME: "ReductionHead"
19 | IN_FEAT: 2048
20 | REDUCTION_DIM: 256
21 | NORM: "BN"
22 | POOL_LAYER: "avgpool"
23 | NECK_FEAT: "before"
24 | CLS_LAYER: ""
25 |
26 | MODEL:
27 | META_ARCHITECTURE: "Baseline"
28 |
29 | BACKBONE:
30 | NAME: "build_resnet_backbone"
31 | NORM: "BN"
32 | DEPTH: "18x"
33 | LAST_STRIDE: 1
34 | WITH_IBN: False
35 | PRETRAIN: True
36 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
37 |
38 | HEADS:
39 | NAME: "ReductionHead"
40 | IN_FEAT: 512
41 | NORM: "BN"
42 | REDUCTION_DIM: 256
43 | POOL_LAYER: "avgpool"
44 | NECK_FEAT: "before"
45 | CLS_LAYER: ""
46 |
47 | STUDENT_WEIGHTS: ""
48 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R50_ReduceHead/teacher.pth"
49 | DATASETS:
50 | NAMES: ("DukeMTMC",)
51 | TESTS: ("DukeMTMC",)
52 |
53 | DATALOADER:
54 | NUM_WORKERS: 8
55 |
56 | SOLVER:
57 | BASE_LR: 0.00035
58 |
59 | OUTPUT_DIR: "logs/dukemtmc/bot50-bot18-l2"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot50ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R50-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot50ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/KD-bot50ibn-bot34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/dukemtmc/bagtricks_R50-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("DukeMTMC",)
48 | TESTS: ("DukeMTMC",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/dukemtmc/bot50ibn-kd-bot34ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/bagtricks_R101-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: '101x'
6 | WITH_IBN: True
7 |
8 | DATASETS:
9 | NAMES: ("DukeMTMC",)
10 | TESTS: ("DukeMTMC",)
11 |
12 | OUTPUT_DIR: "logs/dukemtmc/bagtricks_R101-ibn"
13 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/bagtricks_R18-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "18x"
6 | WITH_IBN: True
7 | HEADS:
8 | IN_FEAT: 512
9 |
10 | DATASETS:
11 | NAMES: ("DukeMTMC",)
12 | TESTS: ("DukeMTMC",)
13 |
14 | OUTPUT_DIR: "logs/dukemtmc/bagtricks_R18-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/bagtricks_R34-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "34x"
6 | WITH_IBN: True
7 | HEADS:
8 | IN_FEAT: 512
9 |
10 | DATASETS:
11 | NAMES: ("DukeMTMC",)
12 | TESTS: ("DukeMTMC",)
13 |
14 | OUTPUT_DIR: "logs/dukemtmc/bagtricks_R34-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-dukemtmcreid/bagtricks_R50-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "50x"
6 | WITH_IBN: True
7 |
8 | DATASETS:
9 | NAMES: ("DukeMTMC",)
10 | TESTS: ("DukeMTMC",)
11 |
12 | OUTPUT_DIR: "logs/dukemtmc/bagtricks_R50-ibn"
13 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot101ibn-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot101ibn-kd-bot18"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot101ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot101ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot101ibn-bot34.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot101ibn-kd-bot34"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot101ibn-bot34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot101ibn-kd-bot34ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot101ibn-bot50.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "50x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 2048
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot101ibn-kd-bot50"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot101ibn-bot50ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "50x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 2048
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot101ibn-kd-bot50ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot34ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "34x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 512
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R34-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot34ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot50-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | PRETRAIN: False
16 |
17 | HEADS:
18 | NAME: "ReductionHead"
19 | IN_FEAT: 2048
20 | REDUCTION_DIM: 256
21 | NORM: "BN"
22 | POOL_LAYER: "avgpool"
23 | NECK_FEAT: "before"
24 | CLS_LAYER: ""
25 |
26 | MODEL:
27 | META_ARCHITECTURE: "Baseline"
28 | WEIGHTS: "./logs/market1501/bot50-bot18-l2/model_final.pth"
29 |
30 | BACKBONE:
31 | NAME: "build_resnet_backbone"
32 | NORM: "BN"
33 | DEPTH: "18x"
34 | LAST_STRIDE: 1
35 | WITH_IBN: False
36 | PRETRAIN: True
37 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
38 |
39 | HEADS:
40 | NAME: "ReductionHead"
41 | IN_FEAT: 512
42 | NORM: "BN"
43 | REDUCTION_DIM: 256
44 | POOL_LAYER: "avgpool"
45 | NECK_FEAT: "before"
46 | CLS_LAYER: ""
47 |
48 | STUDENT_WEIGHTS: ""
49 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R50_ReduceHead/teacher.pth"
50 | DATASETS:
51 | NAMES: ("Market1501",)
52 | TESTS: ("Market1501",)
53 |
54 | DATALOADER:
55 | NUM_WORKERS: 8
56 | NUM_INSTANCE: 8
57 |
58 | SOLVER:
59 | BASE_LR: 3.5e-5
60 | IMS_PER_BATCH: 128
61 | MAX_ITER: 240
62 | STEPS: [80, 180]
63 |
64 | OUTPUT_DIR: "logs/market1501/bot50-bot18-l2-fdm"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot50ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R50-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot50ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/KD-bot50ibn-bot34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R50-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("Market1501",)
48 | TESTS: ("Market1501",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/market1501/bot50ibn-kd-bot34ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/bagtricks_R101-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: '101x'
6 | WITH_IBN: True
7 |
8 | DATASETS:
9 | NAMES: ("Market1501",)
10 | TESTS: ("Market1501",)
11 |
12 | OUTPUT_DIR: "logs/market1501/bagtricks_R101-ibn"
13 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/bagtricks_R18-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "18x"
6 | WITH_IBN: True
7 | HEADS:
8 | IN_FEAT: 512
9 |
10 | DATASETS:
11 | NAMES: ("Market1501",)
12 | TESTS: ("Market1501",)
13 |
14 | OUTPUT_DIR: "logs/market1501/bagtricks_R18-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/bagtricks_R34-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "34x"
6 | WITH_IBN: True
7 | HEADS:
8 | IN_FEAT: 512
9 |
10 | DATASETS:
11 | NAMES: ("Market1501",)
12 | TESTS: ("Market1501",)
13 |
14 | OUTPUT_DIR: "logs/market1501/bagtricks_R34-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-market1501/bagtricks_R50-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "50x"
6 | WITH_IBN: True
7 |
8 | DATASETS:
9 | NAMES: ("Market1501",)
10 | TESTS: ("Market1501",)
11 |
12 | OUTPUT_DIR: "logs/market1501/bagtricks_R50-ibn"
13 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot101ibn-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot101ibn-kd-bot18"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot101ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot101ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot101ibn-bot34.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot101ibn-kd-bot34"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot101ibn-bot34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot101ibn-kd-bot34ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot101ibn-bot50.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "50x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: False
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 2048
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot101ibn-kd-bot50"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot101ibn-bot50ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "50x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 2048
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R101-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot101ibn-kd-bot50ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot34ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "34x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 512
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R34-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot34ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot50-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | PRETRAIN: False
16 |
17 | HEADS:
18 | NAME: "ReductionHead"
19 | IN_FEAT: 2048
20 | REDUCTION_DIM: 256
21 | NORM: "BN"
22 | POOL_LAYER: "avgpool"
23 | NECK_FEAT: "before"
24 | CLS_LAYER: ""
25 |
26 | MODEL:
27 | META_ARCHITECTURE: "Baseline"
28 |
29 | BACKBONE:
30 | NAME: "build_resnet_backbone"
31 | NORM: "BN"
32 | DEPTH: "18x"
33 | LAST_STRIDE: 1
34 | WITH_IBN: False
35 | PRETRAIN: True
36 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
37 |
38 | HEADS:
39 | NAME: "ReductionHead"
40 | IN_FEAT: 512
41 | NORM: "BN"
42 | REDUCTION_DIM: 256
43 | POOL_LAYER: "avgpool"
44 | NECK_FEAT: "before"
45 | CLS_LAYER: ""
46 |
47 | STUDENT_WEIGHTS: ""
48 | TEACHER_WEIGHTS: "./logs/msmt17/bagtricks_R50_ReduceHead/teacher.pth"
49 | DATASETS:
50 | NAMES: ("MSMT17",)
51 | TESTS: ("MSMT17",)
52 |
53 | DATALOADER:
54 | NUM_WORKERS: 8
55 |
56 | SOLVER:
57 | BASE_LR: 0.00035
58 |
59 | OUTPUT_DIR: "logs/msmt17/bot50-bot18-fdm"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot50ibn-bot18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "18x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R50-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot50ibn-kd-bot18ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/KD-bot50ibn-bot34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: True
15 | PRETRAIN: True
16 |
17 | HEADS:
18 | NAME: "BNneckHead"
19 | IN_FEAT: 2048
20 | NORM: "BN"
21 | POOL_LAYER: "avgpool"
22 | NECK_FEAT: "before"
23 | CLS_LAYER: "linear"
24 |
25 | MODEL:
26 | META_ARCHITECTURE: "Baseline"
27 |
28 | BACKBONE:
29 | NAME: "build_resnet_backbone"
30 | NORM: "BN"
31 | DEPTH: "34x"
32 | LAST_STRIDE: 1
33 | WITH_IBN: True
34 | PRETRAIN: True
35 |
36 | HEADS:
37 | NAME: "BNneckHead"
38 | IN_FEAT: 512
39 | NORM: "BN"
40 | POOL_LAYER: "avgpool"
41 | NECK_FEAT: "before"
42 | CLS_LAYER: "linear"
43 |
44 | STUDENT_WEIGHTS: ""
45 | TEACHER_WEIGHTS: "./logs/market1501/bagtricks_R50-ibn/model_final.pth"
46 | DATASETS:
47 | NAMES: ("MSMT17",)
48 | TESTS: ("MSMT17",)
49 |
50 | DATALOADER:
51 | NUM_WORKERS: 8
52 |
53 | OUTPUT_DIR: "logs/msmt17/bot50ibn-kd-bot34ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/bagtricks_R101-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: '101x'
6 | WITH_IBN: True
7 |
8 | DATASETS:
9 | NAMES: ("MSMT17",)
10 | TESTS: ("MSMT17",)
11 |
12 | OUTPUT_DIR: "logs/msmt17/bagtricks_R101-ibn"
13 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/bagtricks_R18-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "18x"
6 | WITH_IBN: True
7 | HEADS:
8 | IN_FEAT: 512
9 |
10 | DATASETS:
11 | NAMES: ("MSMT17",)
12 | TESTS: ("MSMT17",)
13 |
14 | OUTPUT_DIR: "logs/msmt17/bagtricks_R18-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/bagtricks_R34-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "34x"
6 | WITH_IBN: True
7 | HEADS:
8 | IN_FEAT: 512
9 |
10 | DATASETS:
11 | NAMES: ("MSMT17",)
12 | TESTS: ("MSMT17",)
13 |
14 | OUTPUT_DIR: "logs/msmt17/bagtricks_R34-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-bagtricks-ibn-msmt17/bagtricks_R50-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-bagtricks.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "50x"
6 | WITH_IBN: True
7 |
8 | DATASETS:
9 | NAMES: ("MSMT17",)
10 | TESTS: ("MSMT17",)
11 |
12 | OUTPUT_DIR: "logs/msmt17/bagtricks_R50-ibn"
13 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-bot50-bot18-uncertainty.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | WITH_NL: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "ReductionHead"
20 | IN_FEAT: 2048
21 | REDUCTION_DIM: 256
22 | NORM: "BN"
23 | POOL_LAYER: "gempool"
24 | NECK_FEAT: "after"
25 | # CLS_LAYER: ""
26 |
27 | MODEL:
28 | FREEZE_LAYERS: [""]
29 | META_ARCHITECTURE: "Baseline"
30 | WEIGHTS: "logs/dukemtmc/bot50-bot18-uncertainty/model_final.pth"
31 |
32 | BACKBONE:
33 | NAME: "build_resnet_backbone"
34 | NORM: "BN"
35 | DEPTH: "18x"
36 | LAST_STRIDE: 1
37 | WITH_IBN: False
38 | WITH_NL: True
39 | PRETRAIN: True
40 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
41 |
42 | HEADS:
43 | NAME: "SigmaHead"
44 | IN_FEAT: 512
45 | NORM: "BN"
46 | REDUCTION_DIM: 256
47 | POOL_LAYER: "gempool"
48 | NECK_FEAT: "after"
49 | CLS_LAYER: ""
50 |
51 | STUDENT_WEIGHTS: ""
52 | TEACHER_WEIGHTS: "./logs/dukemtmc/sbs_R50_ReduceHead/teacher.pth"
53 | DATASETS:
54 | NAMES: ("DukeMTMC",)
55 | TESTS: ("DukeMTMC",)
56 |
57 | INPUT:
58 | DO_AUTOAUG: False
59 | REA:
60 | ENABLED: False
61 |
62 | DATALOADER:
63 | NUM_WORKERS: 8
64 | NUM_INSTANCE: 8
65 |
66 | TEST:
67 | EVAL_PERIOD: 2
68 |
69 | SOLVER:
70 | # BASE_LR: 0.000035
71 | # IMS_PER_BATCH: 128
72 | MAX_ITER: 120
73 | # STEPS: [80, 180]
74 |
75 | OUTPUT_DIR: "logs/dukemtmc/bot50-bot18-uncertainty"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-bot50-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | WITH_NL: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "ReductionHead"
20 | IN_FEAT: 2048
21 | REDUCTION_DIM: 256
22 | NORM: "BN"
23 | POOL_LAYER: "gempool"
24 | NECK_FEAT: "after"
25 | # CLS_LAYER: ""
26 |
27 | MODEL:
28 | META_ARCHITECTURE: "Baseline"
29 | WEIGHTS: "logs/dukemtmc/bot50-bot18-fdm/model_final.pth"
30 |
31 | BACKBONE:
32 | NAME: "build_resnet_backbone"
33 | NORM: "BN"
34 | DEPTH: "18x"
35 | LAST_STRIDE: 1
36 | WITH_IBN: False
37 | WITH_NL: True
38 | PRETRAIN: True
39 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
40 |
41 | HEADS:
42 | NAME: "SigmaHead"
43 | IN_FEAT: 512
44 | NORM: "BN"
45 | REDUCTION_DIM: 256
46 | POOL_LAYER: "gempool"
47 | NECK_FEAT: "after"
48 | CLS_LAYER: ""
49 |
50 | STUDENT_WEIGHTS: ""
51 | TEACHER_WEIGHTS: "./logs/dukemtmc/sbs_R50_ReduceHead/teacher.pth"
52 | DATASETS:
53 | NAMES: ("DukeMTMC",)
54 | TESTS: ("DukeMTMC",)
55 |
56 | INPUT:
57 | DO_AUTOAUG: False
58 | REA:
59 | ENABLED: False
60 |
61 | DATALOADER:
62 | NUM_WORKERS: 8
63 | NUM_INSTANCE: 8
64 |
65 | SOLVER:
66 | BASE_LR: 0.000035
67 | # IMS_PER_BATCH: 128
68 | # MAX_ITER: 240
69 | # STEPS: [80, 180]
70 |
71 | OUTPUT_DIR: "logs/dukemtmc/bot50-bot18-fdm"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-sbs101ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R101-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("DukeMTMC",)
45 | TESTS: ("DukeMTMC",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/dukemtmcreid/sbs101ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-sbs101ibn-sbs34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "34x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 512
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R101-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("DukeMTMC",)
46 | TESTS: ("DukeMTMC",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/dukemtmcreid/sbs101ibn-kd-sbs34ibn"
52 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-sbs101ibn-sbs50ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "50x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 2048
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R101-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("DukeMTMC",)
46 | TESTS: ("DukeMTMC",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/dukemtmcreid/sbs101ibn-kd-sbs50ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-sbs34ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "34x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 512
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R34-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("DukeMTMC",)
45 | TESTS: ("DukeMTMC",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/dukemtmcreid/sbs34ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-sbs50ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R50-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("DukeMTMC",)
45 | TESTS: ("DukeMTMC",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/dukemtmcreid/sbs50ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/KD-sbs50ibn-sbs34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "34x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 512
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R50-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("DukeMTMC",)
46 | TESTS: ("DukeMTMC",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/dukemtmcreid/sbs50ibn-kd-sbs34ibn"
52 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/sbs_R101-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "101x"
6 | WITH_IBN: True
7 | HEADS:
8 | CLS_LAYER: "circleSoftmax"
9 |
10 | DATASETS:
11 | NAMES: ("DukeMTMC",)
12 | TESTS: ("DukeMTMC",)
13 |
14 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R101-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/sbs_R18-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "18x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 512
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("DukeMTMC",)
14 | TESTS: ("DukeMTMC",)
15 |
16 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R18-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/sbs_R34-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "34x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 512
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("DukeMTMC",)
14 | TESTS: ("DukeMTMC",)
15 |
16 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R34-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-dukemtmcreid/sbs_R50-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "50x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 2048
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("DukeMTMC",)
14 | TESTS: ("DukeMTMC",)
15 |
16 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R50-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-bot50-bot18-uncertainty.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | WITH_NL: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "ReductionHead"
20 | IN_FEAT: 2048
21 | REDUCTION_DIM: 256
22 | NORM: "BN"
23 | POOL_LAYER: "gempool"
24 | NECK_FEAT: "after"
25 | CLS_LAYER: ""
26 |
27 | MODEL:
28 | META_ARCHITECTURE: "Baseline"
29 | WEIGHTS: "./logs/market1501/bot50-bot18-l2/model_final.pth"
30 |
31 | BACKBONE:
32 | NAME: "build_resnet_backbone"
33 | NORM: "BN"
34 | DEPTH: "18x"
35 | LAST_STRIDE: 1
36 | WITH_IBN: False
37 | WITH_NL: True
38 | PRETRAIN: True
39 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
40 |
41 | HEADS:
42 | NAME: "ReductionHead"
43 | IN_FEAT: 512
44 | NORM: "BN"
45 | REDUCTION_DIM: 256
46 | POOL_LAYER: "gempool"
47 | NECK_FEAT: "after"
48 | CLS_LAYER: ""
49 |
50 | STUDENT_WEIGHTS: ""
51 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R50_ReduceHead/teacher.pth"
52 | DATASETS:
53 | NAMES: ("Market1501",)
54 | TESTS: ("Market1501",)
55 |
56 | DATALOADER:
57 | NUM_WORKERS: 8
58 | NUM_INSTANCE: 8
59 |
60 | SOLVER:
61 | BASE_LR: 3.5e-5
62 | # IMS_PER_BATCH: 128
63 | # MAX_ITER: 240
64 | # STEPS: [80, 180]
65 |
66 | OUTPUT_DIR: "logs/market1501/bot50-bot18-fdm"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-bot50-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | WITH_NL: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "ReductionHead"
20 | IN_FEAT: 2048
21 | REDUCTION_DIM: 256
22 | NORM: "BN"
23 | POOL_LAYER: "gempool"
24 | NECK_FEAT: "after"
25 | CLS_LAYER: ""
26 |
27 | MODEL:
28 | META_ARCHITECTURE: "Baseline"
29 | WEIGHTS: "./logs/market1501/bot50-bot18-l2/model_final.pth"
30 |
31 | BACKBONE:
32 | NAME: "build_resnet_backbone"
33 | NORM: "BN"
34 | DEPTH: "18x"
35 | LAST_STRIDE: 1
36 | WITH_IBN: False
37 | WITH_NL: True
38 | PRETRAIN: True
39 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
40 |
41 | HEADS:
42 | NAME: "ReductionHead"
43 | IN_FEAT: 512
44 | NORM: "BN"
45 | REDUCTION_DIM: 256
46 | POOL_LAYER: "gempool"
47 | NECK_FEAT: "after"
48 | CLS_LAYER: ""
49 |
50 | STUDENT_WEIGHTS: ""
51 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R50_ReduceHead/teacher.pth"
52 | DATASETS:
53 | NAMES: ("Market1501",)
54 | TESTS: ("Market1501",)
55 |
56 | DATALOADER:
57 | NUM_WORKERS: 8
58 | NUM_INSTANCE: 8
59 |
60 | SOLVER:
61 | BASE_LR: 3.5e-5
62 | # IMS_PER_BATCH: 128
63 | # MAX_ITER: 240
64 | # STEPS: [80, 180]
65 |
66 | OUTPUT_DIR: "logs/market1501/bot50-bot18-fdm"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-sbs101ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R101-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("Market1501",)
45 | TESTS: ("Market1501",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/market1501/sbs101ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-sbs101ibn-sbs34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "34x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 512
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R101-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("Market1501",)
46 | TESTS: ("Market1501",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/market1501/sbs101ibn-kd-sbs34ibn"
52 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-sbs101ibn-sbs50ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "50x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 2048
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R101-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("Market1501",)
46 | TESTS: ("Market1501",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/market1501/sbs101ibn-kd-sbs50ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-sbs34ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "34x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 512
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R34-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("Market1501",)
45 | TESTS: ("Market1501",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/market1501/sbs34ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-sbs50ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R50-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("Market1501",)
45 | TESTS: ("Market1501",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/market1501/sbs50ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/KD-sbs50ibn-sbs34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "34x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 512
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/market1501/sbs_R50-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("Market1501",)
46 | TESTS: ("Market1501",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/market1501/sbs50ibn-kd-sbs34ibn"
52 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/sbs_R101-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "101x"
6 | WITH_IBN: True
7 | HEADS:
8 | CLS_LAYER: "circleSoftmax"
9 |
10 | DATASETS:
11 | NAMES: ("Market1501",)
12 | TESTS: ("Market1501",)
13 |
14 | OUTPUT_DIR: "logs/market1501/sbs_R101-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/sbs_R18-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "18x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 512
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("Market1501",)
14 | TESTS: ("Market1501",)
15 |
16 | OUTPUT_DIR: "logs/market1501/sbs_R18-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/sbs_R34-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "34x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 512
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("Market1501",)
14 | TESTS: ("Market1501",)
15 |
16 | OUTPUT_DIR: "logs/market1501/sbs_R34-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-market1501/sbs_R50-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "50x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 2048
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("Market1501",)
14 | TESTS: ("Market1501",)
15 |
16 | OUTPUT_DIR: "logs/market1501/sbs_R50-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-bot50-bot18-uncertainty.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | WITH_NL: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "ReductionHead"
20 | IN_FEAT: 2048
21 | REDUCTION_DIM: 256
22 | NORM: "BN"
23 | POOL_LAYER: "gempool"
24 | NECK_FEAT: "after"
25 | CLS_LAYER: ""
26 |
27 | MODEL:
28 | META_ARCHITECTURE: "Baseline"
29 | WEIGHTS: "logs/msmt17/bot50-bot18-l2/model_final.pth"
30 |
31 | BACKBONE:
32 | NAME: "build_resnet_backbone"
33 | NORM: "BN"
34 | DEPTH: "18x"
35 | LAST_STRIDE: 1
36 | WITH_IBN: False
37 | WITH_NL: True
38 | PRETRAIN: True
39 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
40 |
41 | HEADS:
42 | NAME: "ReductionHead"
43 | IN_FEAT: 512
44 | NORM: "BN"
45 | REDUCTION_DIM: 256
46 | POOL_LAYER: "gempool"
47 | NECK_FEAT: "after"
48 | CLS_LAYER: ""
49 |
50 | STUDENT_WEIGHTS: ""
51 | TEACHER_WEIGHTS: "./logs/msmt17/sbs_R50_ReductionHead/teacher.pth"
52 | DATASETS:
53 | NAMES: ("MSMT17",)
54 | TESTS: ("MSMT17",)
55 |
56 | DATALOADER:
57 | NUM_WORKERS: 8
58 | NUM_INSTANCE: 8
59 |
60 | SOLVER:
61 | BASE_LR: 0.000035
62 | # IMS_PER_BATCH: 128
63 | # MAX_ITER: 240
64 | # STEPS: [80, 180]
65 |
66 | OUTPUT_DIR: "logs/msmt17/bot50-bot18-fdm"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-bot50-bot18.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_IBN: False
15 | WITH_NL: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "ReductionHead"
20 | IN_FEAT: 2048
21 | REDUCTION_DIM: 256
22 | NORM: "BN"
23 | POOL_LAYER: "gempool"
24 | NECK_FEAT: "after"
25 | CLS_LAYER: ""
26 |
27 | MODEL:
28 | META_ARCHITECTURE: "Baseline"
29 | WEIGHTS: "logs/msmt17/bot50-bot18-l2/model_final.pth"
30 |
31 | BACKBONE:
32 | NAME: "build_resnet_backbone"
33 | NORM: "BN"
34 | DEPTH: "18x"
35 | LAST_STRIDE: 1
36 | WITH_IBN: False
37 | WITH_NL: True
38 | PRETRAIN: True
39 | PRETRAIN_PATH: "./model/ImageNet/resnet18-5c106cde.pth"
40 |
41 | HEADS:
42 | NAME: "ReductionHead"
43 | IN_FEAT: 512
44 | NORM: "BN"
45 | REDUCTION_DIM: 256
46 | POOL_LAYER: "gempool"
47 | NECK_FEAT: "after"
48 | CLS_LAYER: ""
49 |
50 | STUDENT_WEIGHTS: ""
51 | TEACHER_WEIGHTS: "./logs/msmt17/sbs_R50_ReductionHead/teacher.pth"
52 | DATASETS:
53 | NAMES: ("MSMT17",)
54 | TESTS: ("MSMT17",)
55 |
56 | DATALOADER:
57 | NUM_WORKERS: 8
58 | NUM_INSTANCE: 8
59 |
60 | SOLVER:
61 | BASE_LR: 0.000035
62 | # IMS_PER_BATCH: 128
63 | # MAX_ITER: 240
64 | # STEPS: [80, 180]
65 |
66 | OUTPUT_DIR: "logs/msmt17/bot50-bot18-fdm"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-sbs101ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R101-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("MSMT17",)
45 | TESTS: ("MSMT17",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/dukemtmcreid/sbs101ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-sbs101ibn-sbs34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "34x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 512
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R101-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("MSMT17",)
46 | TESTS: ("MSMT17",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/dukemtmcreid/sbs101ibn-kd-sbs34ibn"
52 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-sbs101ibn-sbs50ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "101x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "50x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 2048
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R101-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("MSMT17",)
46 | TESTS: ("MSMT17",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/dukemtmcreid/sbs101ibn-kd-sbs50ibn"
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-sbs34ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "34x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 512
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R34-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("MSMT17",)
45 | TESTS: ("MSMT17",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/dukemtmcreid/sbs34ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-sbs50ibn-sbs18ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 | MODEL:
29 | META_ARCHITECTURE: "Baseline"
30 |
31 | BACKBONE:
32 | WITH_NL: False
33 | DEPTH: "18x"
34 | WITH_IBN: True
35 | HEADS:
36 | IN_FEAT: 512
37 | CLS_LAYER: "circleSoftmax"
38 |
39 | STUDENT_WEIGHTS: ""
40 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R50-ibn/model_final.pth"
41 |
42 |
43 | DATASETS:
44 | NAMES: ("MSMT17",)
45 | TESTS: ("MSMT17",)
46 |
47 | DATALOADER:
48 | NUM_WORKERS: 8
49 |
50 | OUTPUT_DIR: "logs/dukemtmcreid/sbs50ibn-kd-sbs18ibn"
51 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/KD-sbs50ibn-sbs34ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | SOLVER:
4 | IMS_PER_BATCH: 64
5 |
6 | MODEL_TEACHER:
7 | META_ARCHITECTURE: "Baseline"
8 |
9 | BACKBONE:
10 | NAME: "build_resnet_backbone"
11 | NORM: "BN"
12 | DEPTH: "50x"
13 | LAST_STRIDE: 1
14 | WITH_NL: True
15 | WITH_IBN: True
16 | PRETRAIN: False
17 |
18 | HEADS:
19 | NAME: "BNneckHead"
20 | IN_FEAT: 2048
21 | NORM: "BN"
22 | NECK_FEAT: "after"
23 | POOL_LAYER: "gempool"
24 | CLS_LAYER: "circle"
25 | SCALE: 64
26 | MARGIN: 0.35
27 |
28 |
29 | MODEL:
30 | META_ARCHITECTURE: "Baseline"
31 |
32 | BACKBONE:
33 | WITH_NL: False
34 | DEPTH: "34x"
35 | WITH_IBN: True
36 | HEADS:
37 | IN_FEAT: 512
38 | CLS_LAYER: "circleSoftmax"
39 |
40 | STUDENT_WEIGHTS: ""
41 | TEACHER_WEIGHTS: "./logs/dukemtmcreid/sbs_R50-ibn/model_final.pth"
42 |
43 |
44 | DATASETS:
45 | NAMES: ("MSMT17",)
46 | TESTS: ("MSMT17",)
47 |
48 | DATALOADER:
49 | NUM_WORKERS: 8
50 |
51 | OUTPUT_DIR: "logs/dukemtmcreid/sbs50ibn-kd-sbs34ibn"
52 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/sbs_R101-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | DEPTH: "101x"
6 | WITH_IBN: True
7 | HEADS:
8 | CLS_LAYER: "circleSoftmax"
9 |
10 | DATASETS:
11 | NAMES: ("MSMT17",)
12 | TESTS: ("MSMT17",)
13 |
14 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R101-ibn"
15 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/sbs_R18-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "18x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 512
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("MSMT17",)
14 | TESTS: ("MSMT17",)
15 |
16 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R18-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/sbs_R34-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "34x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 512
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("MSMT17",)
14 | TESTS: ("MSMT17",)
15 |
16 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R34-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/configs-sbs-ibn-msmt17/sbs_R50-ibn.yml:
--------------------------------------------------------------------------------
1 | _BASE_: "../../../configs/Base-Strongerbaseline.yml"
2 |
3 | MODEL:
4 | BACKBONE:
5 | WITH_NL: False
6 | DEPTH: "50x"
7 | WITH_IBN: True
8 | HEADS:
9 | IN_FEAT: 2048
10 | CLS_LAYER: "circleSoftmax"
11 |
12 | DATASETS:
13 | NAMES: ("MSMT17",)
14 | TESTS: ("MSMT17",)
15 |
16 | OUTPUT_DIR: "logs/dukemtmcreid/sbs_R50-ibn"
17 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/kdreid/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: l1aoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from .config import add_kdreid_config, add_shufflenet_config
8 | from .kd_trainer import KDTrainer
9 | from .modeling import build_shufflenetv2_backbone
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/kdreid/modeling/__init__.py:
--------------------------------------------------------------------------------
1 | from .backbones import build_shufflenetv2_backbone
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/kdreid/modeling/backbones/__init__.py:
--------------------------------------------------------------------------------
1 | from .shufflenetv2 import build_shufflenetv2_backbone
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/kdreid/modeling/backbones/shufflenetv2/__init__.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | from collections import OrderedDict
4 |
5 | from fastreid.modeling.backbones.build import BACKBONE_REGISTRY
6 | from .network import ShuffleNetV2
7 |
8 |
9 | __all__ = ['build_shufflenetv2_backbone']
10 |
11 |
12 | @BACKBONE_REGISTRY.register()
13 | def build_shufflenetv2_backbone(cfg):
14 |
15 | pretrain = cfg.MODEL.BACKBONE.PRETRAIN
16 | pretrain_path = cfg.MODEL.BACKBONE.PRETRAIN_PATH
17 | model_size = cfg.MODEL.BACKBONE.MODEL_SIZE
18 |
19 | return ShuffleNetV2Backbone(model_size=model_size, pretrained=pretrain, pretrain_path=pretrain_path)
20 |
21 |
22 | class ShuffleNetV2Backbone(nn.Module):
23 |
24 | def __init__(self, model_size, pretrained=False, pretrain_path=''):
25 | super(ShuffleNetV2Backbone, self).__init__()
26 |
27 | model = ShuffleNetV2(model_size=model_size)
28 | if pretrained:
29 | new_state_dict = OrderedDict()
30 | state_dict = torch.load(pretrain_path)['state_dict']
31 | for k, v in state_dict.items():
32 | if k[:7] == 'module.':
33 | k = k[7:]
34 | new_state_dict[k] = v
35 | model.load_state_dict(new_state_dict, strict=True)
36 |
37 | self.backbone = nn.Sequential(
38 | model.first_conv, model.maxpool, model.features, model.conv_last)
39 |
40 | def forward(self, x):
41 | return self.backbone(x)
42 |
43 |
44 |
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/kdreid/modeling/sigma.py:
--------------------------------------------------------------------------------
1 | '''
2 | Branch to estimate uncertainty of samples
3 | --------------------------------------
4 | Author: Yang Qian
5 | Email: yqian@aibee.com
6 | '''
7 | import torch.nn as nn
8 | import torch
9 |
10 | class Sigma(nn.Module):
11 | def __init__(self, n_input, n_output):
12 | super().__init__()
13 | self.model = nn.Sequential(
14 | nn.Linear(n_input, n_input),
15 | nn.LeakyReLU(inplace=True),
16 | nn.Linear(n_input, n_output),
17 | nn.BatchNorm1d(n_output)
18 | )
19 |
20 | for m in self.modules():
21 | if isinstance(m, nn.Linear):
22 | nn.init.normal_(m.weight.data, 0.0, 1e-4)
23 | nn.init.constant_(m.bias.data, 0.0)
24 |
25 | def forward(self, s, t, l2_norm=True):
26 | if l2_norm:
27 | s = torch.nn.functional.normalize(s)
28 | t = torch.nn.functional.normalize(t)
29 | return self.model((s-t)*(s-t))
--------------------------------------------------------------------------------
/fast-reid/projects/DistillReID/train_net.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # encoding: utf-8
3 | """
4 | @author: sherlock, guan'an wang
5 | @contact: sherlockliao01@gmail.com, guan.wang0706@gmail.com
6 | """
7 |
8 | import sys
9 | import torch
10 | from torch import nn
11 |
12 | sys.path.append('.')
13 | from fastreid.config import get_cfg
14 | from fastreid.engine import default_argument_parser, default_setup, DefaultTrainer, launch
15 | from fastreid.utils.checkpoint import Checkpointer
16 |
17 | from kdreid import *
18 |
19 |
20 | def setup(args):
21 | """
22 | Create configs and perform basic setups.
23 | """
24 | cfg = get_cfg()
25 | add_shufflenet_config(cfg)
26 | add_kdreid_config(cfg)
27 | cfg.merge_from_file(args.config_file)
28 | cfg.merge_from_list(args.opts)
29 | cfg.freeze()
30 | default_setup(cfg, args)
31 | return cfg
32 |
33 |
34 | def main(args):
35 | cfg = setup(args)
36 |
37 | if args.eval_only:
38 | model = DefaultTrainer.build_model(cfg)
39 | Checkpointer(model, save_dir=cfg.OUTPUT_DIR).load(cfg.MODEL.WEIGHTS)
40 | res = DefaultTrainer.test(cfg, model)
41 | return res
42 |
43 | if args.kd: trainer = KDTrainer(cfg)
44 | else: trainer = DefaultTrainer(cfg)
45 |
46 | trainer.resume_or_load(resume=args.resume)
47 | return trainer.train()
48 |
49 |
50 | if __name__ == "__main__":
51 | parser = default_argument_parser()
52 | parser.add_argument("--kd", action="store_true", help="kd training with teacher model guided")
53 | args = parser.parse_args()
54 |
55 | print("Command Line Args:", args)
56 | launch(
57 | main,
58 | args.num_gpus,
59 | num_machines=args.num_machines,
60 | machine_rank=args.machine_rank,
61 | dist_url=args.dist_url,
62 | args=(args,),
63 | )
--------------------------------------------------------------------------------
/fast-reid/projects/HAA/Readme.md:
--------------------------------------------------------------------------------
1 | # Black Re-ID: A Head-shoulder Descriptor for the Challenging Problem of Person Re-Identification
2 |
3 | ## Training
4 |
5 | To train a model, run
6 |
7 | ```bash
8 | CUDA_VISIBLE_DEVICES=gpus python train_net.py --config-file
9 | ```
10 |
11 | ## Evaluation
12 |
13 | To evaluate the model in test set, run similarly:
14 |
15 | ```bash
16 | CUDA_VISIBLE_DEVICES=gpus python train_net.py --config-file --eval-only MODEL.WEIGHTS model.pth
17 | ```
18 |
19 | ## Experimental Results
20 |
21 | ### Market1501 dataset
22 |
23 | | Method | Pretrained | Rank@1 | mAP |
24 | | :---: | :---: | :---: |:---: |
25 | | ResNet50 | ImageNet | 93.3% | 84.6% |
26 | | MGN | ImageNet | 95.7% | 86.9% |
27 | | HAA (ResNet50) | ImageNet | 95% | 87.1% |
28 | | HAA (MGN) | ImageNet | 95.8% | 89.5% |
29 |
30 | ### DukeMTMC dataset
31 |
32 | | Method | Pretrained | Rank@1 | mAP |
33 | | :---: | :---: | :---: |:---: |
34 | | ResNet50 | ImageNet | 86.2% | 75.3% |
35 | | MGN | ImageNet | 88.7% | 78.4% |
36 | | HAA (ResNet50) | ImageNet | 87.7% | 75.7% |
37 | | HAA (MGN) | ImageNet | 89% | 80.4% |
38 |
39 | ### Black-reid black group
40 |
41 | | Method | Pretrained | Rank@1 | mAP |
42 | | :---: | :---: | :---: |:---: |
43 | | ResNet50 | ImageNet | 80.9% | 70.8% |
44 | | MGN | ImageNet | 86.7% | 79.1% |
45 | | HAA (ResNet50) | ImageNet | 86.7% | 79% |
46 | | HAA (MGN) | ImageNet | 91.0% | 83.8% |
47 |
48 | ### White-reid white group
49 |
50 | | Method | Pretrained | Rank@1 | mAP |
51 | | :---: | :---: | :---: |:---: |
52 | | ResNet50 | ImageNet | 89.5% | 75.8% |
53 | | MGN | ImageNet | 94.3% | 85.8% |
54 | | HAA (ResNet50) | ImageNet | 93.5% | 84.4% |
55 | | HSE (MGN) | ImageNet | 95.3% | 88.1% |
56 |
57 |
--------------------------------------------------------------------------------
/fast-reid/projects/NAIC/dataset_analysis.py:
--------------------------------------------------------------------------------
1 | '''
2 | analysis color distribution of NAIC datasets
3 | ---------------
4 | Author: Yang Qian
5 | Email: yqian@aibee.com
6 | '''
7 |
8 | import numpy as np
9 | import cv2
10 | import os
11 |
12 | if __name__ == "__main__":
13 | dataset_dir = 'D:\\document\\NAIC\\NAIC2019\\1\\train_set'
14 |
15 | im_names = os.listdir(dataset_dir)
16 | axis = [0, 1, 2]
17 | for im_name in im_names:
18 | im = cv2.imread(os.path.join(dataset_dir, im_name))
19 | np.random.shuffle(axis)
20 | im_new = im[:, :, axis]
21 | cv2.imshow('original', im)
22 | cv2.imshow('new', im_new)
23 | cv2.waitKey()
--------------------------------------------------------------------------------
/fast-reid/projects/PartialReID/configs/partial_market.yml:
--------------------------------------------------------------------------------
1 | MODEL:
2 | META_ARCHITECTURE: 'PartialBaseline'
3 |
4 | BACKBONE:
5 | NAME: "build_resnet_backbone"
6 | DEPTH: "50x"
7 | NORM: "BN"
8 | LAST_STRIDE: 1
9 | WITH_IBN: True
10 |
11 | HEADS:
12 | NAME: "DSRHead"
13 | NORM: "BN"
14 | POOL_LAYER: "avgpool"
15 | NECK_FEAT: "before"
16 | CLS_LAYER: "linear"
17 |
18 | LOSSES:
19 | NAME: ("CrossEntropyLoss", "TripletLoss")
20 | CE:
21 | EPSILON: 0.1
22 | SCALE: 1.
23 | TRI:
24 | MARGIN: 0.3
25 | HARD_MINING: False
26 | SCALE: 1.
27 |
28 | DATASETS:
29 | NAMES: ("Market1501",)
30 | TESTS: ("PartialREID", "PartialiLIDS","OccludedREID",)
31 |
32 | INPUT:
33 | SIZE_TRAIN: [384, 128]
34 | SIZE_TEST: [384, 128]
35 | REA:
36 | ENABLED: False
37 | DO_PAD: False
38 |
39 | DATALOADER:
40 | PK_SAMPLER: True
41 | NAIVE_WAY: True
42 | NUM_INSTANCE: 4
43 | NUM_WORKERS: 8
44 |
45 | SOLVER:
46 | OPT: "Adam"
47 | MAX_ITER: 30
48 | BASE_LR: 0.00035
49 | BIAS_LR_FACTOR: 2.
50 | WEIGHT_DECAY: 0.0005
51 | WEIGHT_DECAY_BIAS: 0.0
52 | IMS_PER_BATCH: 64
53 |
54 | SCHED: "WarmupMultiStepLR"
55 | STEPS: [15, 25]
56 | GAMMA: 0.1
57 |
58 | WARMUP_FACTOR: 0.01
59 | WARMUP_ITERS: 5
60 |
61 | CHECKPOINT_PERIOD: 10
62 |
63 | TEST:
64 | EVAL_PERIOD: 5
65 | IMS_PER_BATCH: 128
66 |
67 | CUDNN_BENCHMARK: True
68 |
69 | OUTPUT_DIR: "projects/PartialReID/logs/test_partial"
70 |
--------------------------------------------------------------------------------
/fast-reid/projects/PartialReID/partialreid/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: liaoxingyu5@jd.com
5 | """
6 |
7 | from .partial_dataset import *
8 | from .partialbaseline import PartialBaseline
9 | from .dsr_head import DSRHead
10 | from .config import add_partialreid_config
11 | from .dsr_evaluation import DsrEvaluator
12 |
--------------------------------------------------------------------------------
/fast-reid/projects/PartialReID/partialreid/config.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: l1aoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from fastreid.config import CfgNode as CN
8 |
9 |
10 | def add_partialreid_config(cfg):
11 | _C = cfg
12 |
13 | _C.TEST.DSR = CN()
14 | _C.TEST.DSR.ENABLED = True
15 |
16 |
--------------------------------------------------------------------------------
/fast-reid/projects/PartialReID/partialreid/dsr_distance.py:
--------------------------------------------------------------------------------
1 | """Numpy version of euclidean distance, etc.
2 | Notice the input/output shape of methods, so that you can better understand
3 | the meaning of these methods."""
4 |
5 | import torch
6 | import numpy as np
7 |
8 |
9 | def normalize(nparray, order=2, axis=0):
10 | """Normalize a N-D numpy array along the specified axis."""
11 | norm = np.linalg.norm(nparray, ord=order, axis=axis, keepdims=True)
12 | return nparray / (norm + np.finfo(np.float32).eps)
13 |
14 |
15 | def compute_dsr_dist(array1, array2, distmat, scores):
16 | """ Compute the sptial feature reconstruction of all pairs
17 | array: [M, N, C] M: the number of query, N: the number of spatial feature, C: the dimension of each spatial feature
18 | array2: [M, N, C] M: the number of gallery
19 | :return:
20 | numpy array with shape [m1, m2]
21 | """
22 | dist = 100 * torch.ones(len(array1), len(array2))
23 | dist = dist.cuda()
24 | kappa = 0.001
25 | index = np.argsort(distmat, axis=1)
26 | T = kappa * torch.eye(110)
27 | T = T.cuda()
28 | M = []
29 | for i in range(0, len(array2)):
30 | g = array2[i]
31 | g = torch.FloatTensor(g)
32 | g = g.view(g.size(0), g.size(1))
33 | g = g.cuda()
34 | Proj_M1 = torch.matmul(torch.inverse(torch.matmul(g.t(), g) + T), g.t())
35 | Proj_M1 = Proj_M1.cpu().numpy()
36 | M.append(Proj_M1)
37 | for i in range(0, len(array1)):
38 | q = torch.FloatTensor(array1[i])
39 | q = q.view(q.size(0), q.size(1))
40 | q = q.cuda()
41 | for j in range(0, 100):
42 | g = array2[index[i, j]]
43 | g = torch.FloatTensor(g)
44 | g = g.view(g.size(0), g.size(1))
45 | g = g.cuda()
46 | Proj_M = torch.FloatTensor(M[index[i, j]])
47 | Proj_M = Proj_M.cuda()
48 | a = torch.matmul(g, torch.matmul(Proj_M, q)) - q
49 | dist[i, index[i, j]] = ((torch.pow(a, 2).sum(0).sqrt()) * scores[i]).sum()
50 | dist = dist.cpu()
51 | dist = dist.numpy()
52 |
53 | return dist
54 |
--------------------------------------------------------------------------------
/fast-reid/projects/PartialReID/partialreid/partialbaseline.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @authorr: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from fastreid.modeling.losses import *
8 | from fastreid.modeling.meta_arch import Baseline
9 | from fastreid.modeling.meta_arch.build import META_ARCH_REGISTRY
10 |
11 |
12 | @META_ARCH_REGISTRY.register()
13 | class PartialBaseline(Baseline):
14 |
15 | def losses(self, outputs, gt_labels):
16 | cls_outputs, fore_cls_outputs, pred_class_logits, global_feat, fore_feat = outputs
17 | loss_dict = {}
18 | loss_names = self._cfg.MODEL.LOSSES.NAME
19 |
20 | # Log prediction accuracy
21 | CrossEntropyLoss.log_accuracy(pred_class_logits, gt_labels)
22 |
23 | if "CrossEntropyLoss" in loss_names:
24 | loss_dict['loss_avg_branch_cls'] = CrossEntropyLoss(self._cfg)(cls_outputs, gt_labels)
25 | loss_dict['loss_fore_branch_cls'] = CrossEntropyLoss(self._cfg)(fore_cls_outputs, gt_labels)
26 |
27 | if "TripletLoss" in loss_names:
28 | loss_dict['loss_avg_branch_triplet'] = TripletLoss(self._cfg)(global_feat, gt_labels)
29 | loss_dict['loss_fore_branch_triplet'] = TripletLoss(self._cfg)(fore_feat, gt_labels)
30 |
31 | return loss_dict
32 |
--------------------------------------------------------------------------------
/fast-reid/projects/README.md:
--------------------------------------------------------------------------------
1 |
2 | Here are a few projects that are built on fastreid.
3 | They are examples of how to use fastrei as a library, to make your projects more maintainable.
4 |
5 | # Projects by JDAI
6 |
7 | Note that these are research projects, and therefore may not have the same level of support or stability of fastreid.
8 |
9 | - [Deep Spatial Feature Reconstruction for Partial Person Re-identification](https://github.com/JDAI-CV/fast-reid/tree/master/projects/PartialReID)
10 |
11 | # External Projects
12 |
13 | External projects in the community that use fastreid:
14 |
15 |
--------------------------------------------------------------------------------
/fast-reid/start.sh:
--------------------------------------------------------------------------------
1 | CKER_ADDRESS=registry.aibee.cn/aibee/torchpp:1.4.2
2 | docker pull $DOCKER_ADDRESS
3 | docker run --shm-size=128gb -it -d \
4 | --network=host \
5 | -e COLUMNS=`tput cols` \
6 | -e LINES=`tput lines` \
7 | -v /etc/localtime:/etc/localtime:ro \
8 | -v /ssd:/ssd \
9 | -v /mnt:/mnt \
10 | -v $PWD/..:/workspace \
11 | $DOCKER_ADDRESS \
12 | bash
13 |
14 |
--------------------------------------------------------------------------------
/fast-reid/start_docker.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | DOCKER_ADDRESS=registry.aibee.cn/aibee/torchpp:1.4.2
4 | docker pull $DOCKER_ADDRESS
5 | nvidia-docker run --shm-size=128gb -it --rm -d \
6 | --network=host \
7 | -e COLUMNS=`tput cols` \
8 | -e LINES=`tput lines` \
9 | -v /etc/localtime:/etc/localtime:ro \
10 | -v /ssd:/ssd \
11 | -v /mnt:/mnt \
12 | -v $PWD/..:/workspace \
13 | -p 12355:12355 \
14 | $DOCKER_ADDRESS \
15 | bash
16 |
--------------------------------------------------------------------------------
/fast-reid/tests/__init__.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: sherlock
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
--------------------------------------------------------------------------------
/fast-reid/tests/dataset_test.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: liaoxingyu
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import sys
8 | sys.path.append('.')
9 | from data import get_dataloader
10 | from config import cfg
11 | import argparse
12 | from data.datasets import init_dataset
13 | # cfg.DATALOADER.SAMPLER = 'triplet'
14 | cfg.DATASETS.NAMES = ("market1501", "dukemtmc", "cuhk03", "msmt17",)
15 |
16 |
17 | if __name__ == '__main__':
18 | parser = argparse.ArgumentParser(description="ReID Baseline Training")
19 | parser.add_argument(
20 | '-cfg', "--config_file",
21 | default="",
22 | metavar="FILE",
23 | help="path to config file",
24 | type=str
25 | )
26 | # parser.add_argument("--local_rank", type=int, default=0)
27 | parser.add_argument("opts", help="Modify config options using the command-line", default=None,
28 | nargs=argparse.REMAINDER)
29 | args = parser.parse_args()
30 | cfg.merge_from_list(args.opts)
31 |
32 | # dataset = init_dataset('msmt17', combineall=True)
33 | get_dataloader(cfg)
34 | # tng_dataloader, val_dataloader, num_classes, num_query = get_dataloader(cfg)
35 | # def get_ex(): return open_image('datasets/beijingStation/query/000245_c10s2_1561732033722.000000.jpg')
36 | # im = get_ex()
37 | # print(data.train_ds[0])
38 | # print(data.test_ds[0])
39 | # a = next(iter(data.train_dl))
40 | # from IPython import embed; embed()
41 | # from ipdb import set_trace; set_trace()
42 | # im.apply_tfms(crop_pad(size=(300, 300)))
43 |
--------------------------------------------------------------------------------
/fast-reid/tests/feature_align.py:
--------------------------------------------------------------------------------
1 | import unittest
2 | import numpy as np
3 | import os
4 | from glob import glob
5 |
6 |
7 | class TestFeatureAlign(unittest.TestCase):
8 | def test_caffe_pytorch_feat_align(self):
9 | caffe_feat_path = "/export/home/lxy/cvpalgo-fast-reid/tools/deploy/caffe_R50_output"
10 | pytorch_feat_path = "/export/home/lxy/cvpalgo-fast-reid/demo/logs/R50_256x128_pytorch_feat_output"
11 | feat_filenames = os.listdir(caffe_feat_path)
12 | for feat_name in feat_filenames:
13 | caffe_feat = np.load(os.path.join(caffe_feat_path, feat_name))
14 | pytorch_feat = np.load(os.path.join(pytorch_feat_path, feat_name))
15 | sim = np.dot(caffe_feat, pytorch_feat.transpose())[0][0]
16 | assert sim > 0.97, f"Got similarity {sim} and feature of {feat_name} is not aligned"
17 |
18 | def test_model_performance(self):
19 | caffe_feat_path = "/export/home/lxy/cvpalgo-fast-reid/tools/deploy/caffe_R50_output"
20 | feat_filenames = os.listdir(caffe_feat_path)
21 | feats = []
22 | for feat_name in feat_filenames:
23 | caffe_feat = np.load(os.path.join(caffe_feat_path, feat_name))
24 | feats.append(caffe_feat)
25 | from ipdb import set_trace; set_trace()
26 |
27 |
28 |
29 | if __name__ == '__main__':
30 | unittest.main()
31 |
--------------------------------------------------------------------------------
/fast-reid/tests/interp_test.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from fastai.vision import *
3 | from fastai.basic_data import *
4 | from fastai.layers import *
5 |
6 | import sys
7 | sys.path.append('.')
8 | from engine.interpreter import ReidInterpretation
9 |
10 | from data import get_data_bunch
11 | from modeling import build_model
12 | from config import cfg
13 | cfg.DATASETS.NAMES = ('market1501',)
14 | cfg.DATASETS.TEST_NAMES = 'market1501'
15 | cfg.MODEL.BACKBONE = 'resnet50'
16 |
17 | data_bunch, test_labels, num_query = get_data_bunch(cfg)
18 |
19 | model = build_model(cfg, 10)
20 | model.load_params_wo_fc(torch.load('logs/2019.8.14/market/baseline/models/model_149.pth')['model'])
21 | learn = Learner(data_bunch, model)
22 |
23 | feats, _ = learn.get_preds(DatasetType.Test, activ=Lambda(lambda x: x))
--------------------------------------------------------------------------------
/fast-reid/tests/lr_scheduler_test.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import unittest
3 |
4 | import torch
5 | from torch import nn
6 |
7 | sys.path.append('.')
8 | from solver.lr_scheduler import WarmupMultiStepLR
9 | from solver.build import make_optimizer
10 | from config import cfg
11 |
12 |
13 | class MyTestCase(unittest.TestCase):
14 | def test_something(self):
15 | net = nn.Linear(10, 10)
16 | optimizer = make_optimizer(cfg, net)
17 | lr_scheduler = WarmupMultiStepLR(optimizer, [20, 40], warmup_iters=10)
18 | for i in range(50):
19 | lr_scheduler.step()
20 | for j in range(3):
21 | print(i, lr_scheduler.get_lr()[0])
22 | optimizer.step()
23 |
24 |
25 | if __name__ == '__main__':
26 | unittest.main()
27 |
--------------------------------------------------------------------------------
/fast-reid/tests/model_test.py:
--------------------------------------------------------------------------------
1 | import unittest
2 |
3 | import torch
4 |
5 | import sys
6 | sys.path.append('.')
7 | from fastreid.config import cfg
8 | from fastreid.modeling.backbones import build_resnet_backbone
9 | from fastreid.modeling.backbones.resnet_ibn_a import se_resnet101_ibn_a
10 | from torch import nn
11 |
12 |
13 | class MyTestCase(unittest.TestCase):
14 | def test_se_resnet101(self):
15 | cfg.MODEL.BACKBONE.NAME = 'resnet101'
16 | cfg.MODEL.BACKBONE.DEPTH = 101
17 | cfg.MODEL.BACKBONE.WITH_IBN = True
18 | cfg.MODEL.BACKBONE.WITH_SE = True
19 | cfg.MODEL.BACKBONE.PRETRAIN_PATH = '/export/home/lxy/.cache/torch/checkpoints/se_resnet101_ibn_a.pth.tar'
20 |
21 | net1 = build_resnet_backbone(cfg)
22 | net1.cuda()
23 | net2 = nn.DataParallel(se_resnet101_ibn_a())
24 | res = net2.load_state_dict(torch.load(cfg.MODEL.BACKBONE.PRETRAIN_PATH)['state_dict'], strict=False)
25 | net2.cuda()
26 | x = torch.randn(10, 3, 256, 128).cuda()
27 | y1 = net1(x)
28 | y2 = net2(x)
29 | assert y1.sum() == y2.sum(), 'train mode problem'
30 | net1.eval()
31 | net2.eval()
32 | y1 = net1(x)
33 | y2 = net2(x)
34 | assert y1.sum() == y2.sum(), 'eval mode problem'
35 |
36 |
37 | if __name__ == '__main__':
38 | unittest.main()
39 |
--------------------------------------------------------------------------------
/fast-reid/tests/sampler_test.py:
--------------------------------------------------------------------------------
1 | import unittest
2 | import sys
3 | sys.path.append('.')
4 | from fastreid.data.samplers import TrainingSampler
5 |
6 |
7 | class SamplerTestCase(unittest.TestCase):
8 | def test_training_sampler(self):
9 | sampler = TrainingSampler(5)
10 | for i in sampler:
11 | from ipdb import set_trace; set_trace()
12 | print(i)
13 |
14 |
15 | if __name__ == '__main__':
16 | unittest.main()
17 |
--------------------------------------------------------------------------------
/fast-reid/tools/deploy/Caffe/ReadMe.md:
--------------------------------------------------------------------------------
1 | # The Caffe in nn_tools Provides some convenient API
2 | If there are some problem in parse your prototxt or caffemodel, Please replace
3 | the caffe.proto with your own version and compile it with command
4 | `protoc --python_out ./ caffe.proto`
5 |
6 | ## caffe_net.py
7 | Using `from nn_tools.Caffe import caffe_net` to import this model
8 | ### Prototxt
9 | + `net=caffe_net.Prototxt(file_name)` to open a prototxt file
10 | + `net.init_caffemodel(caffe_cmd_path='caffe')` to generate a caffemodel file in the current work directory \
11 | if your `caffe` cmd not in the $PATH, specify your caffe cmd path by the `caffe_cmd_path` kwargs.
12 | ### Caffemodel
13 | + `net=caffe_net.Caffemodel(file_name)` to open a caffemodel
14 | + `net.save_prototxt(path)` to save the caffemodel to a prototxt file (not containing the weight data)
15 | + `net.get_layer_data(layer_name)` return the numpy ndarray data of the layer
16 | + `net.set_layer_date(layer_name, datas)` specify the data of one layer in the caffemodel .`datas` is normally a list of numpy ndarray `[weights,bias]`
17 | + `net.save(path)` save the changed caffemodel
18 | ### Functions for both Prototxt and Caffemodel
19 | + `net.add_layer(layer_params,before='',after='')` add a new layer with `Layer_Param` object
20 | + `net.remove_layer_by_name(layer_name)`
21 | + `net.get_layer_by_name(layer_name)` or `net.layer(layer_name)` get the raw Layer object defined in caffe_pb2
22 |
--------------------------------------------------------------------------------
/fast-reid/tools/deploy/Caffe/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/fast-reid/tools/deploy/Caffe/__init__.py
--------------------------------------------------------------------------------
/fast-reid/tools/deploy/Caffe/caffe_lmdb.py:
--------------------------------------------------------------------------------
1 | import lmdb
2 | from Caffe import caffe_pb2 as pb2
3 | import numpy as np
4 |
5 | class Read_Caffe_LMDB():
6 | def __init__(self,path,dtype=np.uint8):
7 |
8 | self.env=lmdb.open(path, readonly=True)
9 | self.dtype=dtype
10 | self.txn=self.env.begin()
11 | self.cursor=self.txn.cursor()
12 |
13 | @staticmethod
14 | def to_numpy(value,dtype=np.uint8):
15 | datum = pb2.Datum()
16 | datum.ParseFromString(value)
17 | flat_x = np.fromstring(datum.data, dtype=dtype)
18 | data = flat_x.reshape(datum.channels, datum.height, datum.width)
19 | label=flat_x = datum.label
20 | return data,label
21 |
22 | def iterator(self):
23 | while True:
24 | key,value=self.cursor.key(),self.cursor.value()
25 | yield self.to_numpy(value,self.dtype)
26 | if not self.cursor.next():
27 | return
28 |
29 | def __iter__(self):
30 | self.cursor.first()
31 | it = self.iterator()
32 | return it
33 |
34 | def __len__(self):
35 | return int(self.env.stat()['entries'])
36 |
--------------------------------------------------------------------------------
/fast-reid/tools/deploy/Caffe/net.py:
--------------------------------------------------------------------------------
1 | raise ImportError,'the nn_tools.Caffe.net is no longer used, please use nn_tools.Caffe.caffe_net'
--------------------------------------------------------------------------------
/fast-reid/tools/deploy/caffe_export.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import argparse
8 |
9 | import torch
10 | import sys
11 | sys.path.append('../../')
12 |
13 | import pytorch_to_caffe
14 | from fastreid.config import get_cfg
15 | from fastreid.modeling.meta_arch import build_model
16 | from fastreid.utils.file_io import PathManager
17 | from fastreid.utils.checkpoint import Checkpointer
18 | from fastreid.utils.logger import setup_logger
19 |
20 | logger = setup_logger(name='caffe_export')
21 |
22 |
23 | def setup_cfg(args):
24 | cfg = get_cfg()
25 | cfg.merge_from_file(args.config_file)
26 | cfg.merge_from_list(args.opts)
27 | cfg.freeze()
28 | return cfg
29 |
30 |
31 | def get_parser():
32 | parser = argparse.ArgumentParser(description="Convert Pytorch to Caffe model")
33 |
34 | parser.add_argument(
35 | "--config-file",
36 | metavar="FILE",
37 | help="path to config file",
38 | )
39 | parser.add_argument(
40 | "--name",
41 | default="baseline",
42 | help="name for converted model"
43 | )
44 | parser.add_argument(
45 | "--output",
46 | default='caffe_model',
47 | help='path to save converted caffe model'
48 | )
49 | parser.add_argument(
50 | "--opts",
51 | help="Modify config options using the command-line 'KEY VALUE' pairs",
52 | default=[],
53 | nargs=argparse.REMAINDER,
54 | )
55 | return parser
56 |
57 |
58 | if __name__ == '__main__':
59 | args = get_parser().parse_args()
60 | cfg = setup_cfg(args)
61 |
62 | cfg.defrost()
63 | cfg.MODEL.BACKBONE.PRETRAIN = False
64 | cfg.MODEL.HEADS.POOL_LAYER = "identity"
65 | cfg.MODEL.BACKBONE.WITH_NL = False
66 |
67 | model = build_model(cfg)
68 | Checkpointer(model).load(cfg.MODEL.WEIGHTS)
69 | model.eval()
70 | logger.info(model)
71 |
72 | inputs = torch.randn(1, 3, cfg.INPUT.SIZE_TEST[0], cfg.INPUT.SIZE_TEST[1])
73 | PathManager.mkdirs(args.output)
74 | pytorch_to_caffe.trans_net(model, inputs, args.name)
75 | pytorch_to_caffe.save_prototxt(f"{args.output}/{args.name}.prototxt")
76 | pytorch_to_caffe.save_caffemodel(f"{args.output}/{args.name}.caffemodel")
77 |
78 | logger.info(f"Export caffe model in {args.output} sucessfully!")
79 |
--------------------------------------------------------------------------------
/fast-reid/tools/deploy/run_export.sh:
--------------------------------------------------------------------------------
1 | python caffe_export.py --config-file /export/home/lxy/cvpalgo-fast-reid/logs/dukemtmc/R34/config.yaml \
2 | --name "baseline_R34" \
3 | --output logs/caffe_R34 \
4 | --opts MODEL.WEIGHTS /export/home/lxy/cvpalgo-fast-reid/logs/dukemtmc/R34/model_final.pth
5 |
--------------------------------------------------------------------------------
/fast-reid/tools/deploy/trt_export.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: xingyu liao
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | import argparse
8 | import os
9 | import numpy as np
10 | import sys
11 |
12 | sys.path.append('../../')
13 | sys.path.append("/export/home/lxy/runtimelib-tensorrt-tiny/build")
14 |
15 | import pytrt
16 | from fastreid.utils.logger import setup_logger
17 | from fastreid.utils.file_io import PathManager
18 |
19 |
20 | logger = setup_logger(name='trt_export')
21 |
22 |
23 | def get_parser():
24 | parser = argparse.ArgumentParser(description="Convert ONNX to TRT model")
25 |
26 | parser.add_argument(
27 | "--name",
28 | default="baseline",
29 | help="name for converted model"
30 | )
31 | parser.add_argument(
32 | "--output",
33 | default='outputs/trt_model',
34 | help='path to save converted trt model'
35 | )
36 | parser.add_argument(
37 | "--onnx-model",
38 | default='outputs/onnx_model/baseline.onnx',
39 | help='path to onnx model'
40 | )
41 | parser.add_argument(
42 | "--height",
43 | type=int,
44 | default=256,
45 | help="height of image"
46 | )
47 | parser.add_argument(
48 | "--width",
49 | type=int,
50 | default=128,
51 | help="width of image"
52 | )
53 | return parser
54 |
55 |
56 | def export_trt_model(onnxModel, engineFile, input_numpy_array):
57 | r"""
58 | Export a model to trt format.
59 | """
60 |
61 | trt = pytrt.Trt()
62 |
63 | customOutput = []
64 | maxBatchSize = 1
65 | calibratorData = []
66 | mode = 2
67 | trt.CreateEngine(onnxModel, engineFile, customOutput, maxBatchSize, mode, calibratorData)
68 | trt.DoInference(input_numpy_array) # slightly different from c++
69 | return 0
70 |
71 |
72 | if __name__ == '__main__':
73 | args = get_parser().parse_args()
74 |
75 | inputs = np.zeros(shape=(32, args.height, args.width, 3))
76 | onnxModel = args.onnx_model
77 | engineFile = os.path.join(args.output, args.name+'.engine')
78 |
79 | PathManager.mkdirs(args.output)
80 | export_trt_model(onnxModel, engineFile, inputs)
81 |
82 | logger.info(f"Export trt model in {args.output} successfully!")
83 |
--------------------------------------------------------------------------------
/fast-reid/tools/mot17_test.log:
--------------------------------------------------------------------------------
1 | 2020-09-03 19:01:19,591 - root - INFO - start processing ch01005_20200609090000.mp4.cut.mp4
2 | 2020-09-03 19:01:51,146 - root - INFO - processing ch01005_20200609090000.mp4.cut.mp4 done.
3 | 2020-09-03 19:01:51,352 - root - INFO - start processing ch01001_20200609090000.mp4.cut.mp4
4 | 2020-09-03 19:01:53,871 - root - INFO - processing ch01001_20200609090000.mp4.cut.mp4 done.
5 | 2020-09-03 19:01:53,883 - root - INFO - start processing ch01003_20200609090000.mp4.cut.mp4
6 | 2020-09-03 19:02:09,003 - root - INFO - processing ch01003_20200609090000.mp4.cut.mp4 done.
7 | 2020-09-03 19:02:09,112 - root - INFO - start processing ch01002_20200609090000.mp4.cut.mp4
8 | 2020-09-03 19:02:25,516 - root - INFO - processing ch01002_20200609090000.mp4.cut.mp4 done.
9 | 2020-09-03 19:02:25,556 - root - INFO - All done, total collected 2104 pids, 4459 imgs
10 |
--------------------------------------------------------------------------------
/fast-reid/tools/mot17_train.log:
--------------------------------------------------------------------------------
1 | 2020-09-02 19:15:59,171 - root - INFO - start processing ch01710_20200616090000.mp4.cut.mp4
2 | 2020-09-02 19:16:02,357 - root - INFO - processing ch01710_20200616090000.mp4.cut.mp4 done.
3 | 2020-09-02 19:16:02,377 - root - INFO - start processing ch01702_20200616090000.mp4.cut.mp4
4 | 2020-09-02 19:16:05,374 - root - INFO - processing ch01702_20200616090000.mp4.cut.mp4 done.
5 | 2020-09-02 19:16:05,388 - root - INFO - start processing ch01704_20200616090000.mp4.cut.mp4
6 | 2020-09-02 19:16:09,996 - root - INFO - processing ch01704_20200616090000.mp4.cut.mp4 done.
7 | 2020-09-02 19:16:10,017 - root - INFO - start processing ch01705_20200616090000.mp4.cut.mp4
8 | 2020-09-02 19:16:11,127 - root - INFO - processing ch01705_20200616090000.mp4.cut.mp4 done.
9 | 2020-09-02 19:16:11,133 - root - INFO - start processing ch01709_20200616090000.mp4.cut.mp4
10 | 2020-09-02 19:16:13,985 - root - INFO - processing ch01709_20200616090000.mp4.cut.mp4 done.
11 | 2020-09-02 19:16:14,006 - root - INFO - start processing ch01713_20200616090000.mp4.cut.mp4
12 | 2020-09-02 19:16:17,115 - root - INFO - processing ch01713_20200616090000.mp4.cut.mp4 done.
13 | 2020-09-02 19:16:17,140 - root - INFO - start processing ch01711_20200616090000.mp4.cut.mp4
14 | 2020-09-02 19:16:21,891 - root - INFO - processing ch01711_20200616090000.mp4.cut.mp4 done.
15 | 2020-09-02 19:16:21,902 - root - INFO - All done, total collected 472 pids, 2389 imgs
16 |
--------------------------------------------------------------------------------
/fast-reid/tools/split_train_eval.py:
--------------------------------------------------------------------------------
1 | import os
2 | import os.path as osp
3 | import sys
4 | import random
5 | from collections import defaultdict
6 |
7 | label_file = '/ssd/zphe/data/NAIC/1/A/train/label.txt'
8 | val_ratio = 0.2
9 | pid_imgs = defaultdict(list)
10 |
11 | with open(label_file, 'r') as rf:
12 | for line in rf:
13 | items = line.strip().split(':')
14 | imgname = items[0]
15 | pid = items[1]
16 | pid_imgs[pid].append(imgname)
17 |
18 | total_pids = list(pid_imgs.keys())
19 | num = len(total_pids)
20 | val_num = int(num * val_ratio)
21 |
22 | val_pids = random.sample(total_pids, val_num)
23 | train_pids = list(set(total_pids) - set(val_pids))
24 |
25 | wf = open('NAIC_train_val.txt', 'w')
26 | for pid in train_pids:
27 | for img in pid_imgs[pid]:
28 | line = img + ' ' + pid + ' 0\n'
29 | wf.write(line)
30 |
31 | for pid in val_pids:
32 | imgs = pid_imgs[pid]
33 | img_num = len(imgs)
34 | qry_num = int(img_num * 0.5)
35 | random.shuffle(imgs)
36 | for idx, img in enumerate(imgs):
37 | if idx < qry_num:
38 | line = img + ' ' + pid + ' 1\n'
39 | else:
40 | line = img + ' ' + pid + ' 2\n'
41 | wf.write(line)
--------------------------------------------------------------------------------
/fast-reid/tools/train_net.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # encoding: utf-8
3 | """
4 | @author: sherlock
5 | @contact: sherlockliao01@gmail.com
6 | """
7 |
8 | import logging
9 | import os
10 | import sys
11 |
12 | sys.path.append('.')
13 |
14 | from fastreid.config import get_cfg
15 | from fastreid.engine import DefaultTrainer, default_argument_parser, default_setup, launch
16 | from fastreid.utils.checkpoint import Checkpointer
17 | from fastreid.evaluation import ReidEvaluator
18 |
19 |
20 | class Trainer(DefaultTrainer):
21 | @classmethod
22 | def build_evaluator(cls, cfg, num_query, output_folder=None):
23 | if output_folder is None:
24 | output_folder = os.path.join(cfg.OUTPUT_DIR, "inference")
25 | return ReidEvaluator(cfg, num_query)
26 |
27 |
28 | def setup(args):
29 | """
30 | Create configs and perform basic setups.
31 | """
32 | cfg = get_cfg()
33 | cfg.merge_from_file(args.config_file)
34 | cfg.merge_from_list(args.opts)
35 | cfg.freeze()
36 | default_setup(cfg, args)
37 | return cfg
38 |
39 |
40 | def main(args):
41 | cfg = setup(args)
42 |
43 | if args.eval_only:
44 | cfg.defrost()
45 | cfg.MODEL.BACKBONE.PRETRAIN = False
46 | model = Trainer.build_model(cfg)
47 |
48 | Checkpointer(model).load(cfg.MODEL.WEIGHTS) # load trained model
49 |
50 | res = Trainer.test(cfg, model)
51 | return res
52 |
53 | trainer = Trainer(cfg)
54 | trainer.resume_or_load(resume=args.resume)
55 | return trainer.train()
56 |
57 |
58 | if __name__ == "__main__":
59 | args = default_argument_parser().parse_args()
60 | print("Command Line Args:", args)
61 | launch(
62 | main,
63 | args.num_gpus,
64 | num_machines=args.num_machines,
65 | machine_rank=args.machine_rank,
66 | dist_url=args.dist_url,
67 | args=(args,),
68 | )
69 |
--------------------------------------------------------------------------------
/images/framework.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/images/framework.png
--------------------------------------------------------------------------------
/models/StrictSimpleCaseTracker.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from torch import Tensor
3 |
4 |
5 | class ImpossibleTracker:
6 | def __init__(self, threshold):
7 | self.threshold = threshold
8 |
9 | def xywhtoxyxy(self, bbox: Tensor):
10 | new_bbox = bbox
11 | new_bbox[:, 2] += bbox[:, 0]
12 | new_bbox[:, 3] += bbox[:, 1]
13 | return new_bbox
14 |
15 | def forward(self, tracker_tensors, detections_tensor, sample_window_size):
16 | # M, T, C
17 | track_frames, track_apps, track_masks, track_bboxs = tracker_tensors["frames"], tracker_tensors["apps"], \
18 | tracker_tensors["masks"], tracker_tensors["bboxs"]
19 | # N, C
20 | detection_apps, detection_bboxs = detections_tensor["app"], detections_tensor["bbox"]
21 |
22 | track_num = track_frames.size()[0]
23 |
24 | frame_gap = sample_window_size - track_frames[torch.arange(track_num), torch.sum(track_masks, dim=1) - 1]
25 |
26 | track_fv_bboxs = track_bboxs[torch.arange(track_bboxs.size()[0]), torch.sum(track_masks, dim=1) - 1, :]
27 |
28 | det_radius = torch.sqrt(detection_bboxs[..., 2] * detection_bboxs[..., 3])
29 |
30 | det_track_elu_dis_matrix = torch.cdist(detection_bboxs[None, ..., :2] + detection_bboxs[None, ..., 2:]/2,
31 | track_fv_bboxs[None, ..., :2] + track_fv_bboxs[None, ..., 2:] / 2,
32 | p=2) / det_radius[None, :, None] / frame_gap[None, None, :]
33 |
34 | return det_track_elu_dis_matrix < self.threshold
35 |
--------------------------------------------------------------------------------
/models/TemporalEncoder.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import math
4 |
5 | from models.EdgeTransformer import EdgeTransformerEncoderLayer, TransformerEncoderEdge
6 |
7 |
8 | class TemporalTransformerEncoderLayer(nn.Module):
9 | def __init__(self, track_history_len=5, input_feature_dim=256, head_num=8, num_layers=2, dropout=0.0,
10 | dim_feedforward=1024):
11 | super(TemporalTransformerEncoderLayer, self).__init__()
12 | self.T = track_history_len
13 | self.input_feature_dim = input_feature_dim
14 | print(input_feature_dim, head_num)
15 | self.encoder_layer = nn.TransformerEncoderLayer(d_model=input_feature_dim, nhead=head_num, dropout=dropout,
16 | dim_feedforward=dim_feedforward)
17 | self.encoder = nn.TransformerEncoder(self.encoder_layer, num_layers=num_layers)
18 |
19 | def forward(self, Fs, track_mask=None):
20 | return self.encoder(Fs, mask=track_mask)
21 |
22 |
23 | class TemporalTransformerEncoderLayerEdge(nn.Module):
24 | def __init__(self, input_feature_dim=256, head_num=8, num_layers=2, dropout=0.0,
25 | dim_feedforward=1024, norm=None):
26 | super(TemporalTransformerEncoderLayerEdge, self).__init__()
27 | self.input_feature_dim = input_feature_dim
28 | self.encoder_layer = EdgeTransformerEncoderLayer(d_model=input_feature_dim, nhead=head_num, dropout=dropout,
29 | dim_feedforward=dim_feedforward)
30 | self.encoder = TransformerEncoderEdge(self.encoder_layer, num_layers=num_layers, norm=norm)
31 |
32 | def forward(self, Fs, track_mask=None, edge_score_matrix=None, relative_style="add"):
33 | return self.encoder(Fs, mask=track_mask, src_relative_matrix=edge_score_matrix, relative_style=relative_style)
34 |
--------------------------------------------------------------------------------
/models/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/models/__init__.py
--------------------------------------------------------------------------------
/models/model_factory.py:
--------------------------------------------------------------------------------
1 | import torch
2 |
3 | from models import TranSTAM, TranSTAMCal
4 |
5 | from models.loss import SetCriterion, PosNegBalanceListCriterion
6 |
7 |
8 | def build_model(args):
9 | criterion = SetCriterion()
10 |
11 | if args.model == "tran_stam":
12 | model = TranSTAM.PEMOT(
13 | history_window_size=args.track_history_len,
14 | track_valid_size=args.cache_window_size,
15 | appearance_feature_dim=args.app_dim,
16 | pos_feature_dim=args.pos_dim,
17 | n_heads=args.nheads,
18 | dim_feedforward=args.dim_feedforward,
19 | dropout=args.dropout,
20 | hidden_dim=args.hidden_dim,
21 | enc_layer_num=args.enc_layer_num,
22 | dec_layer_num=args.dec_layer_num,
23 | with_abs_pe=args.with_abs_pe == "with_abs_pe",
24 | with_relative_pe=args.with_relative_pe == "with_relative_pe",
25 | with_assignment_pe=args.with_assignment_pe == "with_assignment_pe",
26 | aspe_style=args.aspe_style
27 | )
28 | criterion = PosNegBalanceListCriterion()
29 | elif args.model == "tran_stam_cal":
30 | model = TranSTAMCal.PEMOT(
31 | history_window_size=args.track_history_len,
32 | track_valid_size=args.cache_window_size,
33 | appearance_feature_dim=args.app_dim,
34 | pos_feature_dim=args.pos_dim,
35 | n_heads=args.nheads,
36 | dim_feedforward=args.dim_feedforward,
37 | dropout=args.dropout,
38 | hidden_dim=args.hidden_dim,
39 | enc_layer_num=args.enc_layer_num,
40 | dec_layer_num=args.dec_layer_num,
41 | with_abs_pe=args.with_abs_pe == "with_abs_pe",
42 | with_relative_pe=args.with_relative_pe == "with_relative_pe",
43 | with_assignment_pe=args.with_assignment_pe == "with_assignment_pe",
44 | aspe_style=args.aspe_style
45 | )
46 | else:
47 | raise NotImplementedError("This {} model not implement now!".format(args.model))
48 | return model, criterion
49 |
--------------------------------------------------------------------------------
/models/utils.py:
--------------------------------------------------------------------------------
1 | import torch.nn as nn
2 | import torch.nn.functional as F
3 |
4 |
5 | class MLP(nn.Module):
6 | """ Very simple multi-layer perceptron (also called FFN)"""
7 |
8 | def __init__(self, input_dim, hidden_dim, output_dim, num_layers):
9 | super().__init__()
10 | self.num_layers = num_layers
11 | h = [hidden_dim] * (num_layers - 1)
12 | self.layers = nn.ModuleList(nn.Linear(n, k) for n, k in zip([input_dim] + h, h + [output_dim]))
13 |
14 | def forward(self, x):
15 | for i, layer in enumerate(self.layers):
16 | x = F.relu(layer(x)) if i < self.num_layers - 1 else layer(x)
17 | return x
18 |
19 |
20 | def _get_activation_fn(activation):
21 | if activation == "relu":
22 | return F.relu
23 | elif activation == "gelu":
24 | return F.gelu
25 |
26 | raise RuntimeError("activation should be relu/gelu, not {}".format(activation))
--------------------------------------------------------------------------------
/proto/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/proto/__init__.py
--------------------------------------------------------------------------------
/proto/common.proto:
--------------------------------------------------------------------------------
1 | /* Proto definition for common components. */
2 |
3 | syntax = "proto3";
4 |
5 | enum DetectionType {
6 | DETECTION_TYPE_SDP = 0;
7 | DETECTION_TYPE_DPM = 1;
8 | DETECTION_TYPE_FRCNN = 2;
9 | }
10 |
11 | message TrackingDetection {
12 | uint32 frame_index = 1;
13 | uint32 detection_id = 2;
14 | float detection_score = 3;
15 | int32 box_x = 4;
16 | int32 box_y = 5;
17 | int32 box_width = 6;
18 | int32 box_height = 7;
19 | AppearanceFeatures features = 8;
20 | }
21 |
22 | message AppearanceFeatures {
23 | repeated Appearance features = 1;
24 | uint32 dim = 2;
25 | }
26 |
27 | message Appearance {
28 | repeated float feats = 1;
29 | }
30 |
--------------------------------------------------------------------------------
/proto/detection_results.proto:
--------------------------------------------------------------------------------
1 | /* Proto definition for detection results. */
2 |
3 | syntax = "proto3";
4 |
5 | import "common.proto";
6 |
7 | message Detections {
8 | repeated TrackingDetection tracked_detections = 1;
9 | DetectionType detection_type = 2;
10 | string appearance_model_url = 3;
11 | }
12 |
--------------------------------------------------------------------------------
/proto/online_tracking_results.proto:
--------------------------------------------------------------------------------
1 | /* Proto definition for tracking results. */
2 |
3 | syntax = "proto3";
4 |
5 | import "common.proto";
6 |
7 | message Tracks {
8 | repeated Track tracks = 1;
9 | DetectionType detection_type = 2;
10 | string appearance_model_url = 3;
11 | }
12 |
13 |
14 | message Track {
15 | float confidence = 1;
16 | string track_id = 2;
17 | AppearanceFeatures features = 3;
18 | repeated TrackingDetection tracked_detections = 4;
19 | uint32 tracklet_id = 5;
20 | }
21 |
--------------------------------------------------------------------------------
/scripts/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/scripts/__init__.py
--------------------------------------------------------------------------------
/scripts/build_3folder_cross_dataset.sh:
--------------------------------------------------------------------------------
1 |
2 | ROOTDIR=$1
3 |
4 | cd ${ROOTDIR} || exit
5 |
6 | mkdir "Split1"
7 | cp *02*.pb Split1
8 | cp *10*.pb Split1
9 | cp *13*.pb Split1
10 |
11 | mkdir "Split2"
12 | cp *04*.pb Split2
13 | cp *11*.pb Split2
14 |
15 | mkdir "Split3"
16 | cp *05*.pb Split3
17 | cp *09*.pb Split3
18 |
19 | mkdir "Split12"
20 | mkdir "Split13"
21 | mkdir "Split23"
22 |
23 | cp -r Split1/* Split12/
24 | cp -r Split2/* Split12/
25 | cp -r Split2/* Split23/
26 | cp -r Split3/* Split23/
27 | cp -r Split3/* Split13/
28 | cp -r Split1/* Split13/
29 |
30 | cd /root/transtam || exit
31 |
32 | python datasets/pre_load_static_dataset.py --dataset_dir ${ROOTDIR}/Split12 --hdf5_path ${ROOTDIR}/train_Split12.hdf5
33 |
34 | python datasets/pre_load_static_dataset.py --dataset_dir ${ROOTDIR}/Split13 --hdf5_path ${ROOTDIR}/train_Split13.hdf5
35 |
36 | python datasets/pre_load_static_dataset.py --dataset_dir ${ROOTDIR}/Split23 --hdf5_path ${ROOTDIR}/train_Split23.hdf5
37 |
38 | python datasets/pre_load_static_dataset.py --dataset_dir ${ROOTDIR}/Split1 --hdf5_path ${ROOTDIR}/eval_Split1.hdf5
39 |
40 | python datasets/pre_load_static_dataset.py --dataset_dir ${ROOTDIR}/Split2 --hdf5_path ${ROOTDIR}/eval_Split2.hdf5
41 |
42 | python datasets/pre_load_static_dataset.py --dataset_dir ${ROOTDIR}/Split3 --hdf5_path ${ROOTDIR}/eval_Split3.hdf5
43 |
--------------------------------------------------------------------------------
/scripts/build_train_dataset.sh:
--------------------------------------------------------------------------------
1 | ROOTDIR=$1
2 |
3 | cd ${ROOTDIR} || exit
4 |
5 |
6 | mkdir "train"
7 |
8 | cp *02*.pb "train"
9 | cp *10*.pb "train"
10 | cp *13*.pb "train"
11 | cp *04*.pb "train"
12 | cp *11*.pb "train"
13 | cp *05*.pb "train"
14 | cp *09*.pb "train"
15 |
16 | mkdir "test"
17 |
18 |
19 | cp *01*.pb "test"
20 | cp *03*.pb "test"
21 | cp *06*.pb "test"
22 | cp *07*.pb "test"
23 | cp *08*.pb "test"
24 | cp *12*.pb "test"
25 | cp *14*.pb "test"
26 |
27 |
--------------------------------------------------------------------------------
/scripts/convert_pb_to_json.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | sys.path.append(os.path.join(os.path.dirname(__file__), "../proto/"))
4 |
5 | import detection_results_pb2
6 |
7 | import argparse
8 | import json
9 | from imutils.paths import list_files
10 |
11 |
12 | def get_parser():
13 | parser = argparse.ArgumentParser()
14 | parser.add_argument("--det_box_dir", type=str, help="dir of det bboxes pb files")
15 | parser.add_argument("--output_dir", type=str, help="dir of generate json files dir")
16 | return parser
17 |
18 |
19 | def load_pb(det_bbox_pb_file):
20 | detections_pb = detection_results_pb2.Detections()
21 | with open(det_bbox_pb_file, 'rb') as f:
22 | detections_pb.ParseFromString(f.read())
23 | return detections_pb
24 |
25 |
26 | def convert_detections_to_json(detections_pb, json_file):
27 |
28 | global_track_id = 1
29 |
30 | res = {}
31 |
32 | track_id_map = {}
33 |
34 | for detection in detections_pb.tracked_detections:
35 | frame_index = detection.frame_index
36 | track_id = detection.detection_id
37 |
38 | if track_id_map.get(track_id) is not None:
39 | track_id = track_id_map[track_id]
40 | else:
41 | track_id_map[track_id] = global_track_id
42 | track_id = global_track_id
43 | global_track_id += 1
44 |
45 | x = detection.box_x
46 | y = detection.box_y
47 | h = detection.box_height
48 | w = detection.box_width
49 | bbx = [float(x), float(y), float(w), float(h)]
50 | res.setdefault(frame_index, []).append([bbx, track_id])
51 |
52 | with open(json_file, 'w') as f2:
53 | json.dump(res, f2)
54 |
55 |
56 | if __name__ == '__main__':
57 | parser = get_parser()
58 | args = parser.parse_args()
59 |
60 | pb_files = list(list_files(args.det_box_dir, validExts=".pb"))
61 |
62 | if not os.path.exists(args.output_dir):
63 | os.makedirs(args.output_dir, exist_ok=True)
64 |
65 | for pb_file in pb_files:
66 | detections_pb = load_pb(pb_file)
67 | pb_name = os.path.basename(pb_file).split('.')[0]
68 | json_file = os.path.join(args.output_dir, "{}.mp4.final.reduced.json".format(pb_name))
69 | convert_detections_to_json(detections_pb, json_file)
70 |
--------------------------------------------------------------------------------
/scripts/convert_pb_to_txt.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | sys.path.append(os.path.join(os.path.dirname(__file__), "../proto/"))
4 |
5 | import detection_results_pb2
6 |
7 | import argparse
8 | import json
9 | from imutils.paths import list_files
10 |
11 |
12 | def get_parser():
13 | parser = argparse.ArgumentParser()
14 | parser.add_argument("--det_box_dir", type=str, help="dir of det bboxes pb files")
15 | parser.add_argument("--output_dir", type=str, help="dir of generate txt files dir")
16 | return parser
17 |
18 |
19 | def load_pb(det_bbox_pb_file):
20 | detections_pb = detection_results_pb2.Detections()
21 | with open(det_bbox_pb_file, 'rb') as f:
22 | detections_pb.ParseFromString(f.read())
23 | return detections_pb
24 |
25 |
26 | def convert_detections_to_json(detections_pb, json_file):
27 |
28 | res = {}
29 |
30 | txt_to_write = []
31 | for detection in detections_pb.tracked_detections:
32 | frame_index = detection.frame_index
33 | track_id = detection.detection_id
34 |
35 | x = detection.box_x
36 | y = detection.box_y
37 | h = detection.box_height
38 | w = detection.box_width
39 | bbx = [float(x), float(y), float(w), float(h)]
40 | res.setdefault(frame_index, []).append([bbx, track_id])
41 | txt_to_write.append("{},{},{},{},{},{},-1,-1,-1,-1\n".format(frame_index, track_id, x, y, w, h))
42 |
43 | with open(json_file, 'w') as f2:
44 | f2.writelines(txt_to_write)
45 |
46 |
47 | if __name__ == '__main__':
48 | parser = get_parser()
49 | args = parser.parse_args()
50 |
51 | pb_files = list(list_files(args.det_box_dir, validExts=".pb"))
52 |
53 | if not os.path.exists(args.output_dir):
54 | os.makedirs(args.output_dir, exist_ok=True)
55 |
56 | for pb_file in pb_files:
57 | detections_pb = load_pb(pb_file)
58 | pb_name = os.path.basename(pb_file).split('.')[0]
59 | json_file = os.path.join(args.output_dir, "{}.txt".format(pb_name))
60 | convert_detections_to_json(detections_pb, json_file)
61 |
--------------------------------------------------------------------------------
/scripts/convert_txt_to_json.py:
--------------------------------------------------------------------------------
1 | import json
2 | import argparse
3 | import os
4 |
5 |
6 | def convert_txt_to_json(txt_file, json_file):
7 | res = {}
8 | with open(txt_file, 'r+') as f1:
9 | for line in f1:
10 | infos = line.rstrip()
11 | infos = infos.split(',')
12 | frame = int(infos[0])
13 | tid = int(round(float(infos[1])))
14 | bbx = [float(infos[2]), float(infos[3]), float(infos[4]), float(infos[5])]
15 | res.setdefault(frame, []).append([bbx, tid])
16 |
17 | with open(json_file, 'w') as f2:
18 | json.dump(res, f2)
19 |
20 |
21 | if __name__ == '__main__':
22 | parser = argparse.ArgumentParser()
23 | parser.add_argument("--predict_dir", type=str, required=True, help="predict txt directory")
24 | parser.add_argument('--out_path', type=str, required=True, help="output json files directory")
25 | args = parser.parse_args()
26 |
27 | if not os.path.exists(args.out_path):
28 | os.makedirs(args.out_path)
29 |
30 | for result_txt in os.listdir(args.predict_dir):
31 | if result_txt.endswith(".txt"):
32 | video_name = os.path.basename(result_txt).split('.')[0]
33 | output_json_file = os.path.join(args.out_path, video_name + ".mp4.final.reduced.json")
34 | convert_txt_to_json(os.path.join(args.predict_dir, result_txt), output_json_file)
35 |
--------------------------------------------------------------------------------
/scripts/inference_with_trained_model.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | python test.py --enc_layer_num 2 --dec_layer_num 2 --app_dim 256 --pos_dim 4 \
4 | --track_history_len 150 --dim_feedforward 1024 --hidden_dim 256 --dropout 0.0 --nheads 8 --drop_simple_case \
5 | --to_inference_pb_dir ./data/TMOH_17_pbs_pca --with_abs_pe "with_abs_pe" --with_relative_pe "with_relative_pe" --with_assignment_pe "with_assignment_pe" \
6 | --output_dir ./inference_result --resume ./data/model_weights/checkpoint0009.pth --match_threshold 0.2 --model "tran_stam"
7 |
8 | python scripts/post_process_trajectory.py --predict_dir ./inference_result \
9 | --out_path ./inference_result_post/ --not_include_move_camera 1
10 |
11 | echo "Tracking Result is saved in ./inference_result_post/"
--------------------------------------------------------------------------------
/scripts/train.sh:
--------------------------------------------------------------------------------
1 | TAG=$1
2 | MODEL=$2
3 | LAYERNUM=$3
4 | TRAINHDF5=$4
5 |
6 | mkdir ./output_${TAG}
7 |
8 | TRAINHDF5=${TRAINHDF5}
9 |
10 | python3 -m torch.distributed.launch --nproc_per_node=8 --use_env train.py --enc_layer_num ${LAYERNUM} --dec_layer_num ${LAYERNUM} --clip_max_norm 0.5 --lr 0.001 --hidden_dim 256 \
11 | --dim_feedforward 1024 --weight_decay 0.0001 --root_dir ${TRAINHDF5} --batch_size 4 --epochs 10 --lr_drop 20 \
12 | --track_history_len 50 --model ${MODEL} --dropout 0.0 --app_dim 256 --tag ${TAG} --output_dir ./output_${TAG} \
13 | --num_workers 0 --test_per_epoch 5
14 |
15 | echo "Trained model path is ./output_${TAG}/checkpoint0009.pth"
16 |
--------------------------------------------------------------------------------
/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/icicle4/TranSTAM/f90d8037eb3cd07590a87791e7d5ed1fcf9d318d/utils/__init__.py
--------------------------------------------------------------------------------
/utils/matcher.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 |
3 | from scipy.optimize import linear_sum_assignment
4 |
5 |
6 | def xywh2xyxy(bbox):
7 | x, y, w, h = bbox
8 | return [x, y, x+w, y + h]
9 |
10 |
11 | def single_batch_iou(bbox1, bbox2):
12 | xmin1, ymin1, xmax1, ymax1 = bbox1
13 | xmin2, ymin2, xmax2, ymax2 = bbox2
14 |
15 | w1, h1 = xmax1 - xmin1, ymax1 - ymin1
16 | w2, h2 = xmax2 - xmin2, ymax2 - ymin2
17 |
18 | cross_x = max((w1 + w2) - (max(xmax2, xmax1) - min(xmin1, xmin2)) , 0)
19 | cross_y = max((h1 + h2) - (max(ymax2, ymax1) - min(ymin1, ymin2)) , 0)
20 | inter = cross_x * cross_y
21 | union = (w1 * h1) + (w2 * h2) - inter
22 | return inter / (union + 1e-5)
23 |
24 |
25 | def iou(A,B):
26 | M, N = len(A), len(B)
27 | iou_matrix = np.zeros((M, N))
28 | for i in range(M):
29 | for j in range(N):
30 | iou_matrix[i, j] = single_batch_iou(A[i], B[j])
31 | return iou_matrix
32 |
33 |
34 | class HungarianMatcher:
35 | def __init__(self, iou_threshold):
36 | self.iou_threshold = iou_threshold
37 |
38 | def __call__(self, gts, detects):
39 | gt_boxs = [xywh2xyxy(gt["bbox"]) for gt in gts]
40 | det_boxs = [xywh2xyxy(det["bbox"]) for det in detects]
41 | iou_matrix = iou(np.asarray(gt_boxs, dtype=np.float32),
42 | np.asarray(det_boxs, dtype=np.float32))
43 |
44 | match_cost_matrix = 1 - iou_matrix
45 |
46 | row_ind, col_ind = linear_sum_assignment(match_cost_matrix)
47 |
48 | match_paris = []
49 | for row, col in zip(row_ind, col_ind):
50 | if iou_matrix[row, col] > self.iou_threshold:
51 | match_paris.append(
52 | (row, col)
53 | )
54 |
55 | return match_paris
56 |
57 |
58 | if __name__ == '__main__':
59 | A = [[1, 1, 3, 3], [0, 0, 2, 2]]
60 | B = [[1, 1, 3, 3], [0, 0, 2, 2], [-1, -1, 1, 1]]
61 |
62 | print(iou(A, B))
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------