Learn-to-Cluster中的置信度与连通性估计:CVPR 2020论文解读
【免费下载链接】learn-to-clusterLearning to Cluster Faces (CVPR 2019, CVPR 2020)项目地址: https://gitcode.com/gh_mirrors/le/learn-to-cluster
在计算机视觉领域,人脸聚类是一个极具挑战性的任务,它需要将大量未标记的人脸图像自动分组到不同的身份类别中。传统方法往往依赖于手工设计的相似度阈值和聚类算法,但这些方法在面对复杂的人脸变化时表现有限。CVPR 2020论文《Learning to Cluster Faces via Confidence and Connectivity Estimation》提出了一种创新的人脸聚类方法,通过学习置信度和连通性估计,实现了更准确的人脸聚类效果。
🎯 核心创新:双网络架构
Learn-to-Cluster的核心创新在于提出了一个双网络架构,分别负责置信度估计和连通性估计。这两个网络协同工作,共同解决了人脸聚类中的关键挑战:
1. 置信度估计网络 (GCN-V)
置信度估计网络用于评估每个节点(人脸图像)作为聚类中心的可能性。该网络基于图卷积神经网络(GCN)构建,通过学习节点特征与其邻居节点的关系来预测置信度分数。
在代码实现中,GCN-V模型位于vegcn/models/gcn_v.py,其核心架构包括:
- 图卷积层:
GraphConv(feature_dim, nhid, MeanAggregator, dropout) - 分类器:多层感知机输出置信度分数
- 损失函数:均方误差损失
2. 连通性估计网络 (GCN-E)
连通性估计网络负责预测图中节点之间的连接概率。这个网络同样基于GCN,但具有更深的结构,包含四个图卷积层,能够更好地捕捉节点间的复杂关系。
在vegcn/models/gcn_e.py中,GCN-E模型采用更深的网络结构:
- 四个图卷积层,逐步提取特征
- 分类器输出连接概率
- 支持二元分类(连接/不连接)或回归任务
🔍 置信度估计的四种度量方法
论文中定义了四种置信度度量方法,这些方法在vegcn/confidence.py中实现:
s_nbr方法
基于邻居节点的监督置信度定义,计算每个节点与其邻居节点的正负相似度差异。
def s_nbr(dists, nbrs, idx2lb, **kwargs): num, _ = dists.shape conf = np.zeros((num, ), dtype=np.float32) for i, (nbr, dist) in enumerate(zip(nbrs, dists)): lb = idx2lb[i] pos, neg = 0, 0 for j, n in enumerate(nbr): if idx2lb[n] == lb: pos += 1 - dist[j] else: neg += 1 - dist[j] conf[i] = pos - neg conf /= np.abs(conf).max() return confs_nbr_size_norm方法
在s_nbr基础上进行归一化处理,考虑了邻居节点数量的影响。
s_avg方法
使用同一类别内节点间的平均相似度作为置信度度量。
s_center方法
计算每个节点与其类别中心的相似度作为置信度。
🚀 置信度到峰值转换算法
置信度估计完成后,需要将置信度转换为峰值(聚类中心)。confidence_to_peaks函数实现了这一关键转换:
def confidence_to_peaks(dists, nbrs, confidence, max_conn=1): num, _ = dists.shape dist2peak = {i: [] for i in range(num)} peaks = {i: [] for i in range(num)} for i, nbr in tqdm(enumerate(nbrs)): nbr_conf = confidence[nbr] for j, c in enumerate(nbr_conf): nbr_idx = nbr[j] if i == nbr_idx or c < (confidence[i] - conf_eps): continue dist2peak[i].append(dists[i, j]) peaks[i].append(nbr_idx) if len(dist2peak[i]) >= max_conn: break return dist2peak, peaks这个算法确保每个节点只连接到置信度更高的邻居节点,从而形成有向的峰值指向关系。
📊 数据准备与处理流程
数据加载
在vegcn/datasets/gcn_v_dataset.py中,数据加载过程包括:
- 读取特征和标签数据
- 构建K近邻图
- 计算对称邻接矩阵
- 生成置信度标签
特征归一化
if self.is_norm_feat: self.features = l2norm(self.features)图构建
使用FAISS库高效构建K近邻图,然后转换为稀疏邻接矩阵并进行行归一化。
⚙️ 训练配置与超参数
训练配置文件位于vegcn/configs/cfg_train_gcnv_ms1m.py,关键配置包括:
数据配置
- K近邻数量:k=80
- 相似度阈值:th_sim=0.0
- 置信度度量方法:conf_metric='s_nbr'
模型配置
- 特征维度:feature_dim=256
- 隐藏层维度:nhid=512
- 输出类别:nclass=1(回归任务)
- Dropout率:dropout=0.0
训练参数
- 优化器:SGD,学习率0.1
- 总训练轮数:80000
- 学习率调度:在总轮数的50%、80%、90%处衰减
🎨 算法流程详解
阶段一:置信度估计
- 输入人脸特征和K近邻图
- 使用GCN-V网络预测每个节点的置信度分数
- 置信度分数反映了节点作为聚类中心的可能性
阶段二:连通性估计
- 基于置信度分数构建有向图
- 使用GCN-E网络预测节点间的连接概率
- 连接概率反映了节点是否属于同一聚类
阶段三:聚类生成
- 根据置信度和连接概率构建最终聚类
- 每个节点连接到置信度更高的邻居
- 形成聚类树状结构
📈 性能优势与实验结果
在MS-Celeb-1M数据集上的表现
根据论文结果,GCN-V + GCN-E组合在584K测试集上取得了:
- 成对F分数:87.93%
- BCubed F分数:86.09%
- NMI:96.41%
与其他方法的对比
相比传统聚类方法,Learn-to-Cluster具有显著优势:
- 相比Chinese Whispers:F分数提升34%
- 相比KNN DBSCAN:F分数提升20%
- 相比CDP方法:F分数提升12.9%
💡 技术亮点
1. 端到端学习
整个系统可以端到端训练,无需手工设计阈值参数。
2. 可扩展性
基于图卷积网络的设计使得算法能够处理大规模数据集。
3. 鲁棒性
双网络架构提高了对噪声和异常值的鲁棒性。
4. 通用性
方法不仅适用于人脸聚类,还可扩展到其他图聚类任务。
🛠️ 实际应用指南
快速开始
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/le/learn-to-cluster - 安装依赖:
pip install -r requirements.txt - 下载预训练模型
- 运行测试脚本
训练自定义模型
# 训练GCN-V模型 sh scripts/vegcn/train_gcn_v_ms1m.sh # 训练GCN-E模型 sh scripts/vegcn/train_gcn_e_ms1m.sh测试模型性能
# 测试GCN-V模型 sh scripts/vegcn/test_gcn_v_ms1m.sh # 测试GCN-E模型 sh scripts/vegcn/test_gcn_e_ms1m.sh🔮 未来发展方向
多模态融合
结合人脸特征以外的其他模态信息,如姿态、表情、光照等。
增量学习
支持在线增量学习,适应动态变化的数据集。
无监督学习
探索完全无监督的置信度和连通性估计方法。
实时处理
优化算法效率,支持实时人脸聚类应用。
📚 总结
Learn-to-Cluster通过创新的置信度与连通性估计方法,为人脸聚类任务提供了全新的解决方案。其双网络架构不仅提高了聚类精度,还增强了算法的鲁棒性和可扩展性。该方法的成功证明了学习型聚类算法相对于传统方法的优势,为计算机视觉领域的聚类问题开辟了新的研究方向。
通过深入理解置信度估计和连通性估计的核心原理,研究人员和开发者可以更好地应用这一技术,并在其基础上进行改进和创新,推动人脸聚类技术向更高水平发展。
【免费下载链接】learn-to-clusterLearning to Cluster Faces (CVPR 2019, CVPR 2020)项目地址: https://gitcode.com/gh_mirrors/le/learn-to-cluster
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考