昇腾社区首页
中文
注册

聚类场景数据集构建

构建聚类场景数据集。 先将每个图片提取后的特征放置在对应ID目录内。再按照如下方式,进行数据集划分:

  1. 文件夹过滤:过滤样本数少于3的ID文件夹,保证该ID可以提取query。
  2. Learn & Base:从每个ID内随机选取10%作为Learn,80%作为Base,并记录每个base的真实ID为base_dict,再随机1个为query候选,使三部分数据无重合。
  3. Query选取:随机选取2W个ID作为query的目标类别,并将这些ID的query候选组合成query数据,得到2W个查询向量,并记录每个query的真实IDquery_dict
  4. 归一化:使用Faiss中的normalize_L2进行数据归一化。
  5. GT生成:使用faiss.GpuIndexFlatIP,暴力计算query和base的IP距离,选择距离query最近的1个base的index(从0开始)作为其标签。
    参考代码:
    res = faiss.StandardGpuResources()
    config = faiss.GpuIndexFlatConfig()
    config.device = gpu_id
    index = faiss.GpuIndexFlatIP(res, dim, config)
    index.add(base)
    dist, I = index.search(query_features, 1)
    
  6. 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)