系列文章目录
第一章 深度学习实战之yolov5实现球员与足球检测
前言
目标检测是计算机视觉中常见且不可或缺的任务之一。一般情况下它是以矩形框将图像中感兴趣区域划定出来的任务。根据任务需要可能会有多个类。目前目标检测大多采用深度学习的方法实现。恰逢世界杯决赛,本文以目前最常用的yolov5算法作为测试球员与足球检测的网络模型
一、环境搭建与调试
- 从github直接拉取最新的yolov5代码,目前最新版为V7.0
git clone https://github.com/ultralytics/yolov5
- 创建一个新的conda环境,此处我们创建一个python3.8版本名为yolov5的conda环境
conda create -n yolov5 python=3.8
- 激活conda环境后,进入源码yolov5的目录中,安装相关依赖。
cd yolov5
python -m pip install -r requirements.txt
下图即为包安装过程,因为相同版本的包如果在其他环境中已经安装过,conda可以直接拿来用,不用重复下载。
- 运行demo,下载预训练的yolov5s权重
import torch
# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # or yolov5n - yolov5x6, custom
# Images
img = 'https://ultralytics.com/images/zidane.jpg' # or file, Path, PIL, OpenCV, numpy, list
# Inference
results = model(img)
# Results
results.print() # or .show(), .save(), .crop(), .pandas(), etc.
上述demo程序,会下载一个yolov5s的预训练权重放置在源码根目录下,并调用hub推理一下齐达内的图片。可能下载会很慢,我是将下面的下载地址直接复制到训练下载的。
最终会输出检测到两个人和两个领带
二、检测与输出
yolov5s的预训练权重是使用coco数据集训练的。里面本身就包含人与足球两个类别。这个信息我们可以从data/coco128.yaml中看到。序号0为person类,序号32位sports ball类。于是我们可以直接用预训练权重推理一遍视频看看效果。
- 指定视频路径与相关参数,运行detect.py文件
python detect.py --source 'argentina-france ITV 1 eng 720p 00_10_23-00_15_30.mp4' --conf-thres 0.5
可以看到在终端下网络对视频进行逐帧推理的过程,最终平均每张图片5.8ms推理,0.8ms进行NMS。
- 推理后标注视频默认保存在runs/detect下的exp文件夹中,下面选取几张截图
可能是置信度设置的比较高为0.5,可以看到人有漏检。足球目标所占像素点太少,在整体过程中都为漏检。
只有极少数几帧能检测到
在镜头拉近,目标变大时,足球像素点占比提升,从小目标变成大目标,检测才稳定。
对人物出现交叠的情况,检测还可以未出现问题。不过远处的人基本置信度都太低,框不出来。
视频转换为gif后的部分效果
总结
考虑到要覆盖多尺度的目标检测问题,官方yolov5s的检测结果整体上中规中矩。考虑到测试视频的转播视角大多数目标类均为小目标,如果需要提升小目标的检测效果,还需要重新训练调校anchor,但我们可以利用这个预训练权重对训练数据进行预标注。然后人工手动检查与微调标注框,再训练迭代,以节省时间。