【PP-human】飞桨看FIFA——足球赛多主体识别追踪

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1. 项目背景

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

1.1 前置项目

根据前置项目【PP-Human】飞桨看NBA——篮球赛多主体识别追踪 - 飞桨AI Studio (baidu.com)(也是我写的)进行了复现,并根据实际效果重新整理了数据集优化了PP-Human在足球赛环境下的表现。数据集会跟随本项目一起公开~

足球赛与篮球赛的区别在于

  • 场地的大小
  • 足球相比篮球单一的近景视角还多了远景的俯视视角

可以参考下图:(左边是平视的特写,右边是俯视的远景)

在这里插入图片描述

也许看起来差不太多,但最后实际表现差距巨大

2. 前置项目的复现

前置项目:【PP-Human】飞桨看NBA——篮球赛多主体识别追踪 - 飞桨AI Studio (baidu.com)

2.1 环境与数据集

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

2.1.1 安装PaddleDetection
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
!pip install -r PaddleDetection/requirements.txt
%cd /home/aistudio/PaddleDetection
!python setup.py install
2.1.2 配置数据集

同样我也自己标了一个足球赛环境下的数据集,里面有我本项目使用的数个不同数据集。数据集会跟随本项目一起公开。VOC格式,划分都划分好了,真实解压即用。

这里使用的是我第一版采集的数据集,大多是近景特写

!unzip /home/aistudio/data/data156077/football.zip -d /home/aistudio/PaddleDetection/dataset/
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
!pip install -r PaddleDetection/requirements.txt
%cd /home/aistudio/PaddleDetection
!python setup.py install
!unzip /home/aistudio/data/data156077/football.zip -d /home/aistudio/PaddleDetection/dataset/

2.2 修改配置文件

2.2.1 修改数据集配置文件

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

metric: VOC
map_type: 11point
num_classes: 1

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

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

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


2.2.2 修改模型训练配置文件

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

_BASE_: [
  '../datasets/football.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

2.3 训练模型

!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

2.4 训练可视化

这个任务比较简单,我使用了不同的训练样本量进行了对比实验(使用同一个评估集

可见对于这类简单任务极少的数据量也可以训练出表现良好的模型

2.4.1 训练样本20%(27个随机样本)

在这里插入图片描述

2.4.2 训练样本50%(71个随机样本)

在这里插入图片描述

2.4.3 训练样本80%(127个随机样本)

在这里插入图片描述

2.5 模型导出

!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

2.6 模型预测

!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 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 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

2.7 足球追踪

2.7.1 PP-human实现足球追踪

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

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

!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/work/video_show/test1.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
2.7.1 足球追踪效果
  • 近景特写:(C罗任意球)
    在这里插入图片描述

  • 远景俯视:(梅西过人)
    在这里插入图片描述

可以看到近景的效果比较完美,C罗的直接任意球全程能够实现追踪

然而远景俯瞰的效果明显不佳。梅西射门与过人的过程中足球追踪多次中断甚至丢失

!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/work/video_show/test2.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

3. 对于足球赛环境的改进

我们需要对原来的方案进行一些改良,让PP-Human能够在俯视与平视中都能够良好地完成追踪任务。

可以的话还是希望能使用一个模型同时实现两种不同视角的追踪。

3.1 增强数据集

为此我重新收集了部分俯视的数据集并与原有数据集融合产生了新的数据集:strong_dataset.zip

数据集的规模达到340+标注图片。基本将近景特写与俯视的数据占比拉平,尽量减少环境带来的影响。

!unzip /home/aistudio/data/data156077/strong_dataset.zip -d /home/aistudio/PaddleDetection/dataset/

!unzip /home/aistudio/data/data156077/strong_dataset.zip -d /home/aistudio/PaddleDetection/dataset/

3.2 修改配置文件

3.2.1 修改数据集配置文件

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

metric: VOC
map_type: 11point
num_classes: 1

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

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

TestDataset:
  !ImageFolder
    anno_path: dataset/strong_dataset/labels.txt
3.2.2 修改模型训练配置文件

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

_BASE_: [
  '../datasets/strong_dataset.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.3 训练模型

!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.4 训练可视化

在这里插入图片描述

3.5 模型导出

!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.6 足球追踪

3.6.1 PP-human实现足球追踪

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

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

!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/work/video_show/test1.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
3.6.1 足球追踪效果

在这里插入图片描述

在这里插入图片描述

比原来好多了,唯一的问题就是会把点球点认成球QAQ,小毛病,先不管。

!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/work/video_show/full-test.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. 球员追踪

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

4.1 模型下载

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

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

4.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

4.3 最终效果

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

在这里插入图片描述

!unzip /home/aistudio/data/data155988/mot_ppyoloe_l_36e_pipeline.zip -d /home/aistudio/PaddleDetection/output_inference
!python deploy/pphuman/pipeline.py --config deploy/pphuman/config/infer_cfg.yml \
    --video_file=/home/aistudio/PaddleDetection/output/full-test.mp4 \
    --device=gpu \
    --output_dir=/home/aistudio/work

5. 总结

  • 训练PP-YOLE足球目标检测模型
  • 增强模型在不同视角下的识别效果
  • 替换PP-Human的目标检测模型实现在视频中的足球追踪
  • 叠加PP-Human的行人追踪,最终实现足球赛多主体识别追踪

6. 更多改进

  • 对于高速运动的球体在低分辨率、低帧数环境下难以识别(这也是和篮球不同的地方之一,足球飞行跨度和速度比篮球高得多)
  • 足球在入网后难以识别,这个可以增加入网的足球数据来解决
  • 在特写镜头中会把球员衣服上的足球标记识别为足球(这个问题更偏向整活了)
  • 可以更多应用PP-human中的其他附加功能:如姿态检测等

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

Logo

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

更多推荐