用机器学习识别排球比赛的阶段
排球比赛的阶段用人工智能分析排球比赛有多种方法。我过去常常跟踪球,以便将比赛时间从整个视频中分离出来。另一种方法是确定游戏阶段,并根据阶段流程做出决策。让我们假设排球比赛包括4个阶段:· 没有开始。没有人或少数人在场上徘徊
排球比赛的阶段
用人工智能分析排球比赛有多种方法。我过去常常跟踪球,以便将比赛时间从整个视频中分离出来。
另一种方法是确定游戏阶段,并根据阶段流程做出决策。
让我们假设排球比赛包括4个阶段:
· 没有开始。没有人或少数人在场上徘徊。
· 静止阶段。人们在比赛前站着不动。
· 比赛阶段。
· 欢呼阶段。即使比赛输了,人们也会聚在一起互相欢呼。
所有这些阶段都因人们相对于场和彼此的位置而不同。这意味着我们首先要做的是在图片中找到人。
人员检测
人员检测器生成带有玩家坐标的方框。该信息将作为阶段分类模型的输入。
有时探测器会漏掉人,这会给数据增加一些噪音。
数据准备
出于手动分类图片所需的训练目的,请将其移动到4个不同的文件夹中。
还有一个很好的问题是如何表示机器学习的输入数据。有两个主要选项:
· 使用检测到的框的数字表示
· 使用图片
我决定使用图片选项,因为:
· 输入大小应该是稳定的,但我们事先不知道检测的数量。球场上最多可能有12名球员,但球迷、裁判和替补球员可能会增加这个数字。图片大小是固定的。
· 检测是无序的。为了将它们用作数组输入,我们需要以某种方式对它们进行排序,例如,从左到右、按大小等。
· 人性化。盒子上的数字是很难理解的。图片化显示能提供一个很好的线索。
为了将检测结果表示为输入图片,我在黑色背景上绘制了白色实心矩形,并将其大小调整为64x64。
def get_mask(boxes):
pic = np.zeros((H,W,1), np.uint8)
clr = 255
for r in boxes:
cv.rectangle(pic, (r[0], r[1]), (r[0] + r[2], r[1] + r[3]), clr, thickness=-1)
pic = cv.resize(pic, (64, 64))
return pic
然后为每个阶段准备了掩码:
欢呼阶段:
没有开始阶段:
比赛阶段:
静止阶段:
选择分类方法
多标签分类有多种方法,因此选择并不容易。最后,选择了两种最基本也是最流行的方法:
· sklearn的近邻(又名KNN)
· 具有Tensorflow Keras(又名TFK)的简单神经网络
KNN对相同数据的准确率为81%,对随机样本的准确率为66%。
TFK也稳定在80%左右。
测试分类
让我们挑选一段排球测试视频。用的是格拉茨计算机视觉研究所提供的奥地利业余联赛的开放式视频。
1. 从游戏中提取帧。人的移动速度不是很快,所以每秒2帧就足够了:
ffmpeg -i video.mp4 -r 2 frames/%05d.jpg
2. 在帧上运行MobileSSD检测器并生成json文件。
def detect_pic(ssd, img, thr = 0.3):
rows = img.shape[0]
cols = img.shape[1]
ssd.setInput(cv.dnn.blobFromImage(img, 1.0/127.5, (600, 600), (127.5, 127.5, 127.5), swapRB=True, crop=False))
out = ssd.forward()
r = np.array([cols, rows, cols, rows])
boxes = []
scores = []
for d in out[0,0,:,:]:
score = float(d[2])
cls = int(d[1])
if cls != 1:
continue
if score < thr:
continue
box = d[3:7] * r
box[2] -= box[0]
box[3] -= box[1]
boxes.append(box.astype("int"))
scores.append(score)
if len(boxes) < 1:
return []
dxs = cv.dnn.NMSBoxes(boxes, scores, thr, 0.1)
return [boxes[i].tolist() for i in dxs.flatten()]
3. 将检测转换为输入掩码
4. 对输入掩码进行分类
两种方法的表现都比训练期间差:
· KNN-72%
· TFK-70%
5. 预测阶段
令人惊讶的是,KNN的表现也略好于TFK
结论
分类结果令人鼓舞,即使它们不够精确,这也可以为视频编辑器和观众节省一些时间。
减少视频大小有多种原因:
加密整个游戏记录。它使视频变得更小(约占原始视频的30%),存储成本更低,加载速度更快,对观众更具吸引力。
将漫长的游戏分成有意义的部分。这对球员、他们的父母和球迷都很重要——小型视频可以很容易地分享或保存在个人照片中。
参考文献:
(Required by video dataset owner)
Improved Sport Activity Recognition using Spatio-temporal ContextGeorg Waltner, Thomas Mauthner and Horst BischofIn Proc. DVS-Conference on Computer Science in Sport (DVS/GSSS), 2014
Indoor Activity Detection and Recognition for Automated Sport Games AnalysisGeorg Waltner, Thomas Mauthner and Horst BischofIn Proc. Workshop of the Austrian Association for Pattern Recognition (AAPR/OAGM), 2014
原文标题 : 用机器学习识别排球比赛的阶段