From 94c59a821e0344a69e7903f3be98d8114a003eaa Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Wed, 4 Dec 2024 08:51:14 +0000 Subject: [PATCH 01/13] update contrib/ReID/main.py. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/ReID/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/ReID/main.py b/contrib/ReID/main.py index d3ee6fd7f..a67262b34 100644 --- a/contrib/ReID/main.py +++ b/contrib/ReID/main.py @@ -157,6 +157,7 @@ def extract_query_feature(queryPath, streamApi): tensorPackage.ParseFromString(inferResult[0].messageBuf) featureFromTensor = np.frombuffer(tensorPackage.tensorPackageVec[0].tensorVec[0].dataStr, dtype=np.float32) + featureFromTensor = featureFromTensor.copy() cv2.normalize(src=featureFromTensor, dst=featureFromTensor, norm_type=cv2.NORM_L2) queryFeatures.append(featureFromTensor.tolist()) else: @@ -277,6 +278,7 @@ def compute_feature_distance(objectList, featureList, queryFeatures): detectedFeature = \ np.frombuffer(featureList.tensorPackageVec[detectedItemIndex - filterImageCount].tensorVec[0].dataStr, dtype=np.float32) + detectedFeature = detectedFeature.copy() cv2.normalize(src=detectedFeature, dst=detectedFeature, norm_type=cv2.NORM_L2) detectedPersonFeature.append(detectedFeature.tolist()) -- Gitee From 7e10ea83f51729ba0cc137282df2017fb6f2b074 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Wed, 4 Dec 2024 09:01:19 +0000 Subject: [PATCH 02/13] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/ReID/data/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contrib/ReID/data/.keep diff --git a/contrib/ReID/data/.keep b/contrib/ReID/data/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From 38ce54c9e19cfc1f4e49e13daa530a3c9fa3973e Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Wed, 4 Dec 2024 09:07:54 +0000 Subject: [PATCH 03/13] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20querySet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/ReID/data/querySet/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contrib/ReID/data/querySet/.keep diff --git a/contrib/ReID/data/querySet/.keep b/contrib/ReID/data/querySet/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From a7ddac8cb33b367c06b383a47516a8a88b7cf5c6 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Wed, 4 Dec 2024 09:08:19 +0000 Subject: [PATCH 04/13] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20gallerySet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/ReID/data/gallerySet/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contrib/ReID/data/gallerySet/.keep diff --git a/contrib/ReID/data/gallerySet/.keep b/contrib/ReID/data/gallerySet/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From 4fd3695957b66edc3fd787ccae808bdf354e4dc9 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Wed, 4 Dec 2024 09:20:20 +0000 Subject: [PATCH 05/13] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20result?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/ReID/result/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contrib/ReID/result/.keep diff --git a/contrib/ReID/result/.keep b/contrib/ReID/result/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From 3fe7a94461333f19e10f6a4e5d1a98174a121356 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 01:26:29 +0000 Subject: [PATCH 06/13] update contrib/ReID/README.md. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/ReID/README.md | 316 ++++++++++++++--------------------------- 1 file changed, 103 insertions(+), 213 deletions(-) diff --git a/contrib/ReID/README.md b/contrib/ReID/README.md index aa43b7655..fc3e004aa 100644 --- a/contrib/ReID/README.md +++ b/contrib/ReID/README.md @@ -1,21 +1,50 @@ -# MindXSDK 行人重识别 +# 行人重识别 -## 1 简介 +## 1 介绍 +### 1.1 简介 本开发样例基于MindX SDK实现了端到端的行人重识别(Person Re-identification, ReID),支持检索给定照片中的行人ID。其主要流程为: - 程序入口分别接收查询图片和行人底库所在的文件路径。 - 对于查询图片:利用目标检测模型YOLOv3推理,检测图片中的行人,检测结果经过抠图与调整大小,再利用ReID模型提取图片中每个行人的特征向量。 - 对于行人底库:将底库图片调整大小,利用ReID模型提取相应的特征向量。 - 行人检索:将查询图片中行人的特征向量与底库中的特征向量,为每个查询图片中的行人检索最有可能的ID,通过识别框和文字信息进行可视化标记。 -## 2 目录结构 +参考链接: +> 特定行人检索:[Person Search Demo](https://github.com/songwsx/person_search_demo) + +### 1.2 支持的产品 + +本项目支持昇腾Atlas 300I pro、 Atlas 300V pro + +### 1.3 支持的版本 +本样例配套的MxVision版本、CANN版本、Driver/Firmware版本如下所示: + +| MxVision版本 | CANN版本 | Driver/Firmware版本 | +| --------- | ------------------ | -------------- | +| 6.0.RC3 | 8.0.RC3 | 24.1.RC3 | + +### 1.4 三方依赖 + +第三方依赖软件和版本如下表。请确认环境已安装pip3后,使用pip3 install * 安装以下依赖。 + +|软件名称 | 版本 | +|-----------|-----------| +| numpy | 1.24.0 | +| opencv-python | 4.10.0.84 | +| pillow | 11.0.0 | + +### 1.5 代码目录结构说明 本工程名称为ReID,工程目录如下图所示: + + + + ``` ReID |---- data | |---- gallerySet // 查询场景图片文件夹 | |---- querySet // 行人底库图片文件夹 -| |---- ownDataset // 自制行人底库原图形文件夹 -| |---- cropOwnDataset // 自制行人底库结果文件夹 +| |---- ownDataset // 自制行人底库原图形文件夹 # TODO +| |---- cropOwnDataset // 自制行人底库结果文件夹 # TODO |---- models // 目标检测、ReID模型与配置文件夹 | | |---- yolov3.cfg | | |---- coco.names @@ -26,263 +55,124 @@ ReID |---- main.py |---- makeYourOwnDataset.py |---- README.md +``` + +## 2 设置环境变量 + +```bash +#设置CANN环境变量 +. ${ascend-toolkit-path}/set_env.sh + +#设置MindX SDK 环境变量,SDK-path为mxVision SDK 安装路径 +. ${SDK-path}/set_env.sh ``` -> 由于无法在Gitee上创建空文件夹,请按照该工程目录,自行创建result文件夹、data文件夹与其内部的文件夹 -> 如果没有创建result文件夹,将无法产生输出 -## 3 依赖 -| 软件名称 | 版本 | -| :--------: | :------: | -|ubantu 18.04|18.04.1 LTS | -| MindX SDK | 5.0.RC3 | -| CANN | 7.0.RC1 | -|Python| 3.9.2| -|numpy | 1.21.0 | -|opencv_python|4.5.2| - -请注意MindX SDK使用python版本为3.9.2,如出现无法找到python对应lib库请在root下安装python3.9开发库 -``` -apt-get install libpython3.9 -``` -## 4 模型转换 + +## 3 准备模型 行人重识别先采用了yolov3模型将图片中的行人检测出来,然后利用ReID模型获取行人的特征向量。由于yolov3模型和ReID模型分别是基于Pytorch和Tensorflow的深度模型,我们需要借助ATC工具分别将其转换成对应的.om模型。 -4.1 yolov3的模型转换: +### 3.1 yolov3的模型 **步骤1** 获取yolov3的原始模型(.pb文件)和相应的配置文件(.cfg文件)       [原始模型下载链接](https://c7xcode.obs.myhuaweicloud.com/models/YOLOV3_coco_detection_picture_with_postprocess_op/yolov3_tensorflow_1.5.pb)       [配置文件下载链接](https://c7xcode.obs.myhuaweicloud.com/models/YOLOV3_coco_detection_picture_with_postprocess_op/aipp_nv12.cfg) -**步骤2** 将获取到的yolov3模型.pb文件和.cfg文件存放至:“项目所在目录/models” +**步骤2** 将获取到的yolov3模型.pb文件和.cfg文件存放至`ReID/models/`目录下。 -**步骤3** .om模型转换 -以下操作均在“项目所在目录/models”路径下进行: -- 设置环境变量(请确认install_path路径是否正确) -``` -export install_path=/usr/local/Ascend/ascend-toolkit/latest +**步骤3** 模型转换 -export PATH=/usr/local/python3.9.2/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH -export PYTHONPATH=${install_path}/atc/python/site-packages:$PYTHONPATH -export LD_LIBRARY_PATH=${install_path}/atc/lib64:${install_path}/acllib/lib64:$LD_LIBRARY_PATH -export ASCEND_OPP_PATH=${install_path}/opp -export ASCEND_AICPU_PATH=/usr/local/Ascend/ascend-toolkit/latest/ +在`ReID/models/`目录下,执行以下命令使用ATC将.pb文件转成为.om文件: +```bash +atc --model=yolov3_tensorflow_1.5.pb --framework=3 --output=yolov3 --output_type=FP32 --soc_version=Ascend310P3 --input_shape="input:1,416,416,3" --out_nodes="yolov3/yolov3_head/Conv_6/BiasAdd:0;yolov3/yolov3_head/Conv_14/BiasAdd:0;yolov3/yolov3_head/Conv_22/BiasAdd:0" --log=info --insert_op_conf=aipp_nv12.cfg ``` -- 使用ATC将.pb文件转成为.om文件 -``` -atc --model=yolov3_tensorflow_1.5.pb --framework=3 --output=yolov3 --output_type=FP32 --soc_version=Ascend310 --input_shape="input:1,416,416,3" --out_nodes="yolov3/yolov3_head/Conv_6/BiasAdd:0;yolov3/yolov3_head/Conv_14/BiasAdd:0;yolov3/yolov3_head/Conv_22/BiasAdd:0" --log=info --insert_op_conf=aipp_nv12.cfg -``` -- 执行完模型转换脚本后,若提示如下信息说明模型转换成功,可以在该路径下找到名为yolov3.om模型文件。 -(可以通过修改output参数来重命名这个.om文件) +执行完模型转换脚本后,若提示如下信息说明模型转换成功,可以在`ReID/models/`下找到名为`yolov3.om`模型文件。 + ``` ATC run success, welcome to the next use. ``` -4.2 ReID的模型转换 +### 3.2 ReID的模型 -4.2.1 模型概述 -      [ReID论文地址](https://arxiv.org/pdf/1903.07071.pdf) -      [ReID代码地址](https://github.com/michuanhaohao/reid-strong-baseline) +**步骤1** 获取模型文件ReID.onnx -4.2.2 模型转换环境需求 -``` -- 框架需求 - CANN == 7.0.RC1 - torch == 1.5.0 - torchvision == 0.6.0 - onnx == 1.7.0 - -- python第三方库 - numpy == 1.21.0 - opencv-python == 4.5.2 - Pillow == 8.2.0 - yacs == 0.1.8 - pytorch-ignite == 0.4.5 -``` -4.2.3 模型转换步骤 +通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReIDv2/ReID.onnx)获取模型文件`ReID.onnx`,并放在`ReID/models/`路径下。 -**步骤1** .pth模型转.onnx模型 -***1*** 从GitHub上拉取ReID模型源代码,在“项目所在目录/models”路径下输入: -``` -git clone https://github.com/michuanhaohao/reid-strong-baseline -``` -此时会出现“项目所在目录/models/reid-strong-baseline”路径,路径内是ReID模型的源代码 +**步骤2** 使用ATC将.onnx文件转成为.om文件 -***2*** 获取.pth权重文件,将该.pth权重文件放在“项目所在目录/models”路径下 -文件名:market_resnet50_model_120_rank1_945.pth -      [Google Drive](https://drive.google.com/drive/folders/1hn0sXLZ5yJcxtmuY-ItQfYD7hBtHwt7A) -      [Huawei Cloud](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar) +在`ReID/models/`路径下执行: -***3*** 获取ReID_pth2onnx.py:[获取链接](https://gitee.com/ascend/modelzoo/blob/master/contrib/ACL_PyTorch/Research/cv/classfication/ReID_for_Pytorch/ReID_pth2onnx.py) -  将该脚本放在“项目所在目录/models”路径下,执行下列命令,生成.onnx模型文件 +```bash +atc --framework=5 --model=ReID.onnx --output=ReID --input_format=NCHW --input_shape="image:1,3,256,128" --insert_op_conf=ReID_onnx2om.cfg --log=debug --soc_version=Ascend310P3 ``` -python3 ReID_pth2onnx.py --config_file='reid-strong-baseline/configs/softmax_triplet_with_center.yml' MODEL.PRETRAIN_CHOICE "('self')" TEST.WEIGHT "('market_resnet50_model_120_rank1_945.pth')" +执行完模型转换脚本后,若提示如下信息说明模型转换成功,可以在`ReID/models/`路径下找到名为`ReID.om`模型文件。 ``` -> 注意目前ATC支持的onnx算子版本为11 - -此时在“项目所在目录/models”路径下会出现ReID.onnx模型,到此步骤1已完成 -如果在线环境中无法安装pytorch,你可以在本地环境中进行上述.pth模型转.onnx模型操作,然后将得到的.onnx模型放在“项目所在目录/models”即可 - +ATC run success, welcome to the next use. +``` -**步骤2** .onnx模型转.om模型 +**经过上述操作,可以在`ReID/models/`下找到`yolov3.om`模型和`ReID.om`模型。** -***1*** 设置环境变量 -> 请重复一次4.1中步骤3的“设置环境变量(请确认install_path路径是否正确)”操作 -***2*** 使用ATC将.onnx文件转成为.om文件 -``` -atc --framework=5 --model=ReID.onnx --output=ReID --input_format=NCHW --input_shape="image:1,3,256,128" --insert_op_conf=ReID_onnx2om.cfg --log=debug --soc_version=Ascend310 -``` -- 执行完模型转换脚本后,若提示如下信息说明模型转换成功,可以在“项目所在目录/models”路径下找到名为ReID.om模型文件。(同样的,可以通过修改output参数来重命名这个.om文件) -``` -ATC run success, welcome to the next use. -``` -经过上述操作,可以在“项目所在目录/models”找到yolov3.om模型和ReID.om模型,模型转换操作已全部完成 +## 4 运行 -4.3 参考链接 -> 模型转换使用了ATC工具,如需更多信息请参考:[ATC工具使用指南-快速入门](https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/sdk/tutorials/%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99.md) -> Yolov3模型转换的参考链接:[ATC yolov3-tiny(FP16)](https://www.hiascend.com/zh/software/modelzoo/models/detail/1/0076a4a68336225660af59153e46c5e1/1) -> ReID模型转换的参考链接:[ATC ReID (FP16)](https://www.hiascend.com/zh/software/modelzoo/models/detail/1/1a115206edca47e39a712e912c9c0eca/1) +**步骤1** 准备行人底库数据集 -## 5 数据集 -5.1 Market1501数据集 -文件名:Market-1501-v15.09.15.zip -      [Google Drive](https://drive.google.com/file/d/0B8-rUzbwVRk0c054eEozWG9COHM/view?resourcekey=0-8nyl7K9_x37HlQm34MmrYQ) -      [Huawei Cloud](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar) +通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar)下载压缩包`ReID相关文件`。 在压缩包`ReID相关文件`中有`文件夹Market1501数据集`,该文件夹内有压缩文件`Market-1501-v15.09.15.zip`。 -5.1.1 行人底库 -请解压“Market-1501-v15.09.15.zip”文件,在“Market-1501-v15.09.15\Market1501\gt_bbox”中选择想要查询的行人图片,将图片放在“项目所在目录/data/querySet”中 +请解压“Market-1501-v15.09.15.zip”,在`Market-1501-v15.09.15\Market1501\gt_bbox`中选择想要查询的 +行人图片,将图片放在`ReID/data/querySet`中。 > 推荐每次查询1人,使用2-6张图片作为底库,效果较好 > 如需要查询多人,请保证待查询行人之间的着装风格差异较大,否则会较容易出现误报 -> 该项目需要为每张图片提取行人ID,行人图片的命名格式为 +> 该项目需要为每张图片提取行人ID,行人图片的命名格式为 >> '0001(行人ID)_c1(相机ID)s1(录像序列ID)_000151(视频帧ID)_00(检测框ID).jpg' -5.1.2 场景图片数据集 -这里使用的是market1501中的部分场景图片数据,来源于 -[Person Search Demo](https://github.com/songwsx/person_search_demo/tree/master/data/samples) -,也可以通过[Huawei Cloud](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar) -获取,然后将获取的图片放在“项目所在目录/data/gallerySet”中 - -5.2 自制数据集 -这里需要注意的是,自制数据集中的所有图片必须严格控制为横屏风格(图片的长度必须严格大于宽度) -涉及文件夹 -> “项目所在目录/data/ownDataset”:用于存放制作行人底库的场景图片 -> “项目所在目录/data/cropOwnDataset”:用于保存从场景图片提取的行人图片 - -**步骤1** 请将所有的场景图片分成不相交的两个部分: -> 一个部分用于制作行人底库(放在“项目所在目录/data/ownDataset”路径下) -> 另一个部分用于查询(放在“项目所在目录/data/gallerySet”路径下) - -**步骤2** 调用makeYourOwnDataset.py将“项目所在目录/data/ownDataset”路径下场景图片中的所有行人提取出来,结果存放在“项目所在目录/data/cropOwnDataset”中 -``` -python3 makeYourOwnDataset.py --imageFilePath='data/ownDataset' --outputFilePath='data/cropOwnDataset' -``` -**步骤3** 根据“项目所在目录/data/cropOwnDataset”中的结果,选择自己想要查询的行人,按照market1501的命名方式命名(请务必按照这种命名方式命名,否则行人的标识会出现问题) -> 将同一个行人的不同照片重命名成“xxxx_xx”,其中前4位是行人ID,后2位是该照片ID,例:第1个行人的第2张照片:0001_02 -> 将制作好的行人底库图片放在“项目所在目录/data/querySet”中 - - ----------------------------------------------------- -## 6 测试 - -6.1 获取om模型 -``` -步骤详见4: 模型转换 -``` -6.2 准备数据集 -``` -步骤详见5: 数据集 -``` -6.3 配置环境变量 -``` -#执行如下命令,打开.bashrc文件 -cd $home -vi .bashrc -#在.bashrc文件中添加以下环境变量: +**步骤2** 准备场景图片数据集 -export MX_SDK_HOME=${SDK安装路径}/mxVision +在上一步骤的压缩包`ReID相关文件`中有`场景图片`,该文件夹内有压缩文件`search_samples.rar`。 +请解压“search_samples.rar”,然后将获取的图片放在`ReID/data/gallerySet`中。 +> gallery下的图片必须是1920*1080大小的jpg -export LD_LIBRARY_PATH=${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:${MX_SDK_HOME}/opensource/lib64:${MX_SDK_HOME}/opensource/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:/usr/local/Ascend/driver/lib64/ -export PYTHONPATH=${MX_SDK_HOME}/python +**步骤3** 配置pipeline -export GST_PLUGIN_SCANNER=${MX_SDK_HOME}/opensource/libexec/gstreamer-1.0/gst-plugin-scanner +在`ReID/pipeline/`路径下,修改文件`ReID.pipeline`第39行: -export GST_PLUGIN_PATH=${MX_SDK_HOME}/opensource/lib/gstreamer-1.0:${MX_SDK_HOME}/lib/plugins - -#保存退出.bashrc -#执行如下命令使环境变量生效 -source ~/.bashrc - -#查看环境变量 -env -``` -6.4 配置pipeline -根据所需场景,配置pipeline文件,调整路径参数等。 +将`${SDK安装路径}`改为绝对路径。 +```bash +34 "mxpi_objectpostprocessor0": { +35 "props": { +36 "dataSource": "mxpi_tensorinfer0", +37 "postProcessConfigPath": "models/yolov3.cfg", +38 "labelPath": "models/coco.names", +39 "postProcessLibPath": "${SDK安装路径}/lib/modelpostprocessors/libyolov3postprocess.so" +40 }, +41 "factory": "mxpi_objectpostprocessor", +42 "next": "mxpi_imagecrop0" +43 }, ``` - # 配置mxpi_tensorinfer插件的yolov3.om模型加载路径(lines 26-33) - lines 26-33: - "mxpi_tensorinfer0": { - "props": { - "dataSource": "mxpi_imageresize0", - "modelPath": "models/yolov3.om(这里根据你的命名或路径进行更改)" - }, - "factory": "mxpi_tensorinfer", - "next": "mxpi_objectpostprocessor0" - }, - # 配置mxpi_objectpostprocessor插件的yolov3.cfg配置文件加载路径以及SDN的安装路径(lines 34-43) - lines 34-43: - "mxpi_objectpostprocessor0": { - "props": { - "dataSource": "mxpi_tensorinfer0", - "postProcessConfigPath": "models/yolov3.cfg(这里根据你的命名或路径进行更改)", - "labelPath": "models/coco.names", - "postProcessLibPath": "${SDK安装路径}/lib/modelpostprocessors/libyolov3postprocess.so" - }, - "factory": "mxpi_objectpostprocessor", - "next": "mxpi_imagecrop0" - }, - # 配置mxpi_tensorinfer插件的ReID.om模型加载路径(lines 53-60 以及 92-99) - lines 53-60: - "mxpi_tensorinfer1": { - "props": { - "dataSource": "mxpi_imagecrop0", - "modelPath": "models/ReID.om(这里根据你的命名或路径进行更改)" - }, - "factory": "mxpi_tensorinfer", - "next": "appsink0" - }, - lines 92-99: - "mxpi_tensorinfer0": { - "props": { - "dataSource": "mxpi_imageresize0", - "modelPath": "models/ReID.om(这里根据你的命名或路径进行更改)" - }, - "factory": "mxpi_tensorinfer", - "next": "appsink0" - }, -``` -6.5 执行 -``` +**步骤4** 执行 + +在`ReID/`路径下,执行以下命令: +```bash python3 main.py --queryFilePath='data/querySet' --galleryFilePath='data/gallerySet' --matchThreshold=0.3 ``` > matchThreshold是行人重定位的阈值,默认值是0.3,可根据行人底库的数量进行调整 > 请注意这个阈值单位是距离单位,并不是比例阈值 -> 对market1501数据集,建议的范围是0.2~0.4之间 -> 如果使用自制数据集,可能由于数据噪声问题导致误报或漏检,此时将阈值酌情调大可减缓,建议调整在0.5左右 -> 尽可能选择背景与行人区别较为明显的图片作为自制数据集 +> 对market1501数据集,建议的范围是0.2~0.4之间 -6.6 查看结果 -执行`main.py`文件后,可在“项目所在目录/result”路径下查看结果。 +**步骤5** 查看结果 -## 7 参考链接 -> 特定行人检索:[Person Search Demo](https://github.com/songwsx/person_search_demo) +可在`ReID/result/`路径下查看结果,结果以`.jpg`的形式可视化保存。 + + +## 5 常见问题 + +### 5.1 检测目标过小 +**问题描述:** 在运行main.py时出现"Vpc cropping failed",或者"The image height zoom ratio is out of range [1/32, 16]" -## 8 Q&A -· 在运行main.py时出现"Vpc cropping failed",或者"The image height zoom ratio is out of range [1/32, 16]" -> 这里的错误是因为yolov3模型检测到的目标过小,抠图后放大的比例超过系统给定的阈值[1/32, 16],更新“项目所在目录/models/yolov3.cfg”文件,将OBJECTNESS_THRESH适度调大可解决该问题 \ No newline at end of file +**解决方案:** 这里的错误是因为yolov3模型检测到的目标过小,抠图后放大的比例超过系统给定的阈值[1/32, 16],更新“项目所在目录/models/yolov3.cfg”文件,将OBJECTNESS_THRESH适度调大可解决该问题 -- Gitee From f8c63040e8953daa14ed9b1ea2636199d69e4c68 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 01:35:16 +0000 Subject: [PATCH 07/13] update contrib/ReID/main.py. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/ReID/main.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/contrib/ReID/main.py b/contrib/ReID/main.py index a67262b34..cb9cba261 100644 --- a/contrib/ReID/main.py +++ b/contrib/ReID/main.py @@ -155,11 +155,11 @@ def extract_query_feature(queryPath, streamApi): # get the output tensor, change it into a numpy array and append it into queryFeatures tensorPackage = MxpiDataType.MxpiTensorPackageList() tensorPackage.ParseFromString(inferResult[0].messageBuf) - featureFromTensor = np.frombuffer(tensorPackage.tensorPackageVec[0].tensorVec[0].dataStr, + feature_from_tensor = np.frombuffer(tensorPackage.tensorPackageVec[0].tensorVec[0].dataStr, dtype=np.float32) - featureFromTensor = featureFromTensor.copy() - cv2.normalize(src=featureFromTensor, dst=featureFromTensor, norm_type=cv2.NORM_L2) - queryFeatures.append(featureFromTensor.tolist()) + feature_from_tensor = feature_from_tensor.copy() + cv2.normalize(src=feature_from_tensor, dst=feature_from_tensor, norm_type=cv2.NORM_L2) + queryFeatures.append(feature_from_tensor.tolist()) else: print('Input image only support jpg') exit() @@ -275,12 +275,12 @@ def compute_feature_distance(objectList, featureList, queryFeatures): personDetectedFlag = True detectedPersonInformation.append({'x0': int(detectedItem.x0), 'x1': int(detectedItem.x1), 'y0': int(detectedItem.y0), 'y1': int(detectedItem.y1)}) - detectedFeature = \ + detected_feature = \ np.frombuffer(featureList.tensorPackageVec[detectedItemIndex - filterImageCount].tensorVec[0].dataStr, dtype=np.float32) - detectedFeature = detectedFeature.copy() - cv2.normalize(src=detectedFeature, dst=detectedFeature, norm_type=cv2.NORM_L2) - detectedPersonFeature.append(detectedFeature.tolist()) + detected_feature = detected_feature.copy() + cv2.normalize(src=detected_feature, dst=detected_feature, norm_type=cv2.NORM_L2) + detectedPersonFeature.append(detected_feature.tolist()) if not personDetectedFlag: return None -- Gitee From 14047bc6dba54abcf95e26ccc7e2fa9313170474 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 02:48:57 +0000 Subject: [PATCH 08/13] update contrib/ReID/README.md. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/ReID/README.md | 74 ++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/contrib/ReID/README.md b/contrib/ReID/README.md index fc3e004aa..82f89f87c 100644 --- a/contrib/ReID/README.md +++ b/contrib/ReID/README.md @@ -2,18 +2,20 @@ ## 1 介绍 ### 1.1 简介 -本开发样例基于MindX SDK实现了端到端的行人重识别(Person Re-identification, ReID),支持检索给定照片中的行人ID。其主要流程为: -- 程序入口分别接收查询图片和行人底库所在的文件路径。 -- 对于查询图片:利用目标检测模型YOLOv3推理,检测图片中的行人,检测结果经过抠图与调整大小,再利用ReID模型提取图片中每个行人的特征向量。 -- 对于行人底库:将底库图片调整大小,利用ReID模型提取相应的特征向量。 -- 行人检索:将查询图片中行人的特征向量与底库中的特征向量,为每个查询图片中的行人检索最有可能的ID,通过识别框和文字信息进行可视化标记。 +本开发样例基于MindX SDK实现了端到端的行人重识别(Person Re-identification, ReID),支持检索给定照片中的行人ID。 + +其主要流程为: +1. 首先,程序入口分别接收查询图片和行人底库所在的文件路径。 +2. 其次,利用目标检测模型YOLOv3检测查询图片中的行人,检测结果经过抠图与调整大小,再利用ReID模型提取图片中每个行人的特征向量。 +3. 之后,将行人底库图片调整大小,利用ReID模型提取相应的特征向量。 +4. 最后进行行人检索。 将查询图片中行人的特征向量与底库中的特征向量比对,为每个查询图片中的行人检索最有可能的ID,通过识别框和文字信息进行可视化标记。 参考链接: > 特定行人检索:[Person Search Demo](https://github.com/songwsx/person_search_demo) ### 1.2 支持的产品 -本项目支持昇腾Atlas 300I pro、 Atlas 300V pro +本项目支持昇腾Atlas 300I pro、 Atlas 300V pro。 ### 1.3 支持的版本 本样例配套的MxVision版本、CANN版本、Driver/Firmware版本如下所示: @@ -24,7 +26,7 @@ ### 1.4 三方依赖 -第三方依赖软件和版本如下表。请确认环境已安装pip3后,使用pip3 install * 安装以下依赖。 +第三方依赖软件和版本如下表。请确认环境已安装pip3后,使用`pip3 install * `安装以下依赖: |软件名称 | 版本 | |-----------|-----------| @@ -36,15 +38,13 @@ 本工程名称为ReID,工程目录如下图所示: - - ``` ReID |---- data | |---- gallerySet // 查询场景图片文件夹 | |---- querySet // 行人底库图片文件夹 -| |---- ownDataset // 自制行人底库原图形文件夹 # TODO -| |---- cropOwnDataset // 自制行人底库结果文件夹 # TODO +| |---- ownDataset // 行人底库原图形文件夹 +| |---- cropOwnDataset // 行人底库结果文件夹 |---- models // 目标检测、ReID模型与配置文件夹 | | |---- yolov3.cfg | | |---- coco.names @@ -68,17 +68,18 @@ ReID ``` ## 3 准备模型 -行人重识别先采用了yolov3模型将图片中的行人检测出来,然后利用ReID模型获取行人的特征向量。由于yolov3模型和ReID模型分别是基于Pytorch和Tensorflow的深度模型,我们需要借助ATC工具分别将其转换成对应的.om模型。 +行人重识别先采用了yolov3模型将图片中的行人检测出来,然后利用ReID模型获取行人的特征向量。 由于yolov3模型和ReID模型分别是基于Pytorch和Tensorflow的深度模型,我们需要借助ATC工具分别将其转换成对应的.om模型。 -### 3.1 yolov3的模型 +### 3.1 获取yolov3模型 + +**步骤1:** 获取yolov3的原始模型(.pb文件)和相应的配置文件(.cfg文件)。 -**步骤1** 获取yolov3的原始模型(.pb文件)和相应的配置文件(.cfg文件)       [原始模型下载链接](https://c7xcode.obs.myhuaweicloud.com/models/YOLOV3_coco_detection_picture_with_postprocess_op/yolov3_tensorflow_1.5.pb)       [配置文件下载链接](https://c7xcode.obs.myhuaweicloud.com/models/YOLOV3_coco_detection_picture_with_postprocess_op/aipp_nv12.cfg) -**步骤2** 将获取到的yolov3模型.pb文件和.cfg文件存放至`ReID/models/`目录下。 +**步骤2:** 将获取到的yolov3模型.pb文件和.cfg文件存放至`ReID/models/`目录下。 -**步骤3** 模型转换 +**步骤3:** 模型转换。 在`ReID/models/`目录下,执行以下命令使用ATC将.pb文件转成为.om文件: ```bash @@ -90,15 +91,15 @@ atc --model=yolov3_tensorflow_1.5.pb --framework=3 --output=yolov3 --output_type ATC run success, welcome to the next use. ``` -### 3.2 ReID的模型 +### 3.2 获取ReID模型 -**步骤1** 获取模型文件ReID.onnx +**步骤1:** 获取模型文件ReID.onnx。 通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReIDv2/ReID.onnx)获取模型文件`ReID.onnx`,并放在`ReID/models/`路径下。 -**步骤2** 使用ATC将.onnx文件转成为.om文件 +**步骤2:** 使用ATC将.onnx文件转成为.om文件。 在`ReID/models/`路径下执行: @@ -110,32 +111,31 @@ atc --framework=5 --model=ReID.onnx --output=ReID --input_format=NCHW --input_sh ATC run success, welcome to the next use. ``` -**经过上述操作,可以在`ReID/models/`下找到`yolov3.om`模型和`ReID.om`模型。** + ## 4 运行 -**步骤1** 准备行人底库数据集 +**步骤1:** 准备行人底库数据集。 通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar)下载压缩包`ReID相关文件`。 在压缩包`ReID相关文件`中有`文件夹Market1501数据集`,该文件夹内有压缩文件`Market-1501-v15.09.15.zip`。 -请解压“Market-1501-v15.09.15.zip”,在`Market-1501-v15.09.15\Market1501\gt_bbox`中选择想要查询的 -行人图片,将图片放在`ReID/data/querySet`中。 -> 推荐每次查询1人,使用2-6张图片作为底库,效果较好 -> 如需要查询多人,请保证待查询行人之间的着装风格差异较大,否则会较容易出现误报 -> 该项目需要为每张图片提取行人ID,行人图片的命名格式为 ->> '0001(行人ID)_c1(相机ID)s1(录像序列ID)_000151(视频帧ID)_00(检测框ID).jpg' +请解压`Market-1501-v15.09.15.zip`,在`Market-1501-v15.09.15\Market1501\gt_bbox`中选择想要查询的行人图片,将图片放在`ReID/data/querySet`中。 +> 推荐每次查询1人,使用2-6张图片作为底库,效果较好; +> 如需要查询多人,请保证待查询行人之间的着装风格差异较大,否则会较容易出现误报; +> 该项目需要为每张图片提取行人ID,行人图片的命名格式为: +> '0001(行人ID)_c1(相机ID)s1(录像序列ID)_000151(视频帧ID)_00(检测框ID).jpg'。 -**步骤2** 准备场景图片数据集 +**步骤2:** 准备场景图片数据集。 在上一步骤的压缩包`ReID相关文件`中有`场景图片`,该文件夹内有压缩文件`search_samples.rar`。 -请解压“search_samples.rar”,然后将获取的图片放在`ReID/data/gallerySet`中。 -> gallery下的图片必须是1920*1080大小的jpg +请解压`search_samples.rar`,然后将获取的图片放在`ReID/data/gallerySet`中。 +> gallery下的图片必须是1920*1080大小的jpg。 -**步骤3** 配置pipeline +**步骤3:** 配置pipeline。 在`ReID/pipeline/`路径下,修改文件`ReID.pipeline`第39行: @@ -153,18 +153,16 @@ ATC run success, welcome to the next use. 43 }, ``` -**步骤4** 执行 +**步骤4:** 执行命令。 在`ReID/`路径下,执行以下命令: ```bash python3 main.py --queryFilePath='data/querySet' --galleryFilePath='data/gallerySet' --matchThreshold=0.3 ``` -> matchThreshold是行人重定位的阈值,默认值是0.3,可根据行人底库的数量进行调整 -> 请注意这个阈值单位是距离单位,并不是比例阈值 -> 对market1501数据集,建议的范围是0.2~0.4之间 +matchThreshold是行人重定位的阈值,默认值是0.3,可根据行人底库的数量进行调整。 请注意这个阈值单位是距离单位,并不是比例阈值。 对market1501数据集,建议的范围是0.2~0.4之间。 -**步骤5** 查看结果 +**步骤5:** 查看结果。 可在`ReID/result/`路径下查看结果,结果以`.jpg`的形式可视化保存。 @@ -173,6 +171,6 @@ python3 main.py --queryFilePath='data/querySet' --galleryFilePath='data/galleryS ### 5.1 检测目标过小 -**问题描述:** 在运行main.py时出现"Vpc cropping failed",或者"The image height zoom ratio is out of range [1/32, 16]" +**问题描述:** 在运行main.py时出现“Vpc cropping failed”,或者“The image height zoom ratio is out of range [1/32, 16]”。 -**解决方案:** 这里的错误是因为yolov3模型检测到的目标过小,抠图后放大的比例超过系统给定的阈值[1/32, 16],更新“项目所在目录/models/yolov3.cfg”文件,将OBJECTNESS_THRESH适度调大可解决该问题 +**解决方案:** 这里的错误是因为yolov3模型检测到的目标过小,抠图后放大的比例超过系统给定的阈值[1/32, 16],更新“项目所在目录/models/yolov3.cfg”文件,将OBJECTNESS_THRESH适度调大可解决该问题。 -- Gitee From 028b4d209d51468539e57c7747170182cc902f65 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 03:24:40 +0000 Subject: [PATCH 09/13] update contrib/ReID/README.md. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/ReID/README.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/contrib/ReID/README.md b/contrib/ReID/README.md index 82f89f87c..241e198df 100644 --- a/contrib/ReID/README.md +++ b/contrib/ReID/README.md @@ -5,10 +5,10 @@ 本开发样例基于MindX SDK实现了端到端的行人重识别(Person Re-identification, ReID),支持检索给定照片中的行人ID。 其主要流程为: -1. 首先,程序入口分别接收查询图片和行人底库所在的文件路径。 -2. 其次,利用目标检测模型YOLOv3检测查询图片中的行人,检测结果经过抠图与调整大小,再利用ReID模型提取图片中每个行人的特征向量。 -3. 之后,将行人底库图片调整大小,利用ReID模型提取相应的特征向量。 -4. 最后进行行人检索。 将查询图片中行人的特征向量与底库中的特征向量比对,为每个查询图片中的行人检索最有可能的ID,通过识别框和文字信息进行可视化标记。 +1. 程序入口分别接收查询图片和行人底库所在的文件路径。 +2. 利用目标检测模型YOLOv3检测查询图片中的行人,检测结果经过抠图与调整大小,再利用ReID模型提取图片中每个行人的特征向量。 +3. 将行人底库图片调整大小,利用ReID模型提取相应的特征向量。 +4. 进行行人检索。 将查询图片中行人的特征向量与底库中的特征向量比对,为每个查询图片中的行人检索最有可能的ID,通过识别框和文字信息进行可视化标记。 参考链接: > 特定行人检索:[Person Search Demo](https://github.com/songwsx/person_search_demo) @@ -43,8 +43,6 @@ ReID |---- data | |---- gallerySet // 查询场景图片文件夹 | |---- querySet // 行人底库图片文件夹 -| |---- ownDataset // 行人底库原图形文件夹 -| |---- cropOwnDataset // 行人底库结果文件夹 |---- models // 目标检测、ReID模型与配置文件夹 | | |---- yolov3.cfg | | |---- coco.names @@ -123,16 +121,15 @@ ATC run success, welcome to the next use. 通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar)下载压缩包`ReID相关文件`。 在压缩包`ReID相关文件`中有`文件夹Market1501数据集`,该文件夹内有压缩文件`Market-1501-v15.09.15.zip`。 请解压`Market-1501-v15.09.15.zip`,在`Market-1501-v15.09.15\Market1501\gt_bbox`中选择想要查询的行人图片,将图片放在`ReID/data/querySet`中。 -> 推荐每次查询1人,使用2-6张图片作为底库,效果较好; -> 如需要查询多人,请保证待查询行人之间的着装风格差异较大,否则会较容易出现误报; -> 该项目需要为每张图片提取行人ID,行人图片的命名格式为: -> '0001(行人ID)_c1(相机ID)s1(录像序列ID)_000151(视频帧ID)_00(检测框ID).jpg'。 +- 推荐每次查询1人,使用2-6张图片作为底库,效果较好; +- 如需要查询多人,请保证待查询行人之间的着装风格差异较大,否则会较容易出现误报; +- 该项目需要为每张图片提取行人ID,行人图片的命名格式为:'0001(行人ID)_c1(相机ID)s1(录像序列ID)_000151(视频帧ID)_00(检测框ID).jpg'。 **步骤2:** 准备场景图片数据集。 -在上一步骤的压缩包`ReID相关文件`中有`场景图片`,该文件夹内有压缩文件`search_samples.rar`。 +在步骤1的压缩包`ReID相关文件`中有`场景图片`,该文件夹内有压缩文件`search_samples.rar`。 请解压`search_samples.rar`,然后将获取的图片放在`ReID/data/gallerySet`中。 -> gallery下的图片必须是1920*1080大小的jpg。 +> gallerySet下的图片必须是1920*1080大小的jpg。 **步骤3:** 配置pipeline。 -- Gitee From fc4be7a5406eaa244689507cf2ccc4c78a3ead3e Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 03:25:18 +0000 Subject: [PATCH 10/13] update contrib/ReID/README.md. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/ReID/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ReID/README.md b/contrib/ReID/README.md index 241e198df..925042115 100644 --- a/contrib/ReID/README.md +++ b/contrib/ReID/README.md @@ -129,7 +129,7 @@ ATC run success, welcome to the next use. 在步骤1的压缩包`ReID相关文件`中有`场景图片`,该文件夹内有压缩文件`search_samples.rar`。 请解压`search_samples.rar`,然后将获取的图片放在`ReID/data/gallerySet`中。 -> gallerySet下的图片必须是1920*1080大小的jpg。 +- gallerySet下的图片必须是1920*1080大小的jpg。 **步骤3:** 配置pipeline。 -- Gitee From 74f91ea00a65f08acb3e2ce0f5f48a94e3e63421 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 03:43:28 +0000 Subject: [PATCH 11/13] update contrib/ReID/README.md. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/ReID/README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/contrib/ReID/README.md b/contrib/ReID/README.md index 925042115..7d1817d82 100644 --- a/contrib/ReID/README.md +++ b/contrib/ReID/README.md @@ -41,8 +41,8 @@ ``` ReID |---- data -| |---- gallerySet // 查询场景图片文件夹 -| |---- querySet // 行人底库图片文件夹 +| |---- gallerySet // 查询场景图片文件夹(需要用户自行创建) +| |---- querySet // 行人底库图片文件夹(需要用户自行创建) |---- models // 目标检测、ReID模型与配置文件夹 | | |---- yolov3.cfg | | |---- coco.names @@ -117,8 +117,9 @@ ATC run success, welcome to the next use. **步骤1:** 准备行人底库数据集。 +1. 在目录`ReID/data/`下创建文件夹`querySet`。 -通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar)下载压缩包`ReID相关文件`。 在压缩包`ReID相关文件`中有`文件夹Market1501数据集`,该文件夹内有压缩文件`Market-1501-v15.09.15.zip`。 +2. 通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ReID/ReID%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6.rar)下载压缩包`ReID相关文件`。 在压缩包`ReID相关文件`中有`文件夹Market1501数据集`,该文件夹内有压缩文件`Market-1501-v15.09.15.zip`。 请解压`Market-1501-v15.09.15.zip`,在`Market-1501-v15.09.15\Market1501\gt_bbox`中选择想要查询的行人图片,将图片放在`ReID/data/querySet`中。 - 推荐每次查询1人,使用2-6张图片作为底库,效果较好; @@ -127,7 +128,9 @@ ATC run success, welcome to the next use. **步骤2:** 准备场景图片数据集。 -在步骤1的压缩包`ReID相关文件`中有`场景图片`,该文件夹内有压缩文件`search_samples.rar`。 +1. 在目录`ReID/data/`下创建文件夹`gallerySet`。 + +2. 在步骤1的压缩包`ReID相关文件`中有`场景图片`,该文件夹内有压缩文件`search_samples.rar`。 请解压`search_samples.rar`,然后将获取的图片放在`ReID/data/gallerySet`中。 - gallerySet下的图片必须是1920*1080大小的jpg。 -- Gitee From 3426feb66014af03de848c68a17ef9751b8d8c7c Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 03:43:41 +0000 Subject: [PATCH 12/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20co?= =?UTF-8?q?ntrib/ReID/data/gallerySet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/ReID/data/gallerySet/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 contrib/ReID/data/gallerySet/.keep diff --git a/contrib/ReID/data/gallerySet/.keep b/contrib/ReID/data/gallerySet/.keep deleted file mode 100644 index e69de29bb..000000000 -- Gitee From d973478da48f49dcb2d3d29f6af9be61e7a04c75 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Thu, 5 Dec 2024 03:43:50 +0000 Subject: [PATCH 13/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20co?= =?UTF-8?q?ntrib/ReID/data/querySet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/ReID/data/querySet/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 contrib/ReID/data/querySet/.keep diff --git a/contrib/ReID/data/querySet/.keep b/contrib/ReID/data/querySet/.keep deleted file mode 100644 index e69de29bb..000000000 -- Gitee