MaskTextSpotterV3 场景文字检测出分指南:test.sh 一键测试 + ICDAR2015/Total-Text 评测全流程
【免费下载链接】MaskTextSpotterV3The code of "Mask TextSpotter v3: Segmentation Proposal Network for Robust Scene Text Spotting"项目地址: https://gitcode.com/gh_mirrors/ma/MaskTextSpotterV3
MaskTextSpotterV3 是 ECCV 2020 论文「Mask TextSpotter v3: Segmentation Proposal Network for Robust Scene Text Spotting」的官方 PyTorch 实现,一个端到端可训练的场景文字检测与识别(Scene Text Spotting)模型。它用分割提议网络(SPN)替代传统 RPN,对旋转、长宽比和弯曲文字更加鲁棒。本文将带你完成test.sh 一键推理 + ICDAR2015 / Total-Text 评测出分的完整流程,从测试到出分只需三步。
🎯 评测流程全景:测试到出分只需一步
整个评测链路非常清晰,理解这条主线后就不会迷路:
下载模型权重 → 运行 sh test.sh 批量推理 → 用 evaluation/ 脚本打分 ↓ ↓ ↓ trained_model.pth output/mixtrain/inference/ Hmean / AP 分数- 测试:
sh test.sh一行命令完成整个测试集推理,结果写入output/mixtrain/inference/<数据集名>/目录 - 出分:
evaluation/下按数据集分好了三个官方评测目录,各配一份 script.py 打分脚本
📦 第一步:环境与模型准备
| 准备项 | 说明 | 位置 |
|---|---|---|
| Python 环境 | Python 3.7 + PyTorch ≥ 1.4(推荐 1.4) | 按 README.md 安装 |
| 模型权重 | trained_model.pth,放入output/mixtrain/下 | 官方在 README「Models」一节提供下载 |
| 测试图片 | 如 ICDAR2015 放在datasets/icdar2015/test_images | MaskTextSpotterV3/datasets/ |
| 评测词表(lexicons) | 解压后放到evaluation/lexicons/ | README「Evaluation」一节 |
测试脚本入口是 tools/test_net.py,它加载配置文件、恢复模型权重,然后调用 maskrcnn_benchmark/engine/text_inference.py 的inference函数完成逐张推理。
🚀 第二步:test.sh 一键推理
仓库根目录的 test.sh 内容只有一行:
python tools/test_net.py --config-file configs/mixtrain/seg_rec_poly_fuse_feature.yaml真正决定行为的是配置文件 configs/mixtrain/seg_rec_poly_fuse_feature.yaml。运行前请重点核对这 4 个参数:
| 配置项 | 作用 | 建议值 |
|---|---|---|
TEST.DATASETS | 要测哪个数据集 | ICDAR2015 用("icdar_2015_test",),弯曲文字用("total_text_test",) |
INPUT.MIN_SIZE_TEST | 测试输入短边分辨率 | 默认1000,冲更高分数可试1440 |
MODEL.WEIGHT | 权重路径 | ./output/mixtrain/trained_model.pth |
OUTPUT_DIR | 推理结果输出目录 | ./output/mixtrain |
⚠️常见坑:默认配置里DATASETS.TEST是total_text_test,如果你只想测 ICDAR2015,记得先把它改成("icdar_2015_test",),否则模型会对错误的测试集做推理。
运行sh test.sh后,每张图的推理结果(检测框、多边形、mask 识别结果、序列识别结果)会被写到output/mixtrain/inference/<数据集名>/,这个目录就是下一步打分的输入。
📊 第三步(A):ICDAR2015 出分
ICDAR2015 是场景文字检测最常用的基准,评测代码在 evaluation/icdar2015/e2e/ 目录:
- 改参数:打开 evaluation/icdar2015/e2e/script.py,修改末尾
__main__中的四个变量:results_dir:指向你的推理输出目录,例如output/mixtrain/inference/icdar_2015_test/model_xxx_results/lexicon_type:3为强词表(推荐),2弱词表,1通用词表score_det = 0.01:检测框筛选阈值score_rec = 0.4、score_rec_seq = 0.7:mask 识别与序列识别的置信度阈值
- 运行打分:
cd evaluation/icdar2015/e2e/ python script.py脚本会先由 prepare_results.py 把模型输出整理成标准提交格式,再由 rrc_evaluation_funcs.py 与../gt.zip真值对比,最终打印全局Precision / Recall / Hmean / AP。
📊 第三步(B):Total-Text 弯曲文字出分
Total-Text 专门考察任意弯曲形状的文字检测,能很好体现 MaskTextSpotter v3 分割提议网络的优势。流程完全一致,只是换了目录和阈值:
cd evaluation/totaltext/e2e/ # 编辑 script.py 中的 results_dir 指向你的输出目录 python script.pyevaluation/totaltext/e2e/script.py 的推荐参数:score_det = 0.05、score_rec = 0.5、score_rec_seq = 0.9。多边形 IoU 匹配逻辑与 ICDAR2015 略有不同(支持任意点多边形),均由 rrc_evaluation_funcs_total_text.py 处理。
💡 项目还附带旋转鲁棒性评测 evaluation/rotated_icdar2013/,可用 tools/convert_dataset.py 把 ICDAR2013 按 15°~90° 各角度旋转生成测试集,再走同样的测试 + 打分流程。
🛠 出分常见排查清单
- 报
Use APEX for mixed precision:说明没装 NVIDIA apex,按 README 安装后重试 - Hmean 偏低:优先把
INPUT.MIN_SIZE_TEST从 1000 提到 1440(官方模型即在此分辨率下验证) - 分数忽高忽低:检查
score_det / score_rec / score_rec_seq是否与对应数据集匹配,两个数据集的阈值不同 - 缺文件报错:确认
evaluation/lexicons/词表已解压、gt.zip在evaluation/<数据集>/下 - 输出目录找不到:核对
OUTPUT_DIR与script.py里results_dir是否指向同一处
总结
MaskTextSpotterV3 的评测流程可以浓缩为一句话:改好 YAML 里的TEST.DATASETS和MODEL.WEIGHT→ 跑sh test.sh→ 在evaluation/对应目录改results_dir跑script.py出分。掌握这条链路后,无论是 ICDAR2015、Total-Text 还是旋转 ICDAR2013,出分都只是换个目录、换组阈值的事。
【免费下载链接】MaskTextSpotterV3The code of "Mask TextSpotter v3: Segmentation Proposal Network for Robust Scene Text Spotting"项目地址: https://gitcode.com/gh_mirrors/ma/MaskTextSpotterV3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考