查看原文
其他

【源头活水】基于GNN的层次人脸聚类



“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—柠濛

地址:https://zhuanlan.zhihu.com/p/442888116


01

简介
本次介绍的文章来自CVPR 2021,是目前图像聚类领域比较新的一篇文章,作者来自亚马逊aws
本文提出了一种有监督的层次GNN模型,使用一种新方法融合每一层的的连接分量,从而在下一层形成新的图。对比sota F-score平均提高了54%,标准化相互信息(NMI)平均提高了8%。文章链接如下:
https://arxiv.org/abs/2107.01319


02

方法介绍

(1) framework overview

方法的主要流程如上图所示,图中同一个颜色表示相同label,通过共享的LANDER结构估计节点密度和边连接概率,进行分层聚类。具体步骤如下:
1. 根据节点特征向量构造knn graph
2. 输入到LANDER结构(GAT),输出两类值:
(1)对每个节点输出密度(文章中的dense)。密度的概念来自GCN V-E这篇文章,可以理解成是一个置信度的概念。当一个节点的邻居全部都是其他类别的图片时,该节点的密度较低。反之如果邻居全是同类型的节点,该节点的密度较高。
(2)对每条边输出置信度。网络结构:两个节点特征(经过GCN后)拼接再经过一个MLP。
3. 根据条件对原来的knn边做过滤。思路是每个节点只向密度比自己高的点连边,并且边置信度要大于预设的阈值。并且每个节点只保留边权最大的一条边。
4. 得到过滤后的连通图,每个连通分量作为一个新的节点,新节点的特征为连通分量内部所有节点特征的平均值。然后重新构造knn图并进行上述流程。
5. 迭代停止条件:不再有新的节点产生,或者达到预设的迭代轮次。

(2) lander结构及损失函数

lander结构首先经过4层的GAT得到每个节点的隐藏向量表示。对于边权重预测任务,将两个节点分别经过一层线性变换后相加,再经过多层MLP得到二维的pred_conn,分别表示    和    。
对于节点密度预测任务,首先根据边权重预测任务定义边系数    :
定义节点密度为    ,其中    是归一化后的节点向量相似度
损失函数包括两项:
其中第一项是边的损失函数,使用交叉熵。
第二项是节点密度的损失函数,使用MSE loss。

(3) 训练数据集构造

1. 需要所有的训练数据都有标签,表示哪些图片属于同一个类。
2. 使用faiss构造knn连通图,并基于label计算每个节点的dense,每条边的权重(两个阶段label相同时=1,否则=0)
3. 基于节点dense和边权重新构建连通图,每个连通分量作为下一层的一个新节点。新节点的特征向量用所有成员节点的特征向量平均值来表示。
4. 根据超参数levels,进行多轮迭代构图,得到不同尺度的训练数据,打平作为训练集。


03

实验结果分析
(1) 消融实验,表中    和    分别表示pairwise和bicubed F-score。
表中第一行,GCN-V+E论文中,对节点和边分别建了两个模型,LANDER中把两个模型合二为一,对比GCN-V+E在执行效率上有了明显提升。表中第二行和第三行对比体现出了层次的作用,对比单次操作效果指标有了明显提升。(为什么Hi-LANDER比LANDER还要快?文中没有说明)
(2) 对比不同的聚类算法,在两个数据集上都取得了SOTA的效果。
(3) 当训练集和测试集分布不一致的时候,Hi-LANDER仍然能取得不错的效果。
(4) 在不同数据集下的执行效率,其中Hannah包括200k faces,平均每个类800张图片;IMDB 1.2M faces,平均每个类25张图片;iNat2018-Test 130k instance,平均每个类56张图片

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存