商汤&港理工提出基于聚类的联合建模时空关系的 GroupFormer 用于解决群体活动识别问题,性能SOTA
▊ 写在前面
群体活动识别是一个关键而又具有挑战性的问题,其核心在于充分探索个体之间的时空交互,产生合理的群体表征 。然而,以前的方法要么分别建模空间和时间信息,要么直接聚合个体特征形成群体特征。
2)GroupFormer对时空依赖关系进行综合建模 ,并利用解码器建立时空信息之间的联系。
3)利用聚类注意机制动态地将个体划分为多个聚类 ,以更高效地学习具有活动感知能力的语义表征。
▊ 0. K-Means聚类算法
本文在算法实现的时候用到k-means算法,因此,在介绍这篇文章之前,先和大家一起来复习k-means算法吧!
第二步:给聚类中心分配样本;
第三步:移动聚类中心;
第四步:判断是否达到终止条件,决定是否停止移动。
完整代码:
import numpy as np
def distance(p1,p2):
return np.sqrt((p1[0]-p2[0])**2+(p1[1]-p2[1])**2)
def kmeans(nums,k,tolerance=1e-4,max_iter=100):
centers={} #聚类中心
#初始化中心点
for i in range(k):
centers[i]=np.random.randint(low=0,high=500,size=2)
for iter in range(max_iter):
print('this is',iter,'epoch')
clusters={} #每个类包含那些点
#初始化每个类的点
for i in range(k):
clusters[i]=[]
#计算所有点所属的类
for item in nums:
all_dis=[]
for i in range(k):
all_dis.append(distance(item,centers[i]))
clusters[np.argmin(all_dis)].append(item)
#计算新的聚类中心
pre_centers=centers.copy()
for i in range(k):
centers[i]=np.mean(clusters[i],axis=0)
#判断是否还需要继续更新
ok=True
for i in range(k):
if(abs(np.sum((centers[i]-pre_centers[i])**2))>tolerance):
ok=False
break
if(ok==True):
break
return centers,clusters
input=np.random.randint(low=0,high=500,size=(500,2))
center,cluster=kmeans(input,k=4)
print(center)
import matplotlib.pyplot as plt
colors=['r','g','b','y']
for k,points in cluster.items():
for p in points:
plt.scatter(p[0],p[1],color=colors[k])
for k,point in center.items():
plt.scatter(point[0],point[1],color=colors[k],marker='*')
plt.show()
▊ 1. 论文和代码地址
GroupFormer: Group Activity Recognition with Clustered Spatial-Temporal Transformer
论文:https://arxiv.org/abs/2108.12630
代码:https://github.com/xueyee/GroupFormer
(未开源)
▊ 2. Motivation
由于其在监控系统、视频分析和社会行为分析中的广泛应用,群体活动识别目前是一个重要的研究问题。与传统的动作识别不同,群体活动识别需要理解多个个体的场景。
2)根据个体的相互关系将这些个体分组,以便更好地推断全局的活动上下文 。
▊ 3. 方法
2)用于个体和场景特征初始化的群体表示生成器(Group Representation Generator,GRG) ;
3)用于建模时空关系,细化群体表示和个体表示的聚类时空Transformer(CSTT) 。
3.1.特征提取器
对于特征提取器,作者使用了Kinetics预训练的3D网络(I3D)作为Backbone。首先切割以标注帧为中心的t帧,记为。作者从最后一个卷积层中提取特征图,并将大小调整为,这可以看做整个视频clip的场景特征。
3.2.群体表示生成器
群体表示生成器(GRG)是一个在模型中用于初始化群体表示的预处理组件。作者将场景特征和个体特征分别转换为视觉token,然后将它们聚合以生成群体表示。对于场景特征,作者将时间维度视为Batch维度,并应用二维卷积将通道维度转换为。然后,作者将其flatten为,并用softmax操作,生成空间注意矩阵。
3.3.聚类时空Transformer
3.3.1 标准Transformer
标准的Transformer是用于序列到序列的NLP任务,它包含编码器和解码器,两者都由多头注意层(multi-head attention layer)和前馈网络(feed-forward network)组成。多头注意力通过比较一个特征和其他特征之间的两两相似性来计算权重。
3.3.2 时空Transformer(SST)
为群体活动识别而设计的时空Transformer(STT)增强了个体表征和群体表征。它包括两个并行的编码器(一个空间编码器 和时间编码器 ),分别生成空间和时间特征。并引入交叉的个体解码器 来解码时空上下文信息。最后,用一个群体解码器 来增强群体的表示。(具体结构如上图所示)
Encoders
尽管每个个体都已经被准确定位了,但仍然缺乏对语义时空上下文的信息增强。因此,作者采用了两个并行编码器来embed上下文特征。在一个分支中,作者采用了一个基于Transformer的空间编码器 来学习个体的上下文信息。给定输入的个体表示,作者将时间维度视为Batch维度,并应用一个编码器来建模所有帧的空间上下文。第t帧的空间上下文的embed过程可以表述为:
Individual Decoders
上面的两个Encoder中分别对时间和空间维度的个体特征进行了建模。然后,作者提出了个体解码器 来综合考虑空间和时空上下文信息。个体解码器遵循标准Transformer的解码器的设计,来互补利用时空上下文。
Group Decoder
在多人场景中总结个体互动对于群体活动推断至关重要,因此,作者引入了一个群体解码器 (Group Decoder)来通过个体表示来增强群体表示。群体解码器也遵循Transformer的解码器设计。
3.3.3 Clustered Attention Mechanism
虽然基于全连接注意机制的时空Transformer(STT)能够建模个体的关系,但它包含了许多不相关个体的关系。为了使模型能够关注关键的群体关系,作者将全连接的注意力替换为聚类的注意力,并将整个模块称之为聚类时空Transformer(Clustered Spatial-Temporal Transformer,CSTT) 。它可以对个体进行分组,并利用组内和组间的关系来捕获全局活动上下文。
2)组间注意(inter-group attention) :考虑了聚类之间成对的加权连接。
3.4.网络优化
本文提出的CSTT以端到端的方式进行训练。在CSTT中,可以直接从群体表示生成群体活动分数。同样,采用另一个分类器,使用CSTT生成的个体表示来预测个体的动作得分。对于这两个任务,作者都选择了交叉熵损失函数来指导优化过程:
▊ 4.实验
4.1.与SOTA的比较
Volleyball dataset
Collective dataset
4.2.消融研究
时空关系建模
聚类注意力方式
CSTT Block的数量
4.3.可视化
Feature Embedding可视化
聚类可视化
▊ 5. 总结
在本文中,作者提出了一种新的基于Transformer的结构,称为GroupFormer,它联合建模了时空上下文表示来推断群体活动。此外,作者还引入了聚类注意机制来对个体进行分组,并利用组内和组间的关系获得更好的群体特征表示。作者在两个数据集上进行了广泛的实验。结果表明,GroupFormer的表现超过了大多数目前的SOTA方法。
▊ 作者简介
知乎/公众号:FightingCV
END