diff --git a/deploy/pipeline/docs/tutorials/attribute.md b/deploy/pipeline/docs/tutorials/attribute.md index ed28b33690bc8f9ee91b54b7a12af17f1b247a0f..090cd90571c8f38b6710a1bfaf22677a73695270 100644 --- a/deploy/pipeline/docs/tutorials/attribute.md +++ b/deploy/pipeline/docs/tutorials/attribute.md @@ -28,7 +28,7 @@ ATTR: #模 enable: False #功能是否开启 ``` -2. 图片输入时,启动命令如下 +2. 图片输入时,启动命令如下(更多命令参数说明,请参考[快速开始-参数说明](./QUICK_STARTED.md#41-参数说明))。 ```python #单张图片 python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml \ @@ -43,9 +43,15 @@ python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pph ``` 3. 视频输入时,启动命令如下 ```python +#单个视频文件 python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml \ --video_file=test_video.mp4 \ --device=gpu \ + +#视频文件夹 +python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml \ + --video_dir=test_videos/ \ + --device=gpu \ ``` 4. 若修改模型路径,有以下两种方式: diff --git a/deploy/pipeline/docs/tutorials/attribute_en.md b/deploy/pipeline/docs/tutorials/attribute_en.md index d77bd0e3e882300c0524df432530202fc6a07a78..3f264a7161c4d05208ef7805d91174adc9cd35ea 100644 --- a/deploy/pipeline/docs/tutorials/attribute_en.md +++ b/deploy/pipeline/docs/tutorials/attribute_en.md @@ -28,7 +28,7 @@ ATTR: #modul enable: False #whether to enable this model ``` -2. When inputting the image, run the command as follows: +2. When inputting the image, run the command as follows (please refer to [QUICK_STARTED-Parameters](./QUICK_STARTED.md#41-参数说明) for more details): ```python #single image python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml \ @@ -43,9 +43,15 @@ python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pph ``` 3. When inputting the video, run the command as follows: ```python +#a single video file python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml \ --video_file=test_video.mp4 \ --device=gpu \ + +#directory of videos +python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml \ + --video_dir=test_videos/ \ + --device=gpu \ ``` 4. If you want to change the model path, there are two methods: diff --git a/docs/advanced_tutorials/customization/attribute.md b/docs/advanced_tutorials/customization/attribute.md index 15dcefb8e53916b8d118852defff54a507ed2716..b7abe48b1db839be2ccb73b54bbc782d3e503630 100644 --- a/docs/advanced_tutorials/customization/attribute.md +++ b/docs/advanced_tutorials/customization/attribute.md @@ -10,22 +10,25 @@ | Attribute | index | length | |:----------|:----------|:----------| -| 'Female' | [0] | 1 | -| 'AgeOver60', 'Age18-60', 'AgeLess18' | [1, 2, 3] | 3 | -| 'Front','Side','Back' | [4, 5, 6] | 3 | -| 'Hat','Glasses' | [7, 8] | 2 | -| 'HandBag','ShoulderBag','Backpack','HoldObjectsInFront' | [9,10,11,12] | 4 | -| 'ShortSleeve','LongSleeve','UpperStride','UpperLogo','UpperPlaid','UpperSplice' | [13,14,15,16,17,18] | 6 | -| 'LowerStripe','LowerPattern','LongCoat','Trousers','Shorts','Skirt&Dress' | [19,20,21,22,23,24] | 6 | -| 'boots' | [25] | 1 | +| 'Hat','Glasses' | [0, 1] | 2 | +| 'ShortSleeve','LongSleeve','UpperStride','UpperLogo','UpperPlaid','UpperSplice' | [2, 3, 4, 5, 6, 7] | 6 | +| 'LowerStripe','LowerPattern','LongCoat','Trousers','Shorts','Skirt&Dress' | [8, 9, 10, 11, 12, 13] | 6 | +| 'boots' | [14, ] | 1 | +| 'HandBag','ShoulderBag','Backpack','HoldObjectsInFront' | [15, 16, 17, 18] | 4 | +| 'AgeOver60', 'Age18-60', 'AgeLess18' | [19, 20, 21] | 3 | +| 'Female' | [22, ] | 1 | +| 'Front','Side','Back' | [23, 24, 25] | 3 | + 举例: -[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] + +第一组,位置[0, 1]数值分别是[0, 1],表示'no hat'、'has glasses'。 -第一组,位置[0]数值是0,表示'female' +第二组,位置[22, ]数值分别是[0, ], 表示gender属性是'male', 否则是'female'。 -第二组,位置[1,2,3]数值分别是 0、1、0, 表示'Age18-60' +第三组,位置[23, 24, 25]数值分别是[0, 1, 0], 表示方向属性是侧面'side'。 其他组依次类推 @@ -39,11 +42,12 @@ 1) 使用检测框,标注图片中每一个人的位置。 -2) 每一个检测框(对应每一个人),包含一组26位的属性值数组,数组的每一位以0或1表示。对应上述26个属性。例如,如果图片是'Female',则数组第一位为0,如果满足'Age18-60',则位置[1,2,3]对应的数值是[0,1,0], 或者满足'AgeOver60',则相应数值为[1,0,0]. +2) 每一个检测框(对应每一个人),包含一组26位的属性值数组,数组的每一位以0或1表示。对应上述26个属性。例如,如果图片是'Female',则数组第22位为0,如果满足'Age18-60',则位置[19, 20, 21]对应的数值是[0, 1, 0], 或者满足'AgeOver60',则相应数值为[1, 0, 0]. 标注完成后利用检测框将每一个人截取成单人图,其图片与26位属性标注建立对应关系。也可先截成单人图再进行标注,效果相同。 -## 模型优化 + +## 模型训练 数据标注完成后,就可以拿来做模型的训练,完成自定义模型的优化工作。 @@ -74,7 +78,7 @@ train.txt文件内为所有训练图片名称(相对于根路径的文件路 ### 修改配置开始训练 -首先执行以下命令下载训练代码: +首先执行以下命令下载训练代码(更多环境问题请参考[Install_PaddleClas](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.4/docs/en/installation/install_paddleclas_en.md)): ```shell git clone https://github.com/PaddlePaddle/PaddleClas @@ -127,6 +131,22 @@ python3 tools/train.py \ -c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml ``` +训练完成后可以执行以下命令进行性能评估: +``` +#多卡评估 +export CUDA_VISIBLE_DEVICES=0,1,2,3 +python3 -m paddle.distributed.launch \ + --gpus="0,1,2,3" \ + tools/eval.py \ + -c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml \ + -o Global.pretrained_model=./output/PPLCNet_x1_0/best_model + +#单卡评估 +python3 tools/eval.py \ + -c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml \ + -o Global.pretrained_model=./output/PPLCNet_x1_0/best_model +``` + ### 模型导出 使用下述命令将训练好的模型导出为预测部署模型。 @@ -138,9 +158,9 @@ python3 tools/export_model.py \ -o Global.save_inference_dir=deploy/models/PPLCNet_x1_0_person_attribute_infer ``` -导出模型后,将PP-Human中提供的部署模型[PPLCNet_x1_0](https://bj.bcebos.com/v1/paddledet/models/pipeline/PPLCNet_x1_0_person_attribute_945_infer.tar)中的`infer_cfg.yml`文件拷贝到导出的模型文件夹`PPLCNet_x1_0_person_attribute_infer`中。 +导出模型后,需要下载[infer_cfg.yml](https://bj.bcebos.com/v1/paddledet/models/pipeline/infer_cfg.yml)文件,并放置到导出的模型文件夹`PPLCNet_x1_0_person_attribute_infer`中。 -使用时在PP-Human中的配置文件`./deploy/pipeline/config/infer_cfg_pphuman.yml`中修改新的模型路径 +使用时在PP-Human中的配置文件`./deploy/pipeline/config/infer_cfg_pphuman.yml`中修改新的模型路径`model_dir`项,并开启功能`enable: True`。 ``` ATTR: model_dir: [YOUR_DEPLOY_MODEL_DIR]/PPLCNet_x1_0_person_attribute_infer/ #新导出的模型路径位置 @@ -153,19 +173,22 @@ ATTR: 上述是以26个属性为例的标注、训练过程。 如果需要增加、减少属性数量,则需要: + 1)标注时需增加新属性类别信息或删减属性类别信息; + 2)对应修改训练中train.txt所使用的属性数量和名称; + 3)修改训练配置,例如``PaddleClas/blob/develop/ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml``文件中的属性数量,详细见上述`修改配置开始训练`部分。 增加属性示例: 1. 在标注数据时在26位后继续增加新的属性标注数值; 2. 在train.txt文件的标注数值中也增加新的属性数值。 -3. 注意属性类型在train.txt中属性数值列表中的位置的对应关系需要时固定的,例如第1-3位表示年龄,所有图片都要使用1-3位置表示年龄,不再赘述。 +3. 注意属性类型在train.txt中属性数值列表中的位置的对应关系需要时固定的,例如第[19, 20, 21]位表示年龄,所有图片都要使用[19, 20, 21]位置表示年龄,不再赘述。
删减属性同理。 -例如,如果不需要年龄属性,则位置[1,2,3]的数值可以去掉。只需在train.txt中标注的26个数字中全部删除第1-3位数值即可,同时标注数据时也不再需要标注这3位属性值。 +例如,如果不需要年龄属性,则位置[19, 20, 21]的数值可以去掉。只需在train.txt中标注的26个数字中全部删除第19-21位数值即可,同时标注数据时也不再需要标注这3位属性值。 diff --git a/docs/advanced_tutorials/customization/mtmct.md b/docs/advanced_tutorials/customization/mtmct.md index 4835fe74e637a91427bdee9400fe09b129c802ad..c3b063a311b37a4842637b0ef60395f58f8259fc 100644 --- a/docs/advanced_tutorials/customization/mtmct.md +++ b/docs/advanced_tutorials/customization/mtmct.md @@ -22,7 +22,7 @@ ### 数据标注 -理解了上面`属性标注`格式的含义后,就可以进行数据标注的工作。其本质是:每张单人图建立一个标注项,对应该行人分配的id。 +理解了上面`标注`格式的含义后,就可以进行数据标注的工作。其本质是:每张单人图建立一个标注项,对应该行人分配的id。 举例: @@ -34,7 +34,7 @@ 标注完成后利用检测框将每一个人截取成单人图,其图片与id属性标注建立对应关系。也可先截成单人图再进行标注,效果相同。 -## 模型优化 +## 模型训练 数据标注完成后,就可以拿来做模型的训练,完成自定义模型的优化工作。 @@ -69,31 +69,70 @@ bounding_box_train.txt文件内为所有训练图片名称(相对于根路径 ### 修改配置开始训练 -该任务的训练功能集成在[PaddleClas](https://github.com/PaddlePaddle/PaddleClas)套件中。 +首先执行以下命令下载训练代码(更多环境问题请参考[Install_PaddleClas](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.4/docs/en/installation/install_paddleclas_en.md)): + +```shell +git clone https://github.com/PaddlePaddle/PaddleClas +``` + 需要在配置文件[softmax_triplet_with_center.yaml](https://github.com/PaddlePaddle/PaddleClas/blob/develop/ppcls/configs/reid/strong_baseline/softmax_triplet_with_center.yaml)中,修改的配置项如下: ``` - image_root: "./dataset/" 训练图片根路径 - cls_label_path: "bounding_box_train" 训练文件列表 -``` -``` - class_num: &class_num 751 #行人id总数量 + Head: + name: "FC" + embedding_size: *feat_dim + class_num: &class_num 751 #行人id总数量 + +DataLoader: + Train: + dataset: + name: "Market1501" + image_root: "./dataset/" #训练图片根路径 + cls_label_path: "bounding_box_train" #训练文件列表 + + + Eval: + Query: + dataset: + name: "Market1501" + image_root: "./dataset/" #评估图片根路径 + cls_label_path: "query" #评估文件列表 + ``` 注意: 1. 这里image_root路径+bounding_box_train.txt中图片相对路径,对应图片存放的完整路径。 - 然后运行以下命令开始训练。 - ``` +#多卡训练 export CUDA_VISIBLE_DEVICES=0,1,2,3 python3 -m paddle.distributed.launch \ --gpus="0,1,2,3" \ tools/train.py \ -c ./ppcls/configs/reid/strong_baseline/softmax_triplet_with_center.yaml + +#单卡训练 +python3 tools/train.py \ + -c ./ppcls/configs/reid/strong_baseline/softmax_triplet_with_center.yaml +``` + +训练完成后可以执行以下命令进行性能评估: +``` +#多卡评估 +export CUDA_VISIBLE_DEVICES=0,1,2,3 +python3 -m paddle.distributed.launch \ + --gpus="0,1,2,3" \ + tools/eval.py \ + -c ./ppcls/configs/reid/strong_baseline/softmax_triplet_with_center.yaml \ + -o Global.pretrained_model=./output/strong_baseline/best_model + +#单卡评估 +python3 tools/eval.py \ + -c ./ppcls/configs/reid/strong_baseline/softmax_triplet_with_center.yaml \ + -o Global.pretrained_model=./output/strong_baseline/best_model ``` ### 模型导出 @@ -103,16 +142,16 @@ python3 -m paddle.distributed.launch \ ``` python3 tools/export_model.py \ -c ./ppcls/configs/reid/strong_baseline/softmax_triplet_with_center.yaml \ - -o Global.pretrained_model=output/strong_baseline/best_model \ + -o Global.pretrained_model=./output/strong_baseline/best_model \ -o Global.save_inference_dir=deploy/models/strong_baseline_inference ``` -导出模型后,然后将PP-Human中提供的部署模型[REID模型](https://bj.bcebos.com/v1/paddledet/models/pipeline/reid_model.zip)中的infer_cfg.yml文件拷贝到新导出的模型文件夹'strong_baseline_inference'中。 +导出模型后,下载[infer_cfg.yml](https://bj.bcebos.com/v1/paddledet/models/pipeline/REID/infer_cfg.yml)文件到新导出的模型文件夹'strong_baseline_inference'中。 -使用时在PP-Human中的配置文件infer_cfg_pphuman.yml中修改 +使用时在PP-Human中的配置文件infer_cfg_pphuman.yml中修改模型路径`model_dir`并开启功能`enable`。 ``` REID: model_dir: [YOUR_DEPLOY_MODEL_DIR]/strong_baseline_inference/ enable: True ``` -然后可以使用。 +然后可以使用。至此完成模型开发。