ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleDetection 多目标跟踪任务二次开发指南:从数据准备到跟踪类别修改

PaddleDetection 多目标跟踪任务二次开发指南:从数据准备到跟踪类别修改 PaddleDetection 多目标跟踪任务二次开发指南从数据准备到跟踪类别修改【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetection本篇技术指南以 PaddleDetection 开源仓库中的多目标跟踪MOT二次开发教程为主体围绕 ByteTrack 方案PP-YOLOE 检测器 BYTETracker 跟踪器展开系统讲解自定义数据集准备、基于 COCO 预训练权重的模型优化以及跟踪类别修改的完整开发流程。读者读完本文后能够掌握在产业场景中按需定制多目标跟踪模型的实操方法包括训练命令、超参数调整与配置文件修改技巧并可直接参考仓库中的真实配置与源码进行二次开发。引言多目标跟踪二次开发的核心思路在产业落地过程中应用多目标跟踪算法不可避免地会出现两类需求一是希望自定义跟踪目标类型如从行人扩展到车辆、人头等二是对已有多目标跟踪模型进行优化以提升特定场景下的效果。PaddleDetection 将这两种需求统一为检测器二次开发流程训练 ByteTrack 本质上就是训练检测器因此只要准备好检测标注即可开始定制化开发。PaddleDetection 中提供了 SDE分离式检测与嵌入和 JDE联合式检测与嵌入两系列 MOT 算法而本文涉及的 ByteTrack 属于SDE 系列其显著优势是只需要检测框标注不需要 ReID 标注数据标注成本低检测器与跟踪器可分别调优鲁棒性较高详见 docs/tutorials/data/PrepareMOTDataSet.md。若数据集中只有检测框标注而没有 ReID 标注无法使用 JDE 系列算法训练此时 SDE 系列ByteTrack/DeepSORT是更合适的选择。ByteTrack 的原始论文只支持行人单类别跟踪而 PaddleDetection 额外支持了多类别同时跟踪如 bytetrack_ppyoloe_ppvehicle9cls.yml 中的 9 类车辆跟踪。从仓库中的装配配置 bytetrack_ppyoloe.yml 可以看到ByteTrack 方案由三部分组装而成detectorPP-YOLOE 检测器配置中以YOLOv3名称承载 PPYOLOe 检测头负责输出每一帧的检测框reid默认None即默认不使用 ReID 权重trackerJDETracker此处即 BYTETracker负责跨帧关联检测框生成轨迹。依据仓库 configs/mot/bytetrack/bytetrack_ppyoloe.yml 中的ByteTrack配置块跟踪器默认不依赖 ReID 模型如需使用 ReID 权重可参考 bytetrack_ppyoloe_pplcnet.yml 修改reid_weights字段。一、数据准备1.1 数据集要求采用 ByteTrack 方案的多目标跟踪模型其数据集只需要检测标注不需要 ReID 标注信息即当成纯检测来做即可。特别需要注意的是数据集最好是从连续视频中抽取出来的而不是无关联的图片集合——跟踪任务依赖帧间的时序关联连续帧数据才能让跟踪器学到有效的轨迹关联能力针对场景特点采集合适的数据能同时提升模型效果和泛化性能。1.2 数据标注与格式转换二次开发首先需要针对实际场景采集数据然后使用 Labeme、LabelImg 等标注工具标注目标检测框并将标注结果转化为COCO或VOC数据格式。详细的标注工具与转换流程可参考 数据准备文档。对于 MOT 任务还可参考 PrepareMOTDataSet.md 中SDE 数据集一节SDE 数据集即纯检测标注数据集用户自定义数据集可参照 PrepareDetDataSet.md 准备。以 MOT17 为例下载解压到dataset/mot目录后数据集部分的配置如下num_classes: 1 TrainDataset: !COCODataSet dataset_dir: dataset/mot/MOT17 anno_path: annotations/train_half.json image_dir: images/train data_fields: [image, gt_bbox, gt_class, is_crowd] EvalDataset: !COCODataSet dataset_dir: dataset/mot/MOT17 anno_path: annotations/val_half.json image_dir: images/train TestDataset: !ImageFolder dataset_dir: dataset/mot/MOT17 anno_path: annotations/val_half.json仓库中的 mot17.yml 正是上述结构的完整实现它还额外定义了 MOT 评估与推理所需的EvalMOTDataset/TestMOTDataset使用MOTImageFolder且keep_ori_im: True用于跟踪指标的评估与可视化输出。二、模型优化2.1 使用自定义数据集训练由于 ByteTrack 方案的数据集只需检测标注训练过程与纯检测任务完全一致。参照 MOT数据集准备 与 MOT数据集教程可执行如下命令# 单卡训练 CUDA_VISIBLE_DEVICES0 python tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --eval --amp # 多卡训练 python -m paddle.distributed.launch --log_dirlog_dir --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --eval --amp参数说明-c指定配置文件上述命令以 PP-YOLOE-L COCO 检测配置 ppyoloe_crn_l_300e_coco.yml 为例--eval边训练边验证精度--amp开启混合精度训练可避免精度溢出并加速训练推荐使用 PaddlePaddle 2.2.2 及以上版本--log_dir多卡训练时的日志保存目录。更详细的命令参考 30分钟快速上手PaddleDetection 与 ByteTrack 检测器配置。需要说明的是上述训练命令使用的是通用 COCO 检测配置若要在 MOT 场景中直接训练 ByteTrack 的检测器仓库提供了现成的配置例如 ppyoloe_crn_l_36e_640x640_mot17half.yml其训练、评估与导出命令可参考 detector/README_cn.mdjob_nameppyoloe_crn_l_36e_640x640_mot17half configconfigs/mot/bytetrack/detector/${job_name}.yml log_dirlog_dir/${job_name} # 1. training python -m paddle.distributed.launch --log_dir${log_dir} --gpus 0,1,2,3,4,5,6,7 tools/train.py -c ${config} --eval --amp # 2. evaluation CUDA_VISIBLE_DEVICES0 python tools/eval.py -c ${config} -o weightsoutput/${job_name}/model_final.pdparams # 3. export CUDA_VISIBLE_DEVICES0 python tools/export_model.py -c ${config} -o weightsoutput/${job_name}/model_final.pdparams2.2 加载 COCO 模型作为预训练权重PaddleDetection 提供的配置文件默认加载的预训练模型为ImageNet 数据集权重仅加载到检测算法的骨干网络中。实际使用尤其是产业落地时强烈建议加载 COCO 数据集训练好的权重通常能对模型精度带来较大提升。具体操作分两步第一步设置预训练权重路径COCO 数据集训练好的模型权重均在各算法配置文件夹下。例如configs/ppyoloe下提供了 PP-YOLOE-L 的 COCO 数据集权重ppyoloe_crn_l_300e_coco.pdparams在配置文件中设置pretrain_weights: https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams该字段在 ppyoloe_crn_l_300e_coco.yml 中实际体现为pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/CSPResNetb_l_pretrained.pdparamsImageNet 预训练骨干而在 ByteTrack 装配配置 bytetrack_ppyoloe.yml 中pretrain_weights已直接指向ppyoloe_crn_l_300e_coco.pdparamsdet_weights则指向 MOT 场景训练好的检测器权重可直接作为二次开发起点。第二步修改超参数加载 COCO 预训练权重后模型已具备较强的特征提取能力需要相应调整学习率超参数。以 optimizer_300e.yml 为例原配置为epoch: 300 LearningRate: base_lr: 0.01 schedulers: - name: CosineDecay max_epochs: 360 - name: LinearWarmup start_factor: 0. epochs: 5加载 COCO 权重后建议修改为epoch: 120 # 原始配置为300epoch加载COCO权重后可以适当减少迭代轮数 LearningRate: base_lr: 0.005 # 原始配置为0.025加载COCO权重后需要降低学习率 schedulers: - !CosineDecay max_epochs: 144 # 依据epoch数进行修改一般为epoch数的1.2倍 - !LinearWarmup start_factor: 0. epochs: 5参数调整要点epochCOCO 权重已提供充分预训练迭代轮数可从 300 缩减至 120 左右base_lr预训练权重下使用过大的学习率容易破坏已学特征应从 0.01~0.025 量级降至 0.005max_epochsCosineDecay 的周期需与 epoch 匹配一般为 epoch 数的 1.2 倍120 × 1.2 144LinearWarmupstart_factor: 0.表示从 0 开始线性预热epochs: 5表示前 5 个 epoch 完成预热此项通常保持默认。从源码结构看base_lr会经 optimizer 模块 解析并作用于动量 SGD 优化器momentum: 0.9、L2 正则factor: 0.0005因此微调时保持优化器类型不变、仅降学习率即可获得稳定的收敛行为。三、跟踪类别修改当实际使用场景的类别发生变化时例如从单类行人跟踪改为多类车辆跟踪需要修改数据配置文件。以 coco_detection.yml 为例metric: COCO num_classes: 10 # 原始类别1配置修改完成后同样可以加载 COCO 预训练权重。PaddleDetection 支持自动加载 shape 匹配的权重类别数变化会导致检测头输出层的权重 shape 不匹配框架会自动忽略这些不匹配的权重仅加载骨干与特征提取部分因此无需其他额外修改。3.1 单类别与多类别跟踪的配置差异仓库中提供了单类别与多类别 ByteTrack 的对照实现可直观看出差异单类别行人bytetrack_ppyoloe.yml 中metric: MOT、num_classes: 1跟踪器参数针对行人设置如vertical_ratio: 1.6用于过滤高宽比异常的竖直条状框、min_box_area: 100。多类别车辆 9 类bytetrack_ppyoloe_ppvehicle9cls.yml 中metric: MCMOT、num_classes: 9类别依次为 pedestrian(1)、rider(2)、car(3)、truck(4)、bus(5)、van(6)、motorcycle(7)、bicycle(8)、others(9)。同时跟踪器参数调整为min_box_area: 0、vertical_ratio: 0——因为多类别目标形状差异大不再适用行人的竖直比例过滤策略。3.2 多类别跟踪的推理配置多类别 ByteTrack 没有跟踪 ground truth 标签无法进行跟踪指标评估因此只做跟踪预测。需修改TestMOTDataset确保路径存在其中anno_path指向一个手写的label_list.txt一行表示一个类别TestMOTDataset: !MOTImageFolder dataset_dir: dataset/mot keep_ori_im: True # set True if save visualization images or video anno_path: dataset/mot/label_list.txt # absolute pathlabel_list.txt内容示例pedestrian rider car truck bus van motorcycle bicycle others注意anno_path如果写错或找不到将默认使用 COCO 数据集 80 类的类别名。预测多类别车辆跟踪的命令# 下载demo视频 wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/bdd100k_demo.mp4 # 使用PPYOLOE 多类别车辆检测模型 CUDA_VISIBLE_DEVICES1 python tools/infer_mot.py -c configs/mot/bytetrack/bytetrack_ppyoloe_ppvehicle9cls.yml --video_filebdd100k_demo.mp4 --scaledTrue --save_videos参数说明--scaled模型输出结果的坐标是否已缩放回原图。若使用通用检测模型如 PP-YOLOE则为True若使用 JDE 的 YOLOv3 检测模型则为False--save_videos保存可视化视频同时会在{output_dir}/mot_outputs/保存可视化图片{output_dir}可通过--output_dir设置默认文件夹名为output使用前请确保已安装 ffmpegUbuntu 可用apt-get update apt-get install -y ffmpeg安装。如需更换检测器权重可修改配置文件中的det_weights:为自定义权重路径并同步调整数据集路径、label_list.txt和类别数。3.3 跟踪器关键参数以 BYTETracker 为例在 bytetrack_ppyoloe.yml 中JDETracker即 BYTETracker的核心参数如下JDETracker: use_byte: True match_thres: 0.9 conf_thres: 0.2 low_conf_thres: 0.1 min_box_area: 100 vertical_ratio: 1.6 # for pedestrianuse_byte: True启用 Byte 关联机制同时关联高分框与低分框通过低分框与轨迹片段的相似性恢复被遮挡目标、过滤背景框这是 ByteTrack 的核心思想match_thres轨迹匹配阈值值越高对匹配的相似度要求越严格conf_thres高置信度检测框阈值高于该值的框参与第一轮匹配low_conf_thres低置信度检测框阈值介于low_conf_thres与conf_thres之间的框参与第二轮 Byte 关联min_box_area过滤面积过小的框行人场景通常设 100多类别场景建议设 0vertical_ratio行人场景设为 1.6用于过滤高宽比过大的竖直条状框多类别场景应设为 0。跟踪对检测框质量要求更高因此 ByteTrack 配置中的 NMS 后处理也做了针对性调整如 bytetrack_ppyoloe.yml 中score_threshold: 0.1、nms_threshold: 0.4比纯检测任务的 0.01 / 0.6 更严格以确保送入跟踪器的检测框具有较高的精度。3.4 评估与部署延伸二次开发完成后可按如下方式验证与部署评估检测效果使用tools/eval.py如CUDA_VISIBLE_DEVICES0 python tools/eval.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml -o weights...评估跟踪效果使用tools/eval_mot.py如CUDA_VISIBLE_DEVICES0 python tools/eval_mot.py -c configs/mot/bytetrack/bytetrack_ppyoloe.yml --scaledTrue跟踪结果存于{output_dir}/mot_results/每个视频序列对应一个 txt每行信息为frame,id,x1,y1,w,h,score,-1,-1,-1导出与部署ByteTrack 的导出部署是单独导出检测模型、再组装跟踪器运行参照 PP-Tracking。跟踪器运行参数可在 tracker_config.yml 中调整该文件同时提供 JDETracker、OCSORTTracker、DeepSORTTracker、BOTSORTTracker 四类跟踪器配置可按需切换跟踪算法。总结PaddleDetection 的多目标跟踪二次开发是一条完整且低门槛的链路由于 ByteTrack 方案训练等价于纯检测训练只需准备带检测标注的连续帧数据集即可起步随后通过加载 COCO 预训练权重并适当降低学习率、缩减迭代轮数可在少量数据上快速收敛最后通过修改num_classes、metric与数据集配置即可将模型从单类行人跟踪平滑迁移到任意多类别跟踪场景。整个过程在仓库中均有对应的完整配置可供参考与复制开发者可以在此基础上按需调整跟踪器参数完成从数据、训练、评估到部署的端到端定制。【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表