From 1e628f87bd893f86d5708dc770b3bf24ddf30111 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:16:09 -0400 Subject: [PATCH 01/12] fix duplicated YAML keys --- .../configs/CenterNet2_R2-101-DCN-BiFPN_1280_4x.yaml | 3 +-- .../CenterNet2/configs/CenterNet2_R2-101-DCN_896_4x.yaml | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN-BiFPN_1280_4x.yaml b/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN-BiFPN_1280_4x.yaml index e07574b..673f0c9 100644 --- a/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN-BiFPN_1280_4x.yaml +++ b/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN-BiFPN_1280_4x.yaml @@ -17,8 +17,6 @@ MODEL: USE_DEFORMABLE: True ROI_HEADS: IN_FEATURES: ["p3", "p4"] -INPUT: - FORMAT: RGB TEST: EVAL_PERIOD: 7500 SOLVER: @@ -30,3 +28,4 @@ SOLVER: INPUT: CUSTOM_AUG: EfficientDetResizeCrop TRAIN_SIZE: 1280 + FORMAT: RGB diff --git a/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN_896_4x.yaml b/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN_896_4x.yaml index fd6c49e..46deb85 100644 --- a/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN_896_4x.yaml +++ b/srl_handler/models/CenterNet2/configs/CenterNet2_R2-101-DCN_896_4x.yaml @@ -14,8 +14,6 @@ MODEL: USE_DEFORMABLE: True ROI_HEADS: IN_FEATURES: ["p3", "p4"] -INPUT: - FORMAT: RGB TEST: EVAL_PERIOD: 7500 SOLVER: @@ -26,4 +24,5 @@ SOLVER: IMS_PER_BATCH: 32 INPUT: CUSTOM_AUG: EfficientDetResizeCrop - TRAIN_SIZE: 896 \ No newline at end of file + TRAIN_SIZE: 896 + FORMAT: RGB \ No newline at end of file From f38454f93bf7ced35e540ef3059c51ee21b4978b Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:25:49 -0400 Subject: [PATCH 02/12] change comparison with None --- object_tracking/tools/visualize.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/object_tracking/tools/visualize.py b/object_tracking/tools/visualize.py index 0f8c61d..5b0a4cd 100644 --- a/object_tracking/tools/visualize.py +++ b/object_tracking/tools/visualize.py @@ -18,7 +18,7 @@ def visualize_subject( vid_height, vid_width, _ = list_frames[0].shape - if list_track_ids == None: + if list_track_ids is None: list_track_ids = list(json_data['track_map'].keys()) if json_data['subject'] is not None: list_track_ids.remove(json_data['subject']) @@ -64,7 +64,7 @@ def visualize(json_data: dict, list_track_ids: list, data_dir: str, vid_save_pat pass vid_height, vid_width, _ = list_frames[0].shape - if list_track_ids == None: + if list_track_ids is None: list_track_ids = list(json_data['track_map'].keys()) for track_id in list_track_ids: From 736781f4d3e716f15250a1cf41616bcc84f1343f Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:32:03 -0400 Subject: [PATCH 03/12] rewrite list creation with list literal --- .../reid/torchreid/models/mobilenetv2.py | 3 +-- object_tracking/reid/torchreid/models/osnet.py | 3 +-- object_tracking/reid/torchreid/models/pcb.py | 13 ++++--------- object_tracking/reid/torchreid/models/resnet.py | 11 ++++------- .../reid/torchreid/models/resnet_ibn_b.py | 3 +-- object_tracking/reid/torchreid/models/resnetmid.py | 3 +-- object_tracking/reid/torchreid/models/senet.py | 9 +++------ 7 files changed, 15 insertions(+), 30 deletions(-) diff --git a/object_tracking/reid/torchreid/models/mobilenetv2.py b/object_tracking/reid/torchreid/models/mobilenetv2.py index c451ef8..1c398b5 100644 --- a/object_tracking/reid/torchreid/models/mobilenetv2.py +++ b/object_tracking/reid/torchreid/models/mobilenetv2.py @@ -130,8 +130,7 @@ def _make_layer(self, block, t, c, n, s): # c: output channels # n: number of blocks # s: stride for first layer - layers = [] - layers.append(block(self.in_channels, c, t, s)) + layers = [block(self.in_channels, c, t, s)] self.in_channels = c for i in range(1, n): layers.append(block(self.in_channels, c, t)) diff --git a/object_tracking/reid/torchreid/models/osnet.py b/object_tracking/reid/torchreid/models/osnet.py index b77388f..a66aa9c 100644 --- a/object_tracking/reid/torchreid/models/osnet.py +++ b/object_tracking/reid/torchreid/models/osnet.py @@ -351,9 +351,8 @@ def _make_layer( reduce_spatial_size, IN=False ): - layers = [] + layers = [block(in_channels, out_channels, IN=IN)] - layers.append(block(in_channels, out_channels, IN=IN)) for i in range(1, layer): layers.append(block(out_channels, out_channels, IN=IN)) diff --git a/object_tracking/reid/torchreid/models/pcb.py b/object_tracking/reid/torchreid/models/pcb.py index 92c7414..b155744 100644 --- a/object_tracking/reid/torchreid/models/pcb.py +++ b/object_tracking/reid/torchreid/models/pcb.py @@ -109,13 +109,9 @@ class DimReduceLayer(nn.Module): def __init__(self, in_channels, out_channels, nonlinear): super(DimReduceLayer, self).__init__() - layers = [] - layers.append( - nn.Conv2d( - in_channels, out_channels, 1, stride=1, padding=0, bias=False - ) - ) - layers.append(nn.BatchNorm2d(out_channels)) + layers = [nn.Conv2d( + in_channels, out_channels, 1, stride=1, padding=0, bias=False + ), nn.BatchNorm2d(out_channels)] if nonlinear == 'relu': layers.append(nn.ReLU(inplace=True)) @@ -199,8 +195,7 @@ def _make_layer(self, block, planes, blocks, stride=1): nn.BatchNorm2d(planes * block.expansion), ) - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) + layers = [block(self.inplanes, planes, stride, downsample)] self.inplanes = planes * block.expansion for i in range(1, blocks): layers.append(block(self.inplanes, planes)) diff --git a/object_tracking/reid/torchreid/models/resnet.py b/object_tracking/reid/torchreid/models/resnet.py index 63d7f43..7f45397 100644 --- a/object_tracking/reid/torchreid/models/resnet.py +++ b/object_tracking/reid/torchreid/models/resnet.py @@ -267,13 +267,10 @@ def _make_layer(self, block, planes, blocks, stride=1, dilate=False): norm_layer(planes * block.expansion), ) - layers = [] - layers.append( - block( - self.inplanes, planes, stride, downsample, self.groups, - self.base_width, previous_dilation, norm_layer - ) - ) + layers = [block( + self.inplanes, planes, stride, downsample, self.groups, + self.base_width, previous_dilation, norm_layer + )] self.inplanes = planes * block.expansion for _ in range(1, blocks): layers.append( diff --git a/object_tracking/reid/torchreid/models/resnet_ibn_b.py b/object_tracking/reid/torchreid/models/resnet_ibn_b.py index 9881cc7..6908cc7 100644 --- a/object_tracking/reid/torchreid/models/resnet_ibn_b.py +++ b/object_tracking/reid/torchreid/models/resnet_ibn_b.py @@ -181,8 +181,7 @@ def _make_layer(self, block, planes, blocks, stride=1, IN=False): nn.BatchNorm2d(planes * block.expansion), ) - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) + layers = [block(self.inplanes, planes, stride, downsample)] self.inplanes = planes * block.expansion for i in range(1, blocks - 1): layers.append(block(self.inplanes, planes)) diff --git a/object_tracking/reid/torchreid/models/resnetmid.py b/object_tracking/reid/torchreid/models/resnetmid.py index 017f6c6..b559c54 100644 --- a/object_tracking/reid/torchreid/models/resnetmid.py +++ b/object_tracking/reid/torchreid/models/resnetmid.py @@ -169,8 +169,7 @@ def _make_layer(self, block, planes, blocks, stride=1): nn.BatchNorm2d(planes * block.expansion), ) - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) + layers = [block(self.inplanes, planes, stride, downsample)] self.inplanes = planes * block.expansion for i in range(1, blocks): layers.append(block(self.inplanes, planes)) diff --git a/object_tracking/reid/torchreid/models/senet.py b/object_tracking/reid/torchreid/models/senet.py index baaf9b0..e72cea8 100644 --- a/object_tracking/reid/torchreid/models/senet.py +++ b/object_tracking/reid/torchreid/models/senet.py @@ -438,12 +438,9 @@ def _make_layer( nn.BatchNorm2d(planes * block.expansion), ) - layers = [] - layers.append( - block( - self.inplanes, planes, groups, reduction, stride, downsample - ) - ) + layers = [block( + self.inplanes, planes, groups, reduction, stride, downsample + )] self.inplanes = planes * block.expansion for i in range(1, blocks): layers.append(block(self.inplanes, planes, groups, reduction)) From 3a7905ffdbc6de264bc2b8c27751d3f0e9fbf320 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:33:12 -0400 Subject: [PATCH 04/12] rewrite dictionary creation with dictionary literal --- classifier/tools/train.py | 4 +--- classifier/train_jeepsuv.py | 4 +--- object_tracking/test/deepsort_v3.py | 3 +-- object_tracking/test/deepsort_v4.py | 3 +-- retrieval_model/tools/extract_box_feature.py | 3 +-- 5 files changed, 5 insertions(+), 12 deletions(-) diff --git a/classifier/tools/train.py b/classifier/tools/train.py index 575a6ba..e2e4a16 100644 --- a/classifier/tools/train.py +++ b/classifier/tools/train.py @@ -63,9 +63,7 @@ def train_model_type(model, cfg, csv_path: str, json_path: str, box_dir: str, up lr_scheduler = optim.lr_scheduler.ReduceLROnPlateau( optimizer, mode='max', factor=0.1, patience=5, min_lr=1e-07, eps=1e-07, verbose=True) - dataloaders = {} - dataloaders['train'] = train_dataloader - dataloaders['val'] = val_dataloader + dataloaders = {'train': train_dataloader, 'val': val_dataloader} save_path = osp.join(cfg['save_path'], cfg['date'], cfg['type']) os.makedirs(save_path, exist_ok=True) diff --git a/classifier/train_jeepsuv.py b/classifier/train_jeepsuv.py index 656cff2..b20a609 100644 --- a/classifier/train_jeepsuv.py +++ b/classifier/train_jeepsuv.py @@ -57,9 +57,7 @@ def train_model_type(model, cfg, csv_path: str, json_path: str, box_dir: str): lr_scheduler = optim.lr_scheduler.ReduceLROnPlateau( optimizer, mode='min', factor=0.1, patience=10, min_lr=1e-07, eps=1e-07, verbose=True) - dataloaders = {} - dataloaders['train'] = train_dataloader - dataloaders['val'] = val_dataloader + dataloaders = {'train': train_dataloader, 'val': val_dataloader} save_path = osp.join(cfg['save_path'], cfg['date'], cfg['type']) os.makedirs(save_path, exist_ok=True) diff --git a/object_tracking/test/deepsort_v3.py b/object_tracking/test/deepsort_v3.py index 180b5ba..34eff4c 100644 --- a/object_tracking/test/deepsort_v3.py +++ b/object_tracking/test/deepsort_v3.py @@ -93,8 +93,7 @@ def tracking(config: dict, json_save_dir: str, vis_save_dir: str, verbose=True): id_num = str(track.track_id) #Get the ID for the particular track. features = track.features #Get the feature vector corresponding to the detection. - track_dict = {} - track_dict["id"] = id_num + track_dict = {"id": id_num} ans_box = get_closest_box(detections_class, bbox) bbox = ans_box diff --git a/object_tracking/test/deepsort_v4.py b/object_tracking/test/deepsort_v4.py index 4089f7d..9e007aa 100644 --- a/object_tracking/test/deepsort_v4.py +++ b/object_tracking/test/deepsort_v4.py @@ -89,8 +89,7 @@ def tracking(config: dict, json_save_dir: str, vis_save_dir: str, verbose=False) bbox = track.to_tlbr() #Get the corrected/predicted bounding box id_num = str(track.track_id) #Get the ID for the particular track. feature = track.last_feature #Get the feature vector corresponding to the detection. - track_dict = {} - track_dict["id"] = id_num + track_dict = {"id": id_num} ans_box = get_closest_box(detections_class, bbox) bbox = ans_box diff --git a/retrieval_model/tools/extract_box_feature.py b/retrieval_model/tools/extract_box_feature.py index 2de7c2d..c10025c 100644 --- a/retrieval_model/tools/extract_box_feature.py +++ b/retrieval_model/tools/extract_box_feature.py @@ -55,8 +55,7 @@ def extract_box_feat(model, cfg, mode: str): fail_result = {} for track_id in tqdm(box_dict.keys()): - ans = {} - ans[track_id] = {} + ans = {track_id: {}} fail_result[track_id] = [] filename = f'{track_id}.pickle' save_path = os.path.join(cfg['SAVE_FEATURE_DIR'], filename) From 43e08fbaa4d8a5a443a2a3cd1769a538a546e065 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:34:13 -0400 Subject: [PATCH 05/12] simplify boolean variable check --- object_tracking/deepsort.py | 2 +- object_tracking/deepsort_feat.py | 2 +- object_tracking/test/evaluate_subject.py | 2 +- object_tracking/test/subject_v1.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/object_tracking/deepsort.py b/object_tracking/deepsort.py index 0b2f994..c2dcc32 100644 --- a/object_tracking/deepsort.py +++ b/object_tracking/deepsort.py @@ -17,7 +17,7 @@ def reset_tracker(self): self.tracker= Tracker(self.metric, max_age=12, n_init=1) def run_deep_sort(self, out_scores, out_boxes, features): - if out_boxes==[]: + if not out_boxes: self.tracker.predict() print('No detections') trackers = self.tracker.tracks diff --git a/object_tracking/deepsort_feat.py b/object_tracking/deepsort_feat.py index 1a5714d..0e6ffc2 100644 --- a/object_tracking/deepsort_feat.py +++ b/object_tracking/deepsort_feat.py @@ -18,7 +18,7 @@ def reset_tracker(self): self.tracker= Tracker(self.metric, max_age=12, n_init=1) def run_deep_sort(self, out_scores, out_boxes, features): - if out_boxes==[]: + if not out_boxes: self.tracker.predict() print('No detections') trackers = self.tracker.tracks diff --git a/object_tracking/test/evaluate_subject.py b/object_tracking/test/evaluate_subject.py index 553d1bd..5fb55cc 100644 --- a/object_tracking/test/evaluate_subject.py +++ b/object_tracking/test/evaluate_subject.py @@ -34,7 +34,7 @@ def evaluate(gt_boxes: list, cand_tracks: list): gt_box = gt_boxes[frame_idx] inside = is_box_in_box(gt_box, track_box) - if inside == True: + if inside: iou = 1.0 else: iou = calculate_iou(gt_box, track_box) diff --git a/object_tracking/test/subject_v1.py b/object_tracking/test/subject_v1.py index 6071497..8616500 100644 --- a/object_tracking/test/subject_v1.py +++ b/object_tracking/test/subject_v1.py @@ -142,7 +142,7 @@ def main(): for sample in list_csv: json_path = osp.join(old_json_dir, f"{sample['track_id']}.json") data = json_load(json_path) - if sample['is_perfect'] == True: + if sample['is_perfect']: best_track_id = sample['best_tracks'][0] data['subject'] = best_track_id else: From 47ad2899ef18e13d288f9757e393bbcae2d397cd Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:40:58 -0400 Subject: [PATCH 06/12] remove unnecessary backslash in expression --- .../modeling/dense_heads/centernet.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py b/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py index 3f21be7..e121535 100644 --- a/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py +++ b/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py @@ -288,11 +288,11 @@ def _get_ground_truth(self, grids, shapes_per_level, gt_instances): centers = ((boxes[:, [0, 1]] + boxes[:, [2, 3]]) / 2) # N x 2 centers_expanded = centers.view(1, N, 2).expand(M, N, 2) # M x N x 2 strides_expanded = strides.view(M, 1, 1).expand(M, N, 2) - centers_discret = ((centers_expanded / strides_expanded).int() * \ - strides_expanded).float() + strides_expanded / 2 # M x N x 2 + centers_discret = ((centers_expanded / strides_expanded).int() * + strides_expanded).float() + strides_expanded / 2 # M x N x 2 - is_peak = (((grids.view(M, 1, 2).expand(M, N, 2) - \ - centers_discret) ** 2).sum(dim=2) == 0) # M x N + is_peak = (((grids.view(M, 1, 2).expand(M, N, 2) - + centers_discret) ** 2).sum(dim=2) == 0) # M x N is_in_boxes = reg_target.min(dim=2)[0] > 0 # M x N is_center3x3 = self.get_center3x3( grids, centers, strides) & is_in_boxes # M x N @@ -300,8 +300,8 @@ def _get_ground_truth(self, grids, shapes_per_level, gt_instances): reg_target, reg_size_ranges) # M x N reg_mask = is_center3x3 & is_cared_in_the_level # M x N - dist2 = ((grids.view(M, 1, 2).expand(M, N, 2) - \ - centers_expanded) ** 2).sum(dim=2) # M x N + dist2 = ((grids.view(M, 1, 2).expand(M, N, 2) - + centers_expanded) ** 2).sum(dim=2) # M x N dist2[is_peak] = 0 radius2 = self.delta ** 2 * 2 * area # N radius2 = torch.clamp( @@ -405,8 +405,8 @@ def assign_reg_fpn(self, reg_targets_per_im, size_ranges): reg_targets_per_im: M x N x 4 size_ranges: M x 2 ''' - crit = ((reg_targets_per_im[:, :, :2] + \ - reg_targets_per_im[:, :, 2:])**2).sum(dim=2) ** 0.5 / 2 # M x N + crit = ((reg_targets_per_im[:, :, :2] + + reg_targets_per_im[:, :, 2:])**2).sum(dim=2) ** 0.5 / 2 # M x N is_cared_in_the_level = (crit >= size_ranges[:, [0]]) & \ (crit <= size_ranges[:, [1]]) return is_cared_in_the_level @@ -480,8 +480,8 @@ def get_center3x3(self, locations, centers, strides): locations_expanded = locations.view(M, 1, 2).expand(M, N, 2) # M x N x 2 centers_expanded = centers.view(1, N, 2).expand(M, N, 2) # M x N x 2 strides_expanded = strides.view(M, 1, 1).expand(M, N, 2) # M x N - centers_discret = ((centers_expanded / strides_expanded).int() * \ - strides_expanded).float() + strides_expanded / 2 # M x N x 2 + centers_discret = ((centers_expanded / strides_expanded).int() * + strides_expanded).float() + strides_expanded / 2 # M x N x 2 dist_x = (locations_expanded[:, :, 0] - centers_discret[:, :, 0]).abs() dist_y = (locations_expanded[:, :, 1] - centers_discret[:, :, 1]).abs() return (dist_x <= strides_expanded[:, :, 0]) & \ From d90f9794a64cd28bf03786a51e8e3e4305019ee9 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:51:51 -0400 Subject: [PATCH 07/12] change first parameter name of class methods --- .../modeling/roi_heads/custom_roi_heads.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/srl_handler/models/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py b/srl_handler/models/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py index 90fadf1..e8dd0af 100644 --- a/srl_handler/models/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py +++ b/srl_handler/models/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py @@ -22,19 +22,19 @@ @ROI_HEADS_REGISTRY.register() class CustomROIHeads(StandardROIHeads): @classmethod - def _init_box_head(self, cfg, input_shape): + def _init_box_head(cls, cfg, input_shape): ret = super()._init_box_head(cfg, input_shape) del ret['box_predictor'] ret['box_predictor'] = CustomFastRCNNOutputLayers( cfg, ret['box_head'].output_shape) - self.debug = cfg.DEBUG - if self.debug: - self.debug_show_name = cfg.DEBUG_SHOW_NAME - self.save_debug = cfg.SAVE_DEBUG - self.vis_thresh = cfg.VIS_THRESH - self.pixel_mean = torch.Tensor(cfg.MODEL.PIXEL_MEAN).to( + cls.debug = cfg.DEBUG + if cls.debug: + cls.debug_show_name = cfg.DEBUG_SHOW_NAME + cls.save_debug = cfg.SAVE_DEBUG + cls.vis_thresh = cfg.VIS_THRESH + cls.pixel_mean = torch.Tensor(cfg.MODEL.PIXEL_MEAN).to( torch.device(cfg.MODEL.DEVICE)).view(3, 1, 1) - self.pixel_std = torch.Tensor(cfg.MODEL.PIXEL_STD).to( + cls.pixel_std = torch.Tensor(cfg.MODEL.PIXEL_STD).to( torch.device(cfg.MODEL.DEVICE)).view(3, 1, 1) return ret From 2f5fcae8ed452eda1bbaafa023b220bf15caa334 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 17:57:47 -0400 Subject: [PATCH 08/12] replace mutable default argument --- object_tracking/reid/torchreid/data/transforms.py | 12 +++++++++--- object_tracking/reid/torchreid/engine/engine.py | 12 +++++++++--- object_tracking/reid/torchreid/models/hacnn.py | 4 +++- object_tracking/reid/torchreid/models/mlfn.py | 4 +++- .../reid/torchreid/utils/feature_extractor.py | 8 ++++++-- .../models/CenterNet2/centernet/modeling/debug.py | 6 +++++- 6 files changed, 35 insertions(+), 11 deletions(-) diff --git a/object_tracking/reid/torchreid/data/transforms.py b/object_tracking/reid/torchreid/data/transforms.py index 0c09ca0..86b3312 100644 --- a/object_tracking/reid/torchreid/data/transforms.py +++ b/object_tracking/reid/torchreid/data/transforms.py @@ -71,8 +71,10 @@ def __init__( sl=0.02, sh=0.4, r1=0.3, - mean=[0.4914, 0.4822, 0.4465] + mean=None ): + if mean is None: + mean = [0.4914, 0.4822, 0.4465] self.probability = probability self.mean = mean self.sl = sl @@ -234,8 +236,8 @@ def build_transforms( height, width, transforms='random_flip', - norm_mean=[0.485, 0.456, 0.406], - norm_std=[0.229, 0.224, 0.225], + norm_mean=None, + norm_std=None, **kwargs ): """Builds train and test transform functions. @@ -249,6 +251,10 @@ def build_transforms( norm_std (list or None, optional): normalization standard deviation values. Default is ImageNet standard deviation values. """ + if norm_mean is None: + norm_mean = [0.485, 0.456, 0.406] + if norm_std is None: + norm_std = [0.229, 0.224, 0.225] if transforms is None: transforms = [] diff --git a/object_tracking/reid/torchreid/engine/engine.py b/object_tracking/reid/torchreid/engine/engine.py index 5fe3e25..a7142b2 100644 --- a/object_tracking/reid/torchreid/engine/engine.py +++ b/object_tracking/reid/torchreid/engine/engine.py @@ -126,7 +126,7 @@ def run( visrank=False, visrank_topk=10, use_metric_cuhk03=False, - ranks=[1, 5, 10, 20], + ranks=None, rerank=False ): r"""A unified pipeline for training and evaluating a model. @@ -160,6 +160,8 @@ def run( Default is False. This is only enabled when test_only=True. """ + if ranks is None: + ranks = [1, 5, 10, 20] if visrank and not test_only: raise ValueError( 'visrank can be set to True only if test_only=True' @@ -297,7 +299,7 @@ def test( visrank_topk=10, save_dir='', use_metric_cuhk03=False, - ranks=[1, 5, 10, 20], + ranks=None, rerank=False ): r"""Tests model on target datasets. @@ -313,6 +315,8 @@ def test( ``extract_features()`` and ``parse_data_for_eval()`` (most of the time), but not a must. Please refer to the source code for more details. """ + if ranks is None: + ranks = [1, 5, 10, 20] self.set_model_mode('eval') targets = list(self.test_loader.keys()) @@ -353,9 +357,11 @@ def _evaluate( visrank_topk=10, save_dir='', use_metric_cuhk03=False, - ranks=[1, 5, 10, 20], + ranks=None, rerank=False ): + if ranks is None: + ranks = [1, 5, 10, 20] batch_time = AverageMeter() def _feature_extraction(data_loader): diff --git a/object_tracking/reid/torchreid/models/hacnn.py b/object_tracking/reid/torchreid/models/hacnn.py index f21cc82..6c17123 100644 --- a/object_tracking/reid/torchreid/models/hacnn.py +++ b/object_tracking/reid/torchreid/models/hacnn.py @@ -211,13 +211,15 @@ def __init__( self, num_classes, loss='softmax', - nchannels=[128, 256, 384], + nchannels=None, feat_dim=512, learn_region=True, use_gpu=True, **kwargs ): super(HACNN, self).__init__() + if nchannels is None: + nchannels = [128, 256, 384] self.loss = loss self.learn_region = learn_region self.use_gpu = use_gpu diff --git a/object_tracking/reid/torchreid/models/mlfn.py b/object_tracking/reid/torchreid/models/mlfn.py index ac7e126..9cc4e92 100644 --- a/object_tracking/reid/torchreid/models/mlfn.py +++ b/object_tracking/reid/torchreid/models/mlfn.py @@ -111,11 +111,13 @@ def __init__( num_classes, loss='softmax', groups=32, - channels=[64, 256, 512, 1024, 2048], + channels=None, embed_dim=1024, **kwargs ): super(MLFN, self).__init__() + if channels is None: + channels = [64, 256, 512, 1024, 2048] self.loss = loss self.groups = groups diff --git a/object_tracking/reid/torchreid/utils/feature_extractor.py b/object_tracking/reid/torchreid/utils/feature_extractor.py index 3fb9d90..4d3e179 100644 --- a/object_tracking/reid/torchreid/utils/feature_extractor.py +++ b/object_tracking/reid/torchreid/utils/feature_extractor.py @@ -61,13 +61,17 @@ def __init__( model_name='', model_path='', image_size=(256, 128), - pixel_mean=[0.485, 0.456, 0.406], - pixel_std=[0.229, 0.224, 0.225], + pixel_mean=None, + pixel_std=None, pixel_norm=True, device='cuda', verbose=True ): # Build model + if pixel_mean is None: + pixel_mean = [0.485, 0.456, 0.406] + if pixel_std is None: + pixel_std = [0.229, 0.224, 0.225] model = build_model( model_name, num_classes=1, diff --git a/srl_handler/models/CenterNet2/centernet/modeling/debug.py b/srl_handler/models/CenterNet2/centernet/modeling/debug.py index 0a4437f..50efcd4 100644 --- a/srl_handler/models/CenterNet2/centernet/modeling/debug.py +++ b/srl_handler/models/CenterNet2/centernet/modeling/debug.py @@ -139,7 +139,7 @@ def debug_train( def debug_test( - images, logits_pred, reg_pred, agn_hm_pred=[], preds=[], + images, logits_pred, reg_pred, agn_hm_pred=None, preds=None, vis_thresh=0.3, debug_show_name=False, mult_agn=False): ''' images: N x 3 x H x W @@ -147,6 +147,10 @@ def debug_test( cat_agn_heatmap: LNHiWi shapes_per_level: L x 2 [(H_i, W_i)] ''' + if agn_hm_pred is None: + agn_hm_pred = [] + if preds is None: + preds = [] N = len(images) for i in range(len(images)): image = images[i].detach().cpu().numpy().transpose(1, 2, 0) From d712ee823e43f96d1dda664853b9ffe826c8cda7 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 18:00:38 -0400 Subject: [PATCH 09/12] unwrap unnecessary non-capturing group in regex --- object_tracking/reid/torchreid/models/densenet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/object_tracking/reid/torchreid/models/densenet.py b/object_tracking/reid/torchreid/models/densenet.py index a1d9b7e..2ec48c4 100644 --- a/object_tracking/reid/torchreid/models/densenet.py +++ b/object_tracking/reid/torchreid/models/densenet.py @@ -271,7 +271,7 @@ def init_pretrained_weights(model, model_url): # They are also in the checkpoints in model_urls. This pattern is used # to find such keys. pattern = re.compile( - r'^(.*denselayer\d+\.(?:norm|relu|conv))\.((?:[12])\.(?:weight|bias|running_mean|running_var))$' + r'^(.*denselayer\d+\.(?:norm|relu|conv))\.([12]\.(?:weight|bias|running_mean|running_var))$' ) for key in list(pretrain_dict.keys()): res = pattern.match(key) From 14939f6137f90df40a6205d107b34dae80a3555c Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 18:01:23 -0400 Subject: [PATCH 10/12] remove redundant character escape in regex --- object_tracking/reid/tools/parse_test_res.py | 10 +++++----- srl_extraction/srl_extractor.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/object_tracking/reid/tools/parse_test_res.py b/object_tracking/reid/tools/parse_test_res.py index fd5b018..e21ec44 100644 --- a/object_tracking/reid/tools/parse_test_res.py +++ b/object_tracking/reid/tools/parse_test_res.py @@ -67,11 +67,11 @@ def parse_file(filepath, regex_mAP, regex_r1, regex_r5, regex_r10, regex_r20): def main(args): - regex_mAP = re.compile(r'mAP: ([\.\deE+-]+)%') - regex_r1 = re.compile(r'Rank-1 : ([\.\deE+-]+)%') - regex_r5 = re.compile(r'Rank-5 : ([\.\deE+-]+)%') - regex_r10 = re.compile(r'Rank-10 : ([\.\deE+-]+)%') - regex_r20 = re.compile(r'Rank-20 : ([\.\deE+-]+)%') + regex_mAP = re.compile(r'mAP: ([.\deE+-]+)%') + regex_r1 = re.compile(r'Rank-1 : ([.\deE+-]+)%') + regex_r5 = re.compile(r'Rank-5 : ([.\deE+-]+)%') + regex_r10 = re.compile(r'Rank-10 : ([.\deE+-]+)%') + regex_r20 = re.compile(r'Rank-20 : ([.\deE+-]+)%') final_res = defaultdict(list) diff --git a/srl_extraction/srl_extractor.py b/srl_extraction/srl_extractor.py index 8d7a172..d3229c9 100644 --- a/srl_extraction/srl_extractor.py +++ b/srl_extraction/srl_extractor.py @@ -30,7 +30,7 @@ def extract_query(self, query): try: for text in extract_text: sentence = text['description'] - pos_part = re.findall(r"\[(.*?)\]", sentence) + pos_part = re.findall(r"\[(.*?)]", sentence) pos_part = [self.srl_helper.clean_query_after_out(sub_pos_part) for sub_pos_part in pos_part] list_pos_parts.append(pos_part) From f71651a7fb281c16894656415357adff54f152a6 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 18:04:39 -0400 Subject: [PATCH 11/12] replace consecutive spaces in regex with space and repeated quantifier --- object_tracking/reid/tools/parse_test_res.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/object_tracking/reid/tools/parse_test_res.py b/object_tracking/reid/tools/parse_test_res.py index e21ec44..50b21b1 100644 --- a/object_tracking/reid/tools/parse_test_res.py +++ b/object_tracking/reid/tools/parse_test_res.py @@ -68,8 +68,8 @@ def parse_file(filepath, regex_mAP, regex_r1, regex_r5, regex_r10, regex_r20): def main(args): regex_mAP = re.compile(r'mAP: ([.\deE+-]+)%') - regex_r1 = re.compile(r'Rank-1 : ([.\deE+-]+)%') - regex_r5 = re.compile(r'Rank-5 : ([.\deE+-]+)%') + regex_r1 = re.compile(r'Rank-1 {2}: ([.\deE+-]+)%') + regex_r5 = re.compile(r'Rank-5 {2}: ([.\deE+-]+)%') regex_r10 = re.compile(r'Rank-10 : ([.\deE+-]+)%') regex_r20 = re.compile(r'Rank-20 : ([.\deE+-]+)%') From 659587f8821862c38e260a55cd4538f743e53d55 Mon Sep 17 00:00:00 2001 From: Manuel Garcia <31109774+Mandroide@users.noreply.github.com> Date: Wed, 9 Jun 2021 18:06:22 -0400 Subject: [PATCH 12/12] remove redundant parentheses --- classifier/tools/visualize_prediction.py | 2 +- detector/stop_detector.py | 2 +- object_tracking/deepsort.py | 2 +- object_tracking/deepsort_feat.py | 2 +- object_tracking/reid/torchreid/models/hacnn.py | 2 +- object_tracking/test/evaluate_subject.py | 2 +- object_tracking/test/refine_v2.py | 2 +- refinement/utils.py | 4 ++-- relation_graph/test/run.py | 2 +- retrieval_model/coot/loss_fn.py | 2 +- retrieval_model/coot/trainer_retrieval.py | 2 +- srl_handler/library/text/caption.py | 6 +++--- .../centernet/modeling/dense_heads/centernet.py | 4 ++-- .../centernet/modeling/dense_heads/centernet_back.py | 4 ++-- srl_handler/utils/common.py | 8 ++++---- 15 files changed, 23 insertions(+), 23 deletions(-) diff --git a/classifier/tools/visualize_prediction.py b/classifier/tools/visualize_prediction.py index 28a5bf5..ffb4d14 100644 --- a/classifier/tools/visualize_prediction.py +++ b/classifier/tools/visualize_prediction.py @@ -72,7 +72,7 @@ def main_veh(): print(f'Visualize predictions to {save_dir}') for key, val in cfg_veh["class_map"].items(): - if (type(val) == int): + if type(val) == int: continue os.makedirs(osp.join(save_dir, val), exist_ok=True) diff --git a/detector/stop_detector.py b/detector/stop_detector.py index d3f3390..f53a1c5 100644 --- a/detector/stop_detector.py +++ b/detector/stop_detector.py @@ -30,7 +30,7 @@ def process(self, track_data: dict): print(f'mean distance: {mean_distance}') print(distances) for i in range(N-self.skip_frame): - if (distances[i] < mean_distance*self.alpha): + if distances[i] < mean_distance*self.alpha: return True return False diff --git a/object_tracking/deepsort.py b/object_tracking/deepsort.py index c2dcc32..a8fd0f8 100644 --- a/object_tracking/deepsort.py +++ b/object_tracking/deepsort.py @@ -6,7 +6,7 @@ import numpy as np -class deepsort_rbc(): +class deepsort_rbc: def __init__(self): self.metric = nn_matching.NearestNeighborDistanceMetric("cosine",.5 , 70) self.tracker= Tracker(self.metric) diff --git a/object_tracking/deepsort_feat.py b/object_tracking/deepsort_feat.py index 0e6ffc2..2fe5d01 100644 --- a/object_tracking/deepsort_feat.py +++ b/object_tracking/deepsort_feat.py @@ -7,7 +7,7 @@ import numpy as np -class deepsort_rbc(): +class deepsort_rbc: def __init__(self): self.metric = nn_matching.NearestNeighborDistanceMetric("cosine",.4 , 70) self.tracker= Tracker(self.metric) diff --git a/object_tracking/reid/torchreid/models/hacnn.py b/object_tracking/reid/torchreid/models/hacnn.py index 6c17123..e29aa29 100644 --- a/object_tracking/reid/torchreid/models/hacnn.py +++ b/object_tracking/reid/torchreid/models/hacnn.py @@ -402,7 +402,7 @@ def forward(self, x): if self.loss == 'softmax': if self.learn_region: - return (prelogits_global, prelogits_local) + return prelogits_global, prelogits_local else: return prelogits_global diff --git a/object_tracking/test/evaluate_subject.py b/object_tracking/test/evaluate_subject.py index 5fb55cc..32f129b 100644 --- a/object_tracking/test/evaluate_subject.py +++ b/object_tracking/test/evaluate_subject.py @@ -42,7 +42,7 @@ def evaluate(gt_boxes: list, cand_tracks: list): # if track.track_id == '400': dist = calculate_distance(gt_box, track_box) - if (iou > ACCEPT_IOU_THRES): #or (inside == True): + if iou > ACCEPT_IOU_THRES: #or (inside == True): if start_frame == -1: start_frame = frame_idx end_frame = frame_idx diff --git a/object_tracking/test/refine_v2.py b/object_tracking/test/refine_v2.py index fb3eee1..62252e3 100644 --- a/object_tracking/test/refine_v2.py +++ b/object_tracking/test/refine_v2.py @@ -12,7 +12,7 @@ def get_center_point(box: list): # xyxy - return ((box[0]+box[1])/2, (box[2]+box[3])/2) + return (box[0] + box[1]) / 2, (box[2] + box[3]) / 2 def check_wrong_boxes(track_data: TrackResult): dist_meter = AverageMeter() diff --git a/refinement/utils.py b/refinement/utils.py index dc593a9..b01c0a9 100644 --- a/refinement/utils.py +++ b/refinement/utils.py @@ -116,7 +116,7 @@ def get_priority_list_by_action(top_keys_visual, query_actions): elif (is_list_in_list(query_actions, [LABEL_MAP['stop']]) and not is_list_in_list(query_actions, [LABEL_MAP['turn']]) ): - if (order_visual in STRICT_STOP): + if order_visual in STRICT_STOP: list_a.append(key_visual) pass else: @@ -126,7 +126,7 @@ def get_priority_list_by_action(top_keys_visual, query_actions): elif (is_list_in_list(query_actions, [LABEL_MAP['turn']]) and not is_list_in_list(query_actions, [LABEL_MAP['stop']]) ): - if (order_visual in STRICT_TURN): + if order_visual in STRICT_TURN: list_a.append(key_visual) pass else: diff --git a/relation_graph/test/run.py b/relation_graph/test/run.py index 5d9abdc..8188e16 100644 --- a/relation_graph/test/run.py +++ b/relation_graph/test/run.py @@ -205,7 +205,7 @@ def main(): visualize(data, None, DATA_DIR, SAVE_DIR_VIDEO, row_dict, val_id) ans.append(row_dict) count += 1 - if (count >= 10): + if count >= 10: break ans_df = pd.DataFrame(data=ans) diff --git a/retrieval_model/coot/loss_fn.py b/retrieval_model/coot/loss_fn.py index ce70739..57a38cd 100644 --- a/retrieval_model/coot/loss_fn.py +++ b/retrieval_model/coot/loss_fn.py @@ -101,7 +101,7 @@ def forward(self, im, s): else: return (cost_s.sum() + cost_im.sum()).div(im.shape[0] * s.shape[0]) - return (cost_s.sum() + cost_im.sum())#/(im.shape[0]) + return cost_s.sum() + cost_im.sum() #/(im.shape[0]) def compute_mean_distance_l2(c, s): diff --git a/retrieval_model/coot/trainer_retrieval.py b/retrieval_model/coot/trainer_retrieval.py index c3da49b..054ab79 100644 --- a/retrieval_model/coot/trainer_retrieval.py +++ b/retrieval_model/coot/trainer_retrieval.py @@ -100,7 +100,7 @@ def compute_align_loss(self, visual_emb: th.Tensor, text_emb: th.Tensor) -> th.T return self.loss_contr(visual_emb, text_emb) def compute_cluster_loss(self, visual_emb: th.Tensor, text_emb: th.Tensor) -> th.Tensor: - return (self.loss_contr(visual_emb, visual_emb)) + return self.loss_contr(visual_emb, visual_emb) # return (self.loss_contr(visual_emb, visual_emb) + self.loss_contr(text_emb, text_emb)) / 2 def compute_total_constrastive_loss(self, visual_data: model_retrieval.RetrievalVisualEmbTuple, diff --git a/srl_handler/library/text/caption.py b/srl_handler/library/text/caption.py index a8a939d..8826f3f 100644 --- a/srl_handler/library/text/caption.py +++ b/srl_handler/library/text/caption.py @@ -80,12 +80,12 @@ def _setup(self): action = srl['action'] obj = self._extract_object(srl) - if (not srl['is_main_subject']): + if not srl['is_main_subject']: continue - if (action in ACTION_VOCAB): + if action in ACTION_VOCAB: self.sv_format.append(self._create_sv_sample(action)) - elif (obj is not None): + elif obj is not None: self.svo_format.append(self._create_svo_sample(action, obj)) pass diff --git a/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py b/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py index e121535..c27bb1c 100644 --- a/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py +++ b/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet.py @@ -649,7 +649,7 @@ def _add_more_pos(self, reg_pred, gt_instances, shapes_per_level): c33_reg_loss.view(N * L, K)[level_masks.view(N * L), 4] = 0 # real center c33_reg_loss = c33_reg_loss.view(N, L * K) if N == 0: - loss_thresh = c33_reg_loss.new_ones((N)).float() + loss_thresh = c33_reg_loss.new_ones(N).float() else: loss_thresh = torch.kthvalue( c33_reg_loss, self.more_pos_topk, dim=1)[0] # N @@ -752,7 +752,7 @@ def _get_c33_inds(self, gt_instances, shapes_per_level): c33_regs = torch.cat(c33_regs, dim=0) c33_masks = torch.cat(c33_masks, dim=0) else: - labels = shapes_per_level.new_zeros((0)).long() + labels = shapes_per_level.new_zeros(0).long() level_masks = shapes_per_level.new_zeros((0, L)).bool() c33_inds = shapes_per_level.new_zeros((0, L, K)).long() c33_regs = shapes_per_level.new_zeros((0, L, K, 4)).float() diff --git a/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet_back.py b/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet_back.py index 8907dae..39fefd3 100644 --- a/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet_back.py +++ b/srl_handler/models/CenterNet2/centernet/modeling/dense_heads/centernet_back.py @@ -199,7 +199,7 @@ def losses( c33_reg_loss.view(N * L, K)[masks.view(N * L), 4] = 0 c33_reg_loss = c33_reg_loss.view(N, L * K) if self.more_pos == 0 or N == 0: - loss_thresh = c33_reg_loss.new_ones((N)).float() + loss_thresh = c33_reg_loss.new_ones(N).float() else: loss_thresh = torch.kthvalue( c33_reg_loss, @@ -437,7 +437,7 @@ def _get_label_inds(self, gt_instances, shapes_per_level): c33_masks = torch.cat(c33_masks, dim=0) else: center_inds = shapes_per_level.new_zeros((0, L)).long() - labels = shapes_per_level.new_zeros((0)).long() + labels = shapes_per_level.new_zeros(0).long() masks = shapes_per_level.new_zeros((0, L)).bool() regs = shapes_per_level.new_zeros((0, L, 4)).float() c33_inds = shapes_per_level.new_zeros((0, L, K)).long() diff --git a/srl_handler/utils/common.py b/srl_handler/utils/common.py index 711fd2b..f8dc836 100644 --- a/srl_handler/utils/common.py +++ b/srl_handler/utils/common.py @@ -84,7 +84,7 @@ def refine_list_colors(list_colors, unique=True): """ new_list = [] new_list = remove_redundant_colors(list_colors) - if (is_list_in_list(new_list, ['light_gray'])): + if is_list_in_list(new_list, ['light_gray']): new_list = new_list.remove('light_gray') if new_list is None or len(new_list) == 0: new_list = ['gray'] @@ -92,7 +92,7 @@ def refine_list_colors(list_colors, unique=True): new_list.append('gray') - if (is_list_in_list(new_list, ['dark_gray'])): + if is_list_in_list(new_list, ['dark_gray']): new_list = new_list.remove('dark_gray') if new_list is None or len(new_list) == 0: new_list = ['gray'] @@ -124,7 +124,7 @@ def refine_list_subjects(list_subjects, unique=True, is_subject=True): # 3. Handle ambiguous annotations # [SUV, bus-truck] = [bus-truck] - if (is_list_in_list(new_list, ['suv', 'bus-truck'])): + if is_list_in_list(new_list, ['suv', 'bus-truck']): new_list = ['suv', 'pickup'] # [jeep, SUV, ...] = [Jeep, SUV] @@ -142,7 +142,7 @@ def refine_list_subjects(list_subjects, unique=True, is_subject=True): new_list = ['suv', 'van'] # [pickup, truck] = [pickup] - elif (is_list_in_list(new_list, ['pickup', 'bus-truck'])): + elif is_list_in_list(new_list, ['pickup', 'bus-truck']): new_list = ['pickup'] # [pickup, sedan, suv] = [pickup, suv]