Project Icon

PySODEvalToolkit

Python图像分割评估工具包

PySODEvalToolkit是一个Python工具包,用于评估图像灰度和二值分割算法的性能。它提供多种评估指标如MAE、F-measure和E-measure,适用于显著性目标检测和伪装目标检测等任务。该工具支持批量评估多个数据集和方法,可生成PR曲线等可视化结果,并具备多线程加速和结果导出功能。PySODEvalToolkit为研究人员提供了全面而高效的图像分割评估解决方案。

基于Python的图像灰度/二值分割评估工具箱

[中文文档](https://github.com/lartpang/PySODEvalToolkit/blob/master/./readme_zh.md

待办事项

  • 更灵活的配置脚本。
    • 使用符合matplotlib要求的yaml文件来控制绘图格式。
    • 将json替换为更灵活的配置格式,如yaml或toml。
  • 添加测试脚本。
  • 添加更详细的注释。
  • 优化导出评估结果的代码。
    • 实现将结果导出到XLSX文件的代码。
    • 优化导出到XLSX文件的代码。
    • 考虑使用CSV等文本格式是否更好?可以作为文本文件打开,也可以用Excel整理。
  • pathlib.Path替换os.path
  • 改进数据分组代码,支持CoSOD、视频二值分割等任务。
  • 支持并发策略以加快计算速度。保留多线程支持,移除之前的多进程代码。
    • 目前由于使用多线程,存在额外日志信息写入的问题,需要进一步优化。
  • 将USVOS代码分离到另一个仓库PyDavis16EvalToolbox
  • 使用更快速、准确的度量代码PySODMetrics作为评估基准。

[!tip]

  • 一些方法提供的结果名称与原始数据集的真值名称不匹配。
    • [注意] (2021-11-18) 目前已支持prefixsuffix名称,因此用户通常无需自行更改名称。
    • [可选] 提供的脚本tools/rename.py可用于批量重命名文件。请谨慎使用,以避免数据覆盖。
    • [可选] 其他工具,如Linux上的rename,Windows上的Microsoft PowerToys

特性

  • 得益于PySODMetrics,支持更丰富的度量指标。详见utils/recorders/metric_recorder.py
    • 支持评估灰度图像,如显著性目标检测(SOD)和伪装目标检测(COD)任务的预测结果。
      • MAE
      • Emeasure
      • Smeasure
      • 加权Fmeasure
      • 最大/平均/自适应Fmeasure
      • 最大/平均/自适应精确率
      • 最大/平均/自适应召回率
      • 最大/平均/自适应IoU
      • 最大/平均/自适应Dice
      • 最大/平均/自适应特异性
      • 最大/平均/自适应BER
      • Fmeasure-阈值曲线(运行eval.py时使用度量fmeasure
      • Emeasure-阈值曲线(运行eval.py时使用度量em
      • 精确率-召回率曲线(运行eval.py时使用度量precisionrecall,这与之前版本不同,因为precisionrecall的计算已从fmeasure中分离)
    • 支持评估二值图像,如常见的二值分割任务。
      • 二值Fmeasure
      • 二值精确率
      • 二值召回率
      • 二值IoU
      • 二值Dice
      • 二值特异性
      • 二值BER
  • 更丰富的功能。
    • 支持根据配置评估模型。
    • 支持根据配置和评估结果绘制PR曲线F-measure曲线E-measure曲线
    • 支持将结果导出到TXT文件。
    • 支持将结果导出到XLSX文件(2021年1月4日重新支持)。
    • 支持从生成的.npy文件导出LaTeX表格代码,并用不同颜色标记前三名方法。
    • … :>.

使用方法

安装依赖

安装所需库:pip install -r requirements.txt

度量评估基于我的另一个项目:PySODMetrics。欢迎报告错误!

配置数据集和方法预测的路径

本项目依赖json文件存储数据。./examples中提供了数据集和方法配置的示例:config_dataset_json_example.jsonconfig_method_json_example.json。您可以直接修改它们以进行后续步骤。

[!note]

  • 请注意,由于本项目依赖OpenCV读取图像,请确保路径字符串不包含非ASCII字符。
  • 确保数据集配置文件中的数据集名称方法配置文件中的数据集名称匹配。准备好json文件后,建议使用提供的tools/check_path.py检查json文件中的路径信息是否正确。
配置的更多详细信息

示例1:数据集配置

注意,这里"image"不是必需的。实际评估只读取"mask"。

{
    "LFSD": {
        "image": {
            "path": "Path_Of_RGBDSOD_Datasets/LFSD/Image",
            "prefix": "some_gt_prefix",
            "suffix": ".jpg"
        },
        "mask": {
            "path": "Path_Of_RGBDSOD_Datasets/LFSD/Mask",
            "prefix": "some_gt_prefix",
            "suffix": ".png"
        }
    }
}

示例2:方法配置

{
    "Method1": {
        "PASCAL-S": {
            "path": "Method1路径/PASCAL-S",
            "prefix": "某方法前缀",
            "suffix": ".png"
        },
        "ECSSD": {
            "path": "Method1路径/ECSSD", 
            "prefix": "某方法前缀",
            "suffix": ".png"
        },
        "HKU-IS": {
            "path": "Method1路径/HKU-IS",
            "prefix": "某方法前缀", 
            "suffix": ".png"
        },
        "DUT-OMRON": {
            "path": "Method1路径/DUT-OMRON",
            "prefix": "某方法前缀",
            "suffix": ".png"
        },
        "DUTS-TE": {
            "path": "Method1路径/DUTS-TE",
            "suffix": ".png"
        }
    }
}

这里,path表示存储图像数据的目录。prefixsuffix分别指预测图像和实际真实图像名称中公共部分之外的前缀和后缀。

在评估过程中,方法预测和数据集真实值的匹配是基于文件名的共享部分。它们的命名模式预设为[prefix]+[shared-string]+[suffix]。例如,如果有预测图像如method1_00001.jpgmethod1_00002.jpgmethod1_00003.jpg和真实图像gt_00001.pnggt_00002.pnggt_00003.png,则可以按如下方式配置:

示例3:数据集配置

{
    "dataset1": {
        "mask": {
            "path": "path/Mask",
            "prefix": "gt_",
            "suffix": ".png"
        }
    }
}

示例4:方法配置

{
    "method1": {
        "dataset1": {
            "path": "path/dataset1",
            "prefix": "method1_",
            "suffix": ".jpg"
        }
    }
}

运行评估

  • 一旦前面所有步骤正确完成,你就可以开始评估了。关于评估脚本的使用,请参考命令python eval.py --help的输出。
  • 根据你的需求添加配置选项并执行命令。如果没有异常,它将生成指定文件名的结果文件。
    • 如果没有指定所有文件,它将直接输出结果,详见eval.py的帮助信息。
    • 如果指定了--curves-npy,与绘图相关的指标信息将保存在相应的.npy文件中。
  • [可选]你可以使用tools/converter.py直接从生成的npy文件导出LaTeX表格代码。

绘制灰度图像评估的曲线

你可以使用plot.py读取.npy文件,根据需要组织并绘制指定方法和数据集的PRF-measureE-measure曲线。这个脚本的用法可以在python plot.py --help的输出中看到。根据你的要求添加配置项并执行命令。

最基本的指示是根据子图的数量合理地指定配置文件中figure.figsize项的值。

基本执行过程

这里我将以我本地configs文件夹中的RGB SOD配置为例(应根据实际情况进行必要的修改)。

# 检查配置文件
python tools/check_path.py --method-jsons configs/methods/rgb-sod/rgb_sod_methods.json --dataset-jsons configs/datasets/rgb_sod.json

# 确保输出信息中没有不合理的地方后,可以用以下命令开始评估:
# --dataset-json: 设置`configs/datasets/rgb_sod.json`为数据集配置文件
# --method-json: 设置`configs/methods/rgb-sod/rgb_sod_methods.json`为方法配置文件
# --metric-npy: 设置`output/rgb_sod/metrics.npy`存储npy格式的指标信息
# --curves-npy: 设置`output/rgb_sod/curves.npy`存储npy格式的曲线信息
# --record-txt: 设置`output/rgb_sod/results.txt`存储文本格式的结果信息
# --record-xlsx: 设置`output/rgb_sod/results.xlsx`存储Excel格式的结果信息
# --metric-names: 指定`fmeasure em precision recall`作为要计算的指标
# --include-methods: 指定要评估的`configs/methods/rgb-sod/rgb_sod_methods.json`中的方法
# --include-datasets: 指定要评估的`configs/datasets/rgb_sod.json`中的数据集
python eval.py --dataset-json configs/datasets/rgb_sod.json --method-json configs/methods/rgb-sod/rgb_sod_methods.json --metric-npy output/rgb_sod/metrics.npy --curves-npy output/rgb_sod/curves.npy --record-txt output/rgb_sod/results.txt --record-xlsx output/rgb_sod/results.xlsx --metric-names sm wfm mae fmeasure em precision recall --include-methods MINet_R50_2020 GateNet_2020 --include-datasets PASCAL-S ECSSD

# 一旦你获得了曲线数据文件,在这个例子中是'output/rgb_sod/curves.npy'文件,你就可以开始绘图了。
# 对于一个简单的例子,执行以下命令后,结果将保存为 'output/rgb_sod/simple_curve_pr.pdf':
# --style-cfg:指定样式配置文件 `examples/single_row_style.yml`,由于只有少量子图,可以直接使用单行配置。
# --num-rows:图中子图的数量。
# --curves-npys:使用曲线数据文件 `output/rgb_sod/curves.npy` 绘制图表。
# --mode:使用 `pr` 绘制 `pr` 曲线,`em` 绘制 `E-measure` 曲线,`fm` 绘制 `F-measure` 曲线。
# --save-name:只提供图像保存路径,不包括文件扩展名;代码会根据您之前在 `--style-cfg` 中指定的 `savefig.format` 添加文件扩展名。
# --alias-yaml:一个yaml文件,指定在图中使用的方法和数据集别名。
python plot.py --style-cfg examples/single_row_style.yml --num-rows 1 --curves-npys output/rgb_sod/curves.npy --mode pr --save-name output/rgb_sod/simple_curve_pr --alias-yaml configs/rgb_aliases.yaml

# 更复杂的例子,执行以下命令后,结果将保存为 'output/rgb_sod/complex_curve_pr.pdf'。

# --style-cfg:指定样式配置文件 `examples/single_row_style.yml`,由于只有少量子图,可以直接使用单行配置。
# --num-rows:图中子图的数量。
# --curves-npys:使用曲线数据文件 `output/rgb_sod/curves.npy` 绘制图表。
# --our-methods:指定的方法 `MINet_R50_2020` 在图中用粗红色实线高亮显示。
# --num-col-legend:图例的列数。
# --mode:使用 `pr` 绘制 `pr` 曲线,`em` 绘制 `E-measure` 曲线,`fm` 绘制 `F-measure` 曲线。
# --separated-legend:绘制一个共享的单独图例。
# --sharey:共享y轴,只在每行的第一个图中显示刻度值。
# --save-name:只提供图像保存路径,不包括文件扩展名;代码会根据您之前在 `--style-cfg` 中指定的 `savefig.format` 添加文件扩展名。
python plot.py --style-cfg examples/single_row_style.yml --num-rows 1 --curves-npys output/rgb_sod/curves.npy --our-methods MINet_R50_2020 --num-col-legend 1 --mode pr --separated-legend --sharey --save-name output/rgb_sod/complex_curve_pr

相应结果

精确度-召回率曲线

PRCurves

F-measure曲线

fm-curves

E-measure曲线

em-curves

编程参考

相关文献

@inproceedings{Fmeasure,
    title={频率调谐显著区域检测},
    author={Achanta, Radhakrishna and Hemami, Sheila and Estrada, Francisco and S{\"u}sstrunk, Sabine},
    booktitle=CVPR,
    number={CONF},
    pages={1597--1604},
    year={2009}
}

@inproceedings{MAE,
    title={显著性过滤器:基于对比度的显著区域检测过滤},
    author={Perazzi, Federico and Kr{\"a}henb{\"u}hl, Philipp and Pritch, Yael and Hornung, Alexander},
    booktitle=CVPR,
    pages={733--740},
    year={2012}
}

@inproceedings{Smeasure,
    title={结构度量:评估前景图的新方法},
    author={Fan, Deng-Ping and Cheng, Ming-Ming and Liu, Yun and Li, Tao and Borji, Ali},
    booktitle=ICCV,
    pages={4548--4557},
    year={2017}
}

@inproceedings{Emeasure,
    title="增强对齐度量:二值前景图评估",
    author="Deng-Ping {Fan} and Cheng {Gong} and Yang {Cao} and Bo {Ren} and Ming-Ming {Cheng} and Ali {Borji}",
    booktitle=IJCAI,
    pages="698--704",
    year={2018}
}

@inproceedings{wFmeasure,
  title={如何评估前景图?},
  author={Margolin, Ran and Zelnik-Manor, Lihi and Tal, Ayellet},
  booktitle=CVPR,
  pages={248--255},
  year={2014}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号