From 9cf1abaee6cf9c4c8e1a71957f16737ca562e96d Mon Sep 17 00:00:00 2001 From: zhiboniu Date: Wed, 18 May 2022 13:17:11 +0000 Subject: [PATCH] support attr infer --- deploy/configs/inference_attr.yaml | 33 +++++++++++ deploy/images/Pedestrain_Attr.jpg | Bin 0 -> 12531 bytes deploy/python/postprocess.py | 87 +++++++++++++++++++++++++++++ deploy/python/predict_cls.py | 21 ++++--- 4 files changed, 134 insertions(+), 7 deletions(-) create mode 100644 deploy/configs/inference_attr.yaml create mode 100644 deploy/images/Pedestrain_Attr.jpg diff --git a/deploy/configs/inference_attr.yaml b/deploy/configs/inference_attr.yaml new file mode 100644 index 00000000..d11164ee --- /dev/null +++ b/deploy/configs/inference_attr.yaml @@ -0,0 +1,33 @@ +Global: + infer_imgs: "./images/Pedestrain_Attr.jpg" + inference_model_dir: "../inference/" + batch_size: 1 + use_gpu: True + enable_mkldnn: False + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +PreProcess: + transform_ops: + - ResizeImage: + size: [192, 256] + - NormalizeImage: + scale: 1.0/255.0 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + channel_num: 3 + - ToCHWImage: + +PostProcess: + main_indicator: Attribute + Attribute: + threshold: 0.5 + glasses_threshold: 0.3 + hold_threshold: 0.6 + \ No newline at end of file diff --git a/deploy/images/Pedestrain_Attr.jpg b/deploy/images/Pedestrain_Attr.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a87e856af8c17a3b93617b93ea517b91c508619 GIT binary patch literal 12531 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 literal 0 HcmV?d00001 diff --git a/deploy/python/postprocess.py b/deploy/python/postprocess.py index 4f4d005f..f58434ad 100644 --- a/deploy/python/postprocess.py +++ b/deploy/python/postprocess.py @@ -179,3 +179,90 @@ class Binarize(object): byte[:, i:i + 1] = np.dot(x[:, i * 8:(i + 1) * 8], self.unit) return byte + + +class Attribute(object): + def __init__(self, + threshold=0.5, + glasses_threshold=0.3, + hold_threshold=0.6): + self.threshold = threshold + self.glasses_threshold = glasses_threshold + self.hold_threshold = hold_threshold + + def __call__(self, batch_preds, file_names=None): + # postprocess output of predictor + age_list = ['AgeLess18', 'Age18-60', 'AgeOver60'] + direct_list = ['Front', 'Side', 'Back'] + bag_list = ['HandBag', 'ShoulderBag', 'Backpack'] + upper_list = ['UpperStride', 'UpperLogo', 'UpperPlaid', 'UpperSplice'] + lower_list = [ + 'LowerStripe', 'LowerPattern', 'LongCoat', 'Trousers', 'Shorts', + 'Skirt&Dress' + ] + batch_res = [] + for res in batch_preds: + res = res.tolist() + label_res = [] + # gender + gender = 'Female' if res[22] > self.threshold else 'Male' + label_res.append(gender) + # age + age = age_list[np.argmax(res[19:22])] + label_res.append(age) + # direction + direction = direct_list[np.argmax(res[23:])] + label_res.append(direction) + # glasses + glasses = 'Glasses: ' + if res[1] > self.glasses_threshold: + glasses += 'True' + else: + glasses += 'False' + label_res.append(glasses) + # hat + hat = 'Hat: ' + if res[0] > self.threshold: + hat += 'True' + else: + hat += 'False' + label_res.append(hat) + # hold obj + hold_obj = 'HoldObjectsInFront: ' + if res[18] > self.hold_threshold: + hold_obj += 'True' + else: + hold_obj += 'False' + label_res.append(hold_obj) + # bag + bag = bag_list[np.argmax(res[15:18])] + bag_score = res[15 + np.argmax(res[15:18])] + bag_label = bag if bag_score > self.threshold else 'No bag' + label_res.append(bag_label) + # upper + upper_res = res[4:8] + upper_label = 'Upper:' + sleeve = 'LongSleeve' if res[3] > res[2] else 'ShortSleeve' + upper_label += ' {}'.format(sleeve) + for i, r in enumerate(upper_res): + if r > self.threshold: + upper_label += ' {}'.format(upper_list[i]) + label_res.append(upper_label) + # lower + lower_res = res[8:14] + lower_label = 'Lower: ' + has_lower = False + for i, l in enumerate(lower_res): + if l > self.threshold: + lower_label += ' {}'.format(lower_list[i]) + has_lower = True + if not has_lower: + lower_label += ' {}'.format(lower_list[np.argmax(lower_res)]) + + label_res.append(lower_label) + # shoe + shoe = 'Boots' if res[14] > self.threshold else 'No boots' + label_res.append(shoe) + + batch_res.append(label_res) + return batch_res diff --git a/deploy/python/predict_cls.py b/deploy/python/predict_cls.py index 64c07ea8..d7da15ea 100644 --- a/deploy/python/predict_cls.py +++ b/deploy/python/predict_cls.py @@ -138,13 +138,20 @@ def main(config): continue batch_results = cls_predictor.predict(batch_imgs) for number, result_dict in enumerate(batch_results): - filename = batch_names[number] - clas_ids = result_dict["class_ids"] - scores_str = "[{}]".format(", ".join("{:.2f}".format( - r) for r in result_dict["scores"])) - label_names = result_dict["label_names"] - print("{}:\tclass id(s): {}, score(s): {}, label_name(s): {}". - format(filename, clas_ids, scores_str, label_names)) + if "Attribute" in config["PostProcess"]: + filename = batch_names[number] + attr_message = result_dict + print("{}:\tclass id(s): {}".format(filename, + attr_message)) + else: + filename = batch_names[number] + clas_ids = result_dict["class_ids"] + scores_str = "[{}]".format(", ".join("{:.2f}".format( + r) for r in result_dict["scores"])) + label_names = result_dict["label_names"] + print( + "{}:\tclass id(s): {}, score(s): {}, label_name(s): {}". + format(filename, clas_ids, scores_str, label_names)) batch_imgs = [] batch_names = [] if cls_predictor.benchmark: -- GitLab