【PP-Human】飞桨看NBA——篮球赛多主体识别追踪

在这里插入图片描述

在这里插入图片描述

1. 项目背景

各种球类比赛裁判判罚的轻重不同往往会很大程度影响比赛的结果。现如今,使用机器视觉的视频助理裁判已经被广泛引入各种体育赛事中。除此之外,机器视觉也可以在比赛解说,赛后战术分析等方向得到运用。本项目希望能够从篮球赛视频中识别追踪篮球运动员运动中的篮球。进而为后续的比赛分析、动作学习等事务创造前置条件。

完整的一段30s输出示例视频在/work/test-video.mp4

2.实现路线

在这里插入图片描述

2.1 PP-Human 实时检测跟踪

github链接:PaddleDetection/mot.md at release/2.4 · PaddlePaddle/PaddleDetection (github.com)

他能够完成对视频中行人检测跟踪的功能。

但是乍看他好像只能跟踪行人,又如何完成篮球赛中的主角——篮球的识别呢?

别急,我们看看使用方法

使用方法

  1. 从上表链接中下载模型并解压到./output_inference路径下
  2. 图片输入时,启动命令如下
python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
                                                   --image_file=test_image.jpg \
                                                   --device=gpu
  1. 视频输入时,启动命令如下
python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
                                                   --video_file=test_video.mp4 \
                                                   --device=gpu
  1. 若修改模型路径,有以下两种方式:
    • ./deploy/pphuman/config/infer_cfg.yml下可以配置不同模型路径,检测和跟踪模型分别对应DETMOT字段,修改对应字段下的路径为实际期望的路径即可。
    • 命令行中增加--model_dir修改模型路径:
python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
                                                   --video_file=test_video.mp4 \
                                                   --device=gpu \
                                                   --do_entrance_counting \
                                                   --draw_center_traj \
                                                   --model_dir det=ppyoloe/

注意:

  • --do_entrance_counting表示是否统计出入口流量,不设置即默认为False
  • --draw_center_traj表示是否绘制跟踪轨迹,不设置即默认为False。注意绘制跟踪轨迹的测试视频最好是静止摄像头拍摄的。

没错,他可以更换模型路径,这就意味着我只要替换他的目标检测模型就可以实现对各种各样东西的追踪

现在的问题就变成了让PP-Human不仅能识人,更能识球

2.2 PP-YOLOE 篮球目标检测

PP-Human使用的模型如下,为了避免不必要的麻烦,我们也使用PP-YOLOE训一个篮球目标检测的模型。

任务算法精度预测速度(ms)下载链接
行人检测/跟踪PP-YOLOE-lmAP: 56.6 MOTA: 79.5检测: 28.0ms 跟踪:33.1ms下载链接
行人检测/跟踪PP-YOLOE-smAP: 53.2 MOTA: 69.1检测: 22.1ms 跟踪:27.2ms下载链接

训完之后用篮球目标检测的模型替换原来识别人的模型,就可以方便实现他的视频追踪功能了。

路线决定了,我们开始动手!

3. 篮球目标检测

PP-Human和PP-YOLOE都是PaddleDetection中的模型。

3.1 安装PaddleDetection

!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
!pip install -r PaddleDetection/requirements.txt
%cd /home/aistudio/PaddleDetection
!python setup.py install
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
!pip install -r PaddleDetection/requirements.txt
%cd /home/aistudio/PaddleDetection
!python setup.py install

3.2 配置数据集

我找了半天居然没找到一个篮球赛环境下的篮球数据集QAQ。所以我自己标了一个,大概250+张照片,已经传上AIstudio了。VOC格式,划分都划分好了,真实解压即用。

P.S:之前数据集是在windows上划分的,路径有点小问题。现在已经改好了,在AIstudio也可以解压即用了

!unzip /home/aistudio/data/data156003/basketball.zip -d /home/aistudio/PaddleDetection/dataset/
!unzip /home/aistudio/data/data156003/basketball.zip -d /home/aistudio/PaddleDetection/dataset/

3.3 修改配置文件

3.3.1 修改数据集配置文件

文件路径(新建):PaddleDetection/configs/datasets/basketball.yml

metric: VOC
map_type: 11point
num_classes: 1

TrainDataset:
  !VOCDataSet
    dataset_dir: dataset/basketball
    anno_path: train_list.txt
    label_list: labels.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']

EvalDataset:
  !VOCDataSet
    dataset_dir: dataset/basketball
    anno_path: val_list.txt
    label_list: labels.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']

TestDataset:
  !ImageFolder
    anno_path: dataset/basketball/labels.txt

3.3.2 修改模型训练配置文件

文件路径(修改):PaddleDetection/configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml

_BASE_: [
  '../datasets/basketball.yml',
  '../runtime.yml',
  './_base_/optimizer_300e.yml',
  './_base_/ppyoloe_crn.yml',
  './_base_/ppyoloe_reader.yml',
]

log_iter: 100
snapshot_epoch: 10
weights: output/ppyoloe_crn_l_300e_coco/model_final

pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/CSPResNetb_l_pretrained.pdparams
depth_mult: 1.0
width_mult: 1.0

3.4 训练模型

!python -u tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml \
     -o pretrain_weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams\
     --use_vdl=true --eval
!python -u tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml \
     -o pretrain_weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams\
     --use_vdl=true --eval

3.5 训练可视化

在这里插入图片描述

训了大概100左右的epoch就差不多没啥变化了,(eval集只有40个左右的样本)

3.6 模型导出

!python tools/export_model.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml \
--output_dir=output/inference_model \
 -o weights=output/ppyoloe_crn_l_300e_coco/best_model.pdparams
!python tools/export_model.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml \
--output_dir=output/inference_model \
 -o weights=output/ppyoloe_crn_l_300e_coco/best_model.pdparams

3.7 模型预测

!python deploy/python/infer.py --model_dir=output/inference_model/ppyoloe_crn_l_300e_coco \
--image_dir=/home/aistudio/work/image_show --device=GPU \
--output_dir=output/predict/yoloe \
--save_results=True

随便网上找了张图片,效果挺不错

在这里插入图片描述

至此,篮球目标检测的训练完成了,接下来是PP-human的时间。

!python deploy/python/infer.py --model_dir=output/inference_model/ppyoloe_crn_l_300e_coco \
--image_dir=/home/aistudio/work/image_show --device=GPU \
--output_dir=output/predict/yoloe \
--save_results=True

4. 篮球追踪

4.1 PP-human实现篮球追踪

主要就是用我们刚刚训练的篮球目标检测模型替换默认的模型

自定义detmot模型路径为我们导出的模型

!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/work/video_show/test-video.mp4 \
    --device=gpu \
    --model_dir det=/home/aistudio/PaddleDetection/output/inference_model/ppyoloe_crn_l_300e_coco \
        mot=/home/aistudio/PaddleDetection/output/inference_model/ppyoloe_crn_l_300e_coco
!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/work/video_show/test-video.mp4 \
    --device=gpu \
    --model_dir det=/home/aistudio/PaddleDetection/output/inference_model/ppyoloe_crn_l_300e_coco \
        mot=/home/aistudio/PaddleDetection/output/inference_model/ppyoloe_crn_l_300e_coco

4.2 篮球追踪效果

在这里插入图片描述

在这里插入图片描述

可以,没毛病!

5. 球员追踪

这个就比较方便了,因为PP-Human自带行人追踪,直接用它现成的就行。

5.1 模型下载

不过要先下载他提供的模型,我放进了一个小数据集里

!unzip /home/aistudio/data/data155988/mot_ppyoloe_l_36e_pipeline.zip -d /home/aistudio/PaddleDetection/output_inference
!unzip /home/aistudio/data/data155988/mot_ppyoloe_l_36e_pipeline.zip -d /home/aistudio/PaddleDetection/output_inference

5.2 模型推理

拿之前篮球追踪的视频接着进行行人追踪。

!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/PaddleDetection/output/test-video.mp4 \
    --device=gpu \
    --output_dir=/home/aistudio/work
!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/PaddleDetection/output/test-video.mp4 \
    --device=gpu \
    --output_dir=/home/aistudio/work

5.3 最终效果

最终我们得到了项目开头展示的篮球+球员追踪~

在这里插入图片描述

6. 总结

  • 训练PP-YOLE篮球目标检测模型
  • 替换PP-Human的目标检测模型实现在视频中的篮球追踪
  • 叠加PP-Human的行人追踪,最终实现篮球赛多主体识别追踪

开源链接:https://aistudio.baidu.com/aistudio/projectdetail/4305422

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐