聚类场景数据集构建
构建聚类场景数据集。 先将每个图片提取后的特征放置在对应ID目录内。再按照如下方式,进行数据集划分:
- 文件夹过滤:过滤样本数少于3的ID文件夹,保证该ID可以提取query。
- Learn & Base:从每个ID内随机选取10%作为Learn,80%作为Base,并记录每个base的真实ID为base_dict,再随机1个为query候选,使三部分数据无重合。
- Query选取:随机选取2W个ID作为query的目标类别,并将这些ID的query候选组合成query数据,得到2W个查询向量,并记录每个query的真实ID为query_dict。
- 归一化:使用Faiss中的normalize_L2进行数据归一化。
- GT生成:使用faiss.GpuIndexFlatIP,暴力计算query和base的IP距离,选择距离query最近的1个base的index(从0开始)作为其标签。
- Query过滤:在获取所有query的标签后,判断query真实ID与gt对应base的真实ID是否相同,是,则保留。否则,将该query及对应位置GT滤除,保证query的GT是可靠的。
query_to_delete = [] for label, (cls, top1) in enumerate(zip(query_cls, I)): id = top1[0] if id not in base_dict[cls]: query_to_delete.append(label)