PRD: DBSCAN 聚类与 2D 可视化实验¶
背景¶
智能相册场景中,用户通常不会提前提供身份标签。DBSCAN 可以基于人脸 embedding 做无监督聚类,并把无法归类的照片标记为噪声点 -1。本实验对比 HOG 128 维 baseline 与 ArcFace 512 维主路线的聚类纯度,并通过 PCA、t-SNE、UMAP 三种 2D 降维图观察聚类结构。
目标¶
- 对混合照片 embedding 执行 DBSCAN。
- 分别评估 HOG 128 维和 ArcFace 512 维聚类效果。
- 输出 PCA、t-SNE、UMAP 三张 2D 染色图。
- 分析 DBSCAN 标签为
-1的噪声点。 - 分别输出 ArcFace 主路线 report 和 HOG baseline report,并在综合报告中做对比。
非目标¶
- 不训练监督分类器。
- 不使用人工标签参与 DBSCAN 聚类过程。
- 不使用 pgvector。
输入¶
outputs/hog/embeddings.h5outputs/hog/embedding_metadata.csvoutputs/insightface/embeddings.h5outputs/insightface/embedding_metadata.csvdata/manifests/splits.csv
输出¶
outputs/dbscan/hog/cluster_labels.csvoutputs/dbscan/hog/cluster_report.jsonoutputs/dbscan/hog/pca_2d.jpgoutputs/dbscan/hog/tsne_2d.jpgoutputs/dbscan/hog/umap_2d.jpgoutputs/dbscan/insightface/cluster_labels.csvoutputs/dbscan/insightface/cluster_report.jsonoutputs/dbscan/insightface/pca_2d.jpgoutputs/dbscan/insightface/tsne_2d.jpgoutputs/dbscan/insightface/umap_2d.jpgoutputs/dbscan/insightface_cosine_eps_sweep/eps_sweep.csvoutputs/dbscan/insightface_euclidean_eps_sweep/eps_sweep.csvoutputs/dbscan/hog_cosine_eps_sweep/eps_sweep.csvoutputs/dbscan/hog_euclidean_eps_sweep/eps_sweep.csv
核心实现¶
from sklearn.cluster import DBSCAN
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import umap
labels = DBSCAN(eps=eps, min_samples=min_samples, metric=metric).fit_predict(embeddings)
points_pca = PCA(n_components=2, random_state=seed).fit_transform(embeddings)
points_tsne = TSNE(n_components=2, random_state=seed).fit_transform(embeddings)
points_umap = umap.UMAP(n_components=2, random_state=seed).fit_transform(embeddings)
DBSCAN 参数建议¶
最终正式参数:
- ArcFace 512 维:
metric=cosine,eps=0.56,min_samples=4 - HOG 128 维:
metric=euclidean,eps=0.40,min_samples=4
参数扫描必须覆盖四组组合:
- ArcFace + cosine
- ArcFace + euclidean
- HOG + cosine
- HOG + euclidean
采用或不采用不能只看 NMI。判断依据必须同时包含非噪声簇数量、噪声率、最大簇占比、ARI 和 NMI。最大簇占比用于识别是否被 DBSCAN 连成一个大簇;ARI/NMI 只用于聚类后的身份一致性评估,不参与聚类过程。
DBSCAN 参数扫描、PCA/t-SNE/UMAP 降维和绘图保存都必须使用 tqdm 展示进度。
可视化要求¶
每条路线输出三张图:
- PCA 2D scatter
- t-SNE 2D scatter
- UMAP 2D scatter
图像格式:
- 统一输出 JPG。
- 不输出 PNG,避免全量实验图像文件过大。
- JPG 保存时应记录质量参数,例如
quality=90或项目约定值。
染色规则:
- 点颜色使用 DBSCAN cluster label。
- label
-1使用灰色或低透明度。 - 可选使用不同 marker 标记 known、unknown、blurred、landscape 等质量标签。
- 图标题必须包含路线、降维方法、eps、min_samples、样本数。
指标¶
如果 cluster_mix 有隐藏真实身份标签,可计算:
adjusted_rand_indexnormalized_mutual_infohomogeneitycompletenessv_measurenoise_ratecluster_count
如果不使用真实标签,则至少输出:
- 聚类数量
- 噪声点数量
- 最大簇大小
- 单样本簇数量
- 每个簇的样例图片路径
验收标准¶
- HOG 和 ArcFace 两条路线都有独立聚类结果。
- 每条路线都有 PCA、t-SNE、UMAP 三张 2D 图。
- 图中的颜色来自 DBSCAN label,而不是人工身份标签。
- 噪声点
-1被单独统计和抽样检查。 - ArcFace 和 HOG 两条路线都必须完成,不允许只跑主路线后省略 baseline。
风险¶
- t-SNE 对随机种子和 perplexity 敏感,需要固定参数。
- UMAP 需要额外安装
umap-learn。 - 高维距离分布可能导致 DBSCAN eps 难以迁移,必须通过扫描选择。