文章目录
零、背景与前言
随着体育比赛视频分析需求的增长,如何高效且准确地追踪高速小物体(如网球、羽毛球等)逐渐成为计算机视觉领域的重要课题。在传统的图像处理方法中,由于高速运动物体的图像常常受到运动模糊、遮挡以及低分辨率等问题的影响,尤其是网球,因其尺寸小、速度快,往往呈现出模糊的图像或“残影”现象,导致物体的准确定位和追踪变得极为困难,传统方法难以应对。
2019年,Huang等人提出了一种基于深度学习的全新追踪模型——TrackNet,旨在解决模糊、遮挡以及图像的低分辨率这些问题,为体育视频分析提供了一个突破性的解决方案。
一、TrackNetV1:开山之作
论文链接: TrackNet: A Deep Learning Network for Tracking
High-speed and Tiny Objects in Sports Applications
官方数据集:Shuttlecock Trajectory Dataset
开源代码:v1
1.1 简介
TrackNetV1通过结合多个连续帧的信息,能够在运动模糊、低分辨率和遮挡等情况下,依然精确追踪运动中的网球或羽毛球,即使这些物体在视频中快速移动或消失。v1以VGG-16作为特征提取网络,并结合了上采样网络来生成高精度的物体位置热图。
1.2 网络结构

TrackNetV1采用了基于VGG-16的深度卷积神经网络(CNN)结构,并结合了上采样机制以生成目标检测的热图。其网络结构主要分为以下两大部分:
-
VGG-16骨干网络:TrackNetV1使用VGG-16网络作为特征提取的骨干网络,VGG-16通过逐层提取输入图像的高层特征,其前13层主要用于提取图像的特征,而后面的层则为生成检测热图提供支持。
- 完整的VGG-16由5层卷积层、3层全连接层、softmax输出层构成,层与层之间使用max-pooling(最大化池)分开,所有隐层的激活单元都采用ReLU函数。
“(卷-卷-池化)–(卷-卷-池化)–(卷-卷-卷-池化)–(卷-卷-卷-池化)–(卷-卷-卷-池化)–(全连接-全连接-全连接)–softmax” - TrackNetv1网络前半段的编码部分即下采样部分,仅仅用到了VGG-16的前半部分,“卷-卷-池化–卷-卷-池化–卷-卷-卷-池化”,并且每次卷积后都用到小批量正则化(Batch Normalization,简称BN)和ReLU激活函数。
- 完整的VGG-16由5层卷积层、3层全连接层、softmax输出层构成,层与层之间使用max-pooling(最大化池)分开,所有隐层的激活单元都采用ReLU函数。
-
上采样机制(Upsampling):为了恢复经过卷积操作后失去的空间信息,TrackNetV1论文中说采用了反卷积(Deconvolution)技术,但v3的代码用到的是nn.Upsample方法,是双线性差值算法。能够将低分辨率的特征图通过上采样操作恢复至原图分辨率,从而生成一个与输入图像尺寸相同的检测热图。
# 这里截取v3代码片段,用的nn.Upsample,说明是双线性差值算法进行上采样 x = torch.cat([nn.Upsample(scale_factor=2)(x), x3], dim=1) # (N, 768, 72, 128)
1.3 细节实现
多帧输入机制
TrackNetV1的一个关键创新是其多帧输入机制。通过对网络输入3个连续的图像帧,9个通道,TrackNet能够学习到物体的飞行轨迹,而不仅仅是单独一帧中的物体位置。网络通过对多个帧的输入进行处理,即使一帧中球被遮挡,仍然可以根据上下帧的信息推测出位置,即能够根据轨迹模式推测物体的运动路径,从而减少由于模糊或遮挡导致的目标丢失。
高斯热图生成
TrackNetV1通过生成一个中心为物体位置的高斯分布热图来表示物体的位置。在训练过程中,网络会根据真实标签生成一个目标位置的高斯分布,并与网络输出的热图进行比对。网络的目标是通过调整其权重,使输出的热图尽可能接近真实的高斯分布。高斯分布的标准差(σ)用于控制物体位置的模糊程度,确保网络在追踪物体时能够处理一定的误差。
VGG-16特征提取与上采样
TrackNetV1使用VGG-16作为特征提取器,VGG-16由13层卷积层和3层全连接层组成。为了进行像素级的物体定位,TrackNetV1引入了上采样机制,将经过池化层下采样的特征图恢复到原图尺寸。反卷积操作(DeconvNet)在这里起到了重要作用,它通过反向传播和滤波的方式,将压缩的特征图逐步还原成完整的检测热图。
后处理输出
输入连续三帧图像,经过网络的推理,在网络倒数第二层得出的三维张量 L ( i , j , l ) L(i,j,l) L(i,j,l),再经过 s o f t m a x 层 softmax层 softmax层的归一化计算得出概率灰度热图 P ( i , j , k ) P(i, j, k) P(i,j,k),计算公式如下:
P ( i , j , k ) = e L ( i , j , k ) ∑ l = 0 255 e L ( i , j , l ) P(i, j, k) = \frac{e^{L(i,j,k)}}{\sum_{l=0}^{255} e^{L(i,j,l)}} P(i,j,k)=∑l=0255eL(i,j,l)eL(i,j,k)
对于从网络得到的热图,进行以下后处理:
1. 二值化处理
首先,将网络生成的热图进行二值化处理。热图中的每个像素值表示该位置是目标物体中心的概率,二值化的目的是将概率图转换为一个明确的只有两种像素的黑白二值化图(black-white binary heatmap)。对于每个像素位置 ( i , j ) (i, j) (i,j),如果热图像素的灰度值大于等于一个阈值 t t t(根据经验设为128),则该像素值被设置为255(表示可能是物体的位置);否则,将像素值设置为0。得出 h ( x , y ) h(x,y) h(x,y)
h ( i , j ) = { 255 , if L ( i , j ) ≥ t 0 , if L ( i , j ) < t h(i, j) = \begin{cases} 255, & \text{if } L(i, j) \geq t \\ 0, & \text{if } L(i, j) < t \end{cases} h(i,j)={
255,0,if L(i,j)≥tif L(i,j)<t
其中, L ( i , j ) L(i, j) L(i,j) 是网络输出的热图值,即 P ( i , j , k ) P(i,j,k) P(i,j,k)的灰度 k k k, t t t 是二值化阈值。
2. 霍夫变换(Hough Transform)
二值化后的图像仍然是一个简单的黑白图,接下来使用霍夫变换来检测图像中的圆形,通过将图像空间的每个像素点映射到参数空间,寻找最佳的圆形匹配。如果二值化后的热图中存在一个圆形区域,霍夫变换将检测到这个圆,并计算出圆的中心坐标。
步骤如下:
1. 边缘检测: 首先对输入图像进行边缘检测,通常使用像Canny边缘检测器,提取出图像中的边缘信息。这些边缘信息是圆形检测的关键。
2. 参数空间映射: 对每一个边缘点 (x,y),尝试不同的半径值 rr(可以设定一个可能的半径范围)。然后计算出与这些半径值对应的圆心坐标 (a,b),并将这些参数空间中的点进行累积。
3. 投票与累积: 在参数空间中,通过对每一组可能的圆的参数进行投票来累积信息。投票的数量代表了该参数组合的可能性,投票数越高,表示这个圆形越可能在图像中出现。
4. 检测圆形: 通过寻找参数空间中的峰值,找到累积最多的圆心坐标和半径,从而确定图像中的圆形位置。
3. 最终输出位置
如果霍夫变换检测到一个圆形并确定其中心位置,则返回该圆心的坐标作为物体的位置。如果没有检测到圆形,或者检测到多个圆形,则认为没有检测到物体。
1.4 数据集与损失函数
数据来源与标签
v1的数据集来自2017年夏季大运会男子单打决赛的视频。分辨率为1280×720,帧率为30fps,总时长75分钟。经过筛选,数据集被分割成81个比赛相关片段,共计20,844帧。标签如下:
- Frame Name:帧的文件名或序号。
- Visibility Class (VC):球在每一帧中的可见性,分为四个类别对应四个值 { 0 , 1 , 2 , 3 } \{0,1,2,3\} {
0,1,2,3}:
- VC = 0:表示球不在帧内。
- VC = 1:表示球可以轻松识别。
- VC = 2:表示球在帧内,但较难识别(例如球的颜色与背景颜色相似)。
- VC = 3:表示球被其他物体遮挡(如球员)。
- X, Y:表示球的中心点的像素坐标,反映了球在该帧中的位置。
- Trajectory Pattern:表示球的运动状态,分为三种类型,三个值 { 0 , 1 , 2 } \{0,1,2\} {
0,1,2}:
- 0:飞行中(flying)
- 1:击打(hit)
- 2:弹跳(bouncing)
高斯分布生成热图
标签中的球的位置信息是一个二维坐标,但网络输出的是热图。所以坐标需要经过高斯变换,生成热图的ground truth,才能与网络输出的热图比对,计算损失函数。
基于球中心的高斯分布。假设球的标签中心位置为 ( x 0 , y 0 ) (x_0, y_0) (x0,y0),二维高斯分布的公式如下:
G ( x , y ) = 1 2 π σ 2 e − ( x − x 0 ) 2 + ( y − y 0 ) 2 2 σ 2 ⋅ 255 G(x, y) = \frac{1}{2\pi \sigma^2} e^{-\frac{(x - x_0)^2 + (y - y_0)^2}{2\sigma^2}} \cdot 255 G(x,y)=2πσ21e−2σ2(x−x0)2+(y−y0)2⋅255
其中,

最低0.47元/天 解锁文章
1519





