├── .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 | 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 | --------------------------------------------------------------------------------