pphuman_mtmct.md 5.0 KB

简体中文 | English

跨镜跟踪任务二次开发

数据准备

数据格式

跨镜跟踪使用行人REID技术实现,其训练方式采用多分类模型训练,使用时取分类softmax头部前的特征作为检索特征向量。

因此其格式与多分类任务相同。每一个行人分配一个专属id,不同行人id不同,同一行人在不同图片中的id相同。

例如图片0001.jpg、0003.jpg是同一个人,0002.jpg、0004.jpg是不同的其他行人。则标注id为:

0001.jpg    00001
0002.jpg    00002
0003.jpg    00001
0004.jpg    00003
...

依次类推。

数据标注

理解了上面标注格式的含义后,就可以进行数据标注的工作。其本质是:每张单人图建立一个标注项,对应该行人分配的id。

举例:

对于一张原始图片,

1) 使用检测框,标注图片中每一个人的位置。

2) 每一个检测框(对应每一个人),包含一个int类型的id属性。例如,上述举例中的0001.jpg中的人,对应id:1.

标注完成后利用检测框将每一个人截取成单人图,其图片与id属性标注建立对应关系。也可先截成单人图再进行标注,效果相同。

模型训练

数据标注完成后,就可以拿来做模型的训练,完成自定义模型的优化工作。

其主要有两步工作需要完成:1)将数据与标注数据整理成训练格式。2)修改配置文件开始训练。

训练数据格式

训练数据包括训练使用的图片和一个训练列表bounding_box_train.txt,其具体位置在训练配置中指定,其放置方式示例如下:

REID/
|-- data           训练图片文件夹
|   |-- 00001.jpg
|   |-- 00002.jpg
|   `-- 0000x.jpg
`-- bounding_box_train.txt      训练数据列表

bounding_box_train.txt文件内为所有训练图片名称(相对于根路径的文件路径)+ 1个id标注值

其每一行表示一个人的图片和id标注结果。其格式为:

0001.jpg    00001
0002.jpg    00002
0003.jpg    00001
0004.jpg    00003

注意:图片与标注值之间是以Tab[\t]符号隔开。该格式不能错,否则解析失败。

修改配置开始训练

首先执行以下命令下载训练代码(更多环境问题请参考Install_PaddleClas):

git clone https://github.com/PaddlePaddle/PaddleClas

需要在配置文件softmax_triplet_with_center.yaml中,修改的配置项如下:

  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

模型导出

使用下述命令将训练好的模型导出为预测部署模型。

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.save_inference_dir=deploy/models/strong_baseline_inference

导出模型后,下载infer_cfg.yml文件到新导出的模型文件夹'strong_baseline_inference'中。

使用时在PP-Human中的配置文件infer_cfg_pphuman.yml中修改模型路径model_dir并开启功能enable

REID:
  model_dir: [YOUR_DEPLOY_MODEL_DIR]/strong_baseline_inference/
  enable: True

然后可以使用。至此完成模型开发。