FastBup:计算机视觉大型图像数据集分析工具

0.简介

  • 官方github网址
  • 项目目的:当前大规模图像数据集一团糟,数据量巨大但质量堪忧,有时候训练集、验证集、测试集会有重复数据造成数据泄露。FastBup可以识别重复项、近似重复项、异常图像、错误标注、异常值,在cpu上就可以处理数百万的图片。

1.安装

  • 支持环境:Python 3.7 and 3.8 (Ubuntu 20.04 or Ubuntu 18.04 or Mac M1)
  • 安装python3.8 -m pip install fastdup
  • kaggle上安装!pip install fastdup matplotlib -Uq

2.简单使用

  • 基本
import fastdup

work_dir = "./fastdup_report"#分析结果输出文件夹
images_dir = "/train"#待分析图像所在文件夹

fd = fastdup.create(work_dir, images_dir)
fd.run(ccthreshold=0.9, threshold=0.8, overwrite=True)
  • 结果保存
#结果保存
fastdup.create_duplicates_gallery('similarity.csv', save_path='.')       #create a visual gallery of found duplicates
fastdup.create_duplicates_gallery('outliers.csv',   save_path='.')       #create a visual gallery of anomalies
  • 可视化显示重复图像,距离1代表完成相同,0代表完全不同,0.98以上认为是几乎相同
#可视化显示重复图像,距离1代表完成相同,0代表完全不同
fd.vis.duplicates_gallery(num_images=50)

FastBup:计算机视觉大型图像数据集分析工具_第1张图片- 可视化显示异常图

#可视化显示异常图
fd.vis.outliers_gallery()

FastBup:计算机视觉大型图像数据集分析工具_第2张图片- 查看最暗的图片

fd.vis.stats_gallery(metric='dark')

FastBup:计算机视觉大型图像数据集分析工具_第3张图片- 查看最亮的图片

fd.vis.stats_gallery(metric='bright')

FastBup:计算机视觉大型图像数据集分析工具_第4张图片- 查看最模糊的图片

fd.vis.stats_gallery(metric='blur')

FastBup:计算机视觉大型图像数据集分析工具_第5张图片- 可视化相似族,将相似图片划分为一簇

#可视化相似族,将相似图片划分为一簇
fd.vis.component_gallery()

FastBup:计算机视觉大型图像数据集分析工具_第6张图片

  • 表格形式查看相似图片,方便自定义可视化
#表格形式查看
fd.similarity()

FastBup:计算机视觉大型图像数据集分析工具_第7张图片

3.详细的python API 文档

  • 官方全英github文档

  • input_dir

    • 字符串
    • 图片或视频的文件夹,会递归地处理该文件夹下的所有图片
    • 或者是一张纸图片的完整路径,每个图片占一行
  • work_dir

    • 字符串
    • 用来保存中间结果和最终输出的目录
      • 特征向量文件:默认文件名 features.dat,n行576列的二进制numpy数组
        由于二进制python不方便操作,所以提供了函数:

        file_list, mat_features = fastdup.load_binary('features.dat')
        

        返回的是长度为x的图片全程的列表和x行576列的np数组

      • 图片完整路径与特征向量映射的csv文件:默认文件名features.dat.csv(图片的处理顺序可能因为系统不同而发生改变,并且有些图片损坏无法计算特征,所以需要这个映射文件记录)

      • features.bad.csv里面会记录无法生成特征向量的损坏图像

      • 相似对列表:similarity.csv,三列(from,to,distance),并按distance降序排序,最大为1,表示两张图片完全一致(类似余弦距离)

      • faiss.index:使用faiss时生成的索引文件

      • components_info.csv:创建连通图时的每个联通节点(图片)

      • connected_components.csv:第一列是features.dat.csv文件中的索引(图像列表),文件根据列表排序,包括pagerank输出、角度分布和连通图的参数

  • compute

    • 字符串
    • 使用cpu还是gpu计算,默认是cpu
  • verbose

    • bool
    • 是否详细。默认False
  • num_threads

    • int
    • 线程数,默认-1,会自动设为cpu核数
  • num_images

    • int
    • 要计算的图片数,默认-1,计算输入路径下的所有图片
  • turi_param

    • str
    • turi的可选附加参数
      • nnmodel
        • 0/1/2
        • 聚类特征使用的最近邻模型
        • 仅对turi有效,对faiss无效
        • 0:brute_force,准确的
        • 1:ball_tree
        • 2:lsh:locality sensitive hashing,局部敏感散列
      • ccthreshold
        • [0,1]之间
        • 构建相似性图的阈值,相似度大于该值时构建相似度图
      • run_cc
        • 0/1
        • 是否进行相似度图上的连通分量计算
      • run_pagerank
        • 0/1
        • 是否进行相似图页面排名计算
      • run_degree
        • 0/1
        • 是否进行相似图角度分布计算
  • faiss相关参数

    • faiss_mode
      • str
      • HNSW32(默认)等faiss字符串
    • faiss_param
      • str
      • 如: ‘efSearch=175,nprobes=200’(指定faiss参数)
    • bounding_box
      • str
      • 在应用faiss前裁剪图像
      • 如:bounding_box=‘rows=100,cols=100,width=250,height=310’(行和列给出左上角坐标),裁剪图像范围 [rows:rows+height, cols:cols+width]
  • distance

    • str
    • 最近邻算法的距离度量
    • 余弦距离(cosine,默认)、欧几里得距离(euclidean)、平方欧几里得距离(squared_euclidean)、曼哈顿距离(manhattan)
  • threshold

    • float
    • 相似程度衡量的阈值
    • 默认0.85,大于该值认为图片非常相似,小于该值不会记为相似图片
  • lower_threshold

    • float
    • 衡量异常图片的阈值(和总体分布相比较远的离群点)
    • 默认0.3
  • model_path

    • str
    • ONNX模型文件的可选位置
    • 不应该被使用
  • version

    • bool,不需要传入任何参数
    • 是否打印版本信息
  • nearest_neighbors_k

    • int
    • 默认2,对每张照片寻找多少张相似图片
  • run_mode

    • int
    • 0/1/2、3、4,选择软件执行功能
    • 0:同时计算特征向量、NN embedding和相似度(默认,但对于大型数据集,更明智的办法是分成几步,这样即使出错也能保留下来部分中间数据)
    • 1.:只计算特征向量(可并行计算)
    • 2:只计算相似度(需要读取已有的特征文件):input_dir参数会被忽略,work_dir需要指向特征文件的完整路径和文件名
    • 3:计算特征向量和相似度(需读取faiss.index的NN模型):input_dir指定要计算相似度的图片文件夹,work_dir指向NN模型,用来将训练集上得到的NN模型直接用到新的测试集上来衡量相似度
    • 4:只计算相似度(需1里面的特征向量和2里面的NN模型):work_dir指向所需文件
  • nn_provider

    • turi/faiss
    • 最近邻算法的选择
  • 与并行计算图像子集划分有关参数

    • min_offset
      • int
      • 默认-1,在完整文件列表上开始迭代的可选最小偏移量(最小图像子集)。
    • max_offset
      • int
      • 默认-1,在完整文件列表上开始迭代的可选最大偏移量(最大图像子集)。
  • 返回值

    • 0/1
    • 0:成功
    • 1:失败
  • 举例fastdup.run('/path/to/folder', nn_provider='turi', nnmodel='brute_force')

  • 可视化输出

    • jupyter notebook能得到表格,其他环境得到的是html报告
    • 函数fastdup.create_duplicates_gallery(similarity_file, save_path, num_images=20, descending=True)
    • 或者fastdup.generate_duplicates_gallery(similarity_file, save_path, num_images=20, descending=True),官方文档写了两次,前后函数名字不一致
    • 由于参数里没有input_dir,所以要与前面的计算在同一台电脑上,保证输入图片路径完全一致
    • similarity_file
      • str
      • 之前计算出的相似度的csv文件
    • save_path
      • str
      • 可视化相关输出保存位置
    • num_images
      • int
      • 最多相似的照片数量,默认50
    • descending
      • bool
      • 默认True,从最相似到最不相似打印

你可能感兴趣的:(计算机视觉,AI比赛与实战,计算机视觉,python,数据集预处理,相似图片,数据集分析)