论文的翻译可以参考这篇博客
CVPR 2019 Linkage Based Face Clustering via Graph Convolution Network论文翻译
接下来是我的一些拙见。
1.解决的问题
该工作要解决的问题是人脸特征分布复杂情况下的人脸聚类任务。受遮挡、光照等因素的影响,人脸特征的分布复杂,会面临两个难题:1)预先假设数据分布的方法不再适用,例如K-Means聚类方法(需要输入类的数量);2)而不需假设数据分布的方法在有着较高的计算复杂度,在大规模聚类问题上不适用。
2.解决方案
本文提出将聚类问题当做连接预测问题,预测一个节点是否应当与它的k个近邻(kNN)连接,因此不需预设类的数量。由于需要计算节点的kNN,因此计算复杂度为O(nlogn),是可分级控制的且可以应用在大规模的聚类问题上。
连接预测流程为:1)为人脸图片提取特征;2)通过knn搜索找到每个节点的前k个近邻(kNN);3)为每个节点建图,并传入GCN得到与其kNN连接的可能性;4)进一步筛选得到最终的聚类结果。
以下为具体的pipeline(以15张人脸图像为例)。
设每个节点的1跳邻居个数k1=2,2跳邻居的个数k2=2,建图时节点的连接数u=3。
① 利用cnn对数据集中的人脸图片提取特征;
② 通过暴力搜索或kd树搜索找到每个节点i的2个1跳邻居并存储在列表knn_graph中,之后在knn_graph中找到1跳邻居的1跳邻居,也就是节点i的2跳邻居。 最终获得建图所需的全部节点。
举个栗子。假设上图是全部的15张人脸,并且我们已经通过搜索算法(暴力搜索或kd树)得出了他们之间的距离和相对位置。现在要将每个节点k1(=2)个1跳邻居和2跳邻居求出来。从图中可以看到节点1的最近邻是2、4,因此2、4就是节点1的1跳邻居,同理节点2的1跳邻居是12、9。因此列表knn_graph是这样的
中心节点 | 1跳邻居 |
---|---|
1 | 2,4 |
2 | 12,9 |
3 | 10,14 |
4 | 10,5 |
5 | 4,11 |
6 | 12,2 |
7 | 3,15 |
8 | 10,15 |
9 | 2,12 |
10 | 8,4 |
11 | 5,13 |
12 | 2,6 |
13 | 3,14 |
14 | 3,13 |
15 | 3,7 |
现在还需要得到每个节点的2跳邻居,其实这是根据1跳邻居得到的,比如节点1,它的1跳邻居为2、4,而2的1跳邻居为12、9,4的1跳邻居为5、10,因此节点1的2跳邻居为12、9、5、10,至此,我们也就获得了以节点1为中心节点建图所需的全部节点。如图所示
③ 为每一个节点建立一张图。以第一张图为例,中心节点为1,它的1跳及2跳邻居为Vp:1、2、4、12、9、10、5。对于Vp中的每一个节点v,找到v的前3个近邻,若近邻中的节点r也在Vp中,则连接(v, r)。最终建立的图为
④ 将所有的图传入GCN。GCN的表达式为
Y=σ([X∣∣GX]W)Y=\sigma ([X||GX]W)Y=σ([X∣∣GX]W)
其中 XXX 为图的特征矩阵,且 X∈RN×dinX \in \R^{N\times d_{in}}X∈RN×din?,Y∈RN×doutY \in \R^{N\times d_{out}}Y∈RN×dout?。dind_{in}din? 和 doutd_{out}dout? 是输入/输出节点矩阵的维度。G=Λ?1/2AΛ?1/2G=\Lambda^{-1/2}A\Lambda^{-1/2}G=Λ?1/2AΛ?1/2是聚合矩阵,A为邻接矩阵,Λ\LambdaΛ是对角矩阵且Λii=∑jAij\Lambda_{ii}=\sum_{j}A_{ij}Λii?=∑j?Aij?。运算符||表示沿特征维度拼接矩阵。W是图卷积网络的权重矩阵,大小为2din×dout2d_{in}\times d_{out}2din?×dout?,最外层的是非线性激活函数。
本文的GCN有4个卷积层,第一层输入维度为512,输出维度为512。第二层输出维度为512,第三层与第四层输出维度都为256。卷积层之后是分类器,包括两个全连接层,其间激活函数为PReLU。最后通过softmax函数得到预测的边权 没有softmax
⑤ GCN的输出为中心节点与其1跳邻居的边权,组合15张图的中心节点及其1跳邻居的边及边权。(2跳邻居只是为了获得邻接矩阵,不会有边权)
⑥ 根据边权进行聚类。使用可变阈值th以及最大合并数来防止聚类结果中某一类出现过大的聚类。阈值th初始为边权的最小值。聚类规则为:随着迭代次数增多,th增大,在每一次迭代中,确定连接权值大于阈值的边,如果该类的个数已超过max size,那么将该边待定,留到下一次迭代中再判断(下一次迭代中会有更大的th进行筛选)。
⑦ 连接着的节点为一类,最终得到聚类结果。