FiftyOne图像去重工具Skill fiftyone-find-duplicates

FiftyOne图像去重工具是一个基于深度学习的计算机视觉工具,专门用于在图像数据集中查找和移除重复或近似重复的图像。通过使用FiftyOne大脑插件的相似度计算功能,该工具能够自动识别视觉相似的图像,支持数据集清洗、图像聚类、冗余样本删除等操作。主要功能包括:计算图像嵌入向量、查找完全重复和近似重复图像、按相似度排序、自动去重等。适用于机器学习数据预处理、计算机视觉项目、图像数据集管理等场景。关键词:图像去重、FiftyOne、深度学习、计算机视觉、数据集清洗、相似度计算、图像聚类、数据预处理、AI工具、视觉识别。

计算机视觉 1 次安装 15 次浏览 更新于 3/1/2026

名称: fiftyone-find-duplicates 描述: 使用大脑相似度计算在FiftyOne数据集中查找重复或近似重复的图像。当用户需要去重数据集、查找相似图像、聚类视觉相似内容或移除冗余样本时使用。需要安装@voxel51/brain插件的FiftyOne MCP服务器。

在FiftyOne数据集中查找重复项

概述

使用FiftyOne的大脑相似度算子查找并移除重复或近似重复的图像。利用深度学习嵌入来识别视觉相似的图像。

在以下情况使用此技能:

  • 从数据集中移除重复图像
  • 查找近似重复图像(相似但不完全相同)
  • 聚类视觉相似的图像
  • 训练前清洗数据集

前提条件

  • 已安装并运行FiftyOne MCP服务器
  • 已安装并启用@voxel51/brain插件
  • 已在FiftyOne中加载包含图像样本的数据集

关键指令

始终遵循以下规则:

1. 首先设置上下文

set_context(dataset_name="my-dataset")

2. 启动FiftyOne应用

大脑算子需要委托并需要应用:

launch_app()

等待5-10秒进行初始化。

3. 动态发现算子

# 列出所有大脑算子
list_operators(builtin_only=False)

# 获取特定算子的模式
get_operator_schema(operator_uri="@voxel51/brain/compute_similarity")

4. 在查找重复项之前计算嵌入

execute_operator(
    operator_uri="@voxel51/brain/compute_similarity",
    params={"brain_key": "img_sim", "model": "mobilenet-v2-imagenet-torch"}
)

5. 完成后关闭应用

close_app()

完整工作流程

步骤1:设置

# 设置上下文
set_context(dataset_name="my-dataset")

# 启动应用(大脑算子必需)
launch_app()

步骤2:验证大脑插件

# 检查大脑插件是否可用
list_plugins(enabled=True)

# 如果未安装:
download_plugin(
    url_or_repo="voxel51/fiftyone-plugins",
    plugin_names=["@voxel51/brain"]
)
enable_plugin(plugin_name="@voxel51/brain")

步骤3:发现大脑算子

# 列出所有可用算子
list_operators(builtin_only=False)

# 获取compute_similarity的模式
get_operator_schema(operator_uri="@voxel51/brain/compute_similarity")

# 获取find_duplicates的模式
get_operator_schema(operator_uri="@voxel51/brain/find_duplicates")

步骤4:计算相似度

# 执行算子以计算嵌入
execute_operator(
    operator_uri="@voxel51/brain/compute_similarity",
    params={
        "brain_key": "img_duplicates",
        "model": "mobilenet-v2-imagenet-torch"
    }
)

步骤5:查找近似重复项

execute_operator(
    operator_uri="@voxel51/brain/find_near_duplicates",
    params={
        "similarity_index": "img_duplicates",
        "threshold": 0.3
    }
)

阈值指南(基于距离,越低越相似):

  • 0.1 = 非常相似(接近完全重复)
  • 0.3 = 近似重复(推荐默认值)
  • 0.5 = 相似图像
  • 0.7 = 松散相似

此算子会自动创建两个保存的视图:

  • near duplicates:所有近似重复的样本
  • representatives of near duplicates:每组中的一个代表

步骤6:在应用中查看重复项

查找重复项后,使用set_view在FiftyOne应用中显示它们:

选项A:按near_dup_id字段过滤

# 显示所有具有near_dup_id的样本(所有重复项)
set_view(exists=["near_dup_id"])

选项B:显示特定重复组

# 显示具有特定重复组ID的样本
set_view(filters={"near_dup_id": 1})

选项C:加载保存的视图(如果可用)

# 加载自动创建的保存视图
set_view(view_name="near duplicates")

选项D:清除过滤器以显示所有样本

clear_view()

find_near_duplicates算子会向样本添加一个near_dup_id字段。具有相同ID的样本彼此是重复项。

步骤7:删除重复项

选项A:使用去重算子(每组保留一个代表)

execute_operator(
    operator_uri="@voxel51/brain/deduplicate_near_duplicates",
    params={}
)

选项B:从应用UI手动删除

  1. 使用set_view(exists=["near_dup_id"])显示重复项
  2. http://localhost:5151/的应用中查看样本
  3. 选择要删除的样本
  4. 在应用中使用删除操作

步骤8:清理

close_app()

可用工具

会话视图工具

工具 描述
set_view(exists=[...]) 过滤字段具有非None值的样本
set_view(filters={...}) 按精确字段值过滤样本
set_view(tags=[...]) 按标签过滤样本
set_view(sample_ids=[...]) 选择特定的样本ID
set_view(view_name="...") 按名称加载保存的视图
clear_view() 清除过滤器,显示所有样本

用于重复项的大脑算子

使用list_operators()发现并使用get_operator_schema()查看参数:

算子 描述
@voxel51/brain/compute_similarity 计算嵌入和相似度索引
@voxel51/brain/find_near_duplicates 查找近似重复样本
@voxel51/brain/deduplicate_near_duplicates 删除重复项,保留代表
@voxel51/brain/find_exact_duplicates 查找完全重复的媒体文件
@voxel51/brain/deduplicate_exact_duplicates 删除完全重复项
@voxel51/brain/compute_uniqueness 计算唯一性分数

常见用例

用例1:移除完全重复项

对于意外重复的文件(相同字节):

set_context(dataset_name="my-dataset")
launch_app()

execute_operator(
    operator_uri="@voxel51/brain/find_exact_duplicates",
    params={}
)

execute_operator(
    operator_uri="@voxel51/brain/deduplicate_exact_duplicates",
    params={}
)

close_app()

用例2:查找并查看近似重复项

对于视觉相似但不完全相同的图像:

set_context(dataset_name="my-dataset")
launch_app()

# 计算嵌入
execute_operator(
    operator_uri="@voxel51/brain/compute_similarity",
    params={"brain_key": "near_dups", "model": "mobilenet-v2-imagenet-torch"}
)

# 查找重复项
execute_operator(
    operator_uri="@voxel51/brain/find_near_duplicates",
    params={"similarity_index": "near_dups", "threshold": 0.3}
)

# 在应用中查看重复项
set_view(exists=["near_dup_id"])

# 查看后,去重
execute_operator(
    operator_uri="@voxel51/brain/deduplicate_near_duplicates",
    params={}
)

# 清除视图并关闭
clear_view()
close_app()

用例3:按相似度排序

查找与特定样本相似的图像:

set_context(dataset_name="my-dataset")
launch_app()

execute_operator(
    operator_uri="@voxel51/brain/compute_similarity",
    params={"brain_key": "search"}
)

execute_operator(
    operator_uri="@voxel51/brain/sort_by_similarity",
    params={
        "brain_key": "search",
        "query_id": "sample_id_here",
        "k": 20
    }
)

close_app()

故障排除

错误:“没有可用的执行器”

  • 原因:委托算子需要应用执行器进行UI触发
  • 解决方案:引导用户到应用UI查看结果并手动完成删除
  • 受影响的算子:find_near_duplicatesdeduplicate_near_duplicates

错误:“未找到大脑键”

  • 原因:未计算嵌入
  • 解决方案:首先使用brain_key运行compute_similarity

错误:“未找到算子”

  • 原因:未安装大脑插件
  • 解决方案:使用download_plugin()enable_plugin()安装

错误:“缺少依赖项”(例如torch、tensorflow)

  • MCP服务器会自动检测缺少的依赖项
  • 响应包括missing_packageinstall_command
  • 示例响应:
    {
      "error_type": "missing_dependency",
      "missing_package": "torch",
      "install_command": "pip install torch"
    }
    
  • 为用户提供运行安装命令
  • 安装后,重启MCP服务器并重试

相似度计算缓慢

  • 使用更快的模型:mobilenet-v2-imagenet-torch
  • 如果可用,使用GPU
  • 分批处理大型数据集

最佳实践

  1. 动态发现 - 使用list_operators()get_operator_schema()获取当前算子名称和参数
  2. 从默认阈值开始(0.3)并根据需要调整
  3. 删除前查看 - 引导用户到应用检查重复项
  4. 存储嵌入 - 通过brain_key重复用于多个操作
  5. 优雅处理执行器错误 - 需要时引导用户到应用UI

性能说明

嵌入计算时间:

  • 1,000张图像:约1-2分钟
  • 10,000张图像:约10-15分钟
  • 100,000张图像:约1-2小时

内存要求:

  • 每张图像约2KB用于嵌入
  • 每张图像约4-8KB用于相似度索引

资源

许可证

版权所有 2017-2025,Voxel51, Inc. Apache 2.0许可证