步骤 03 / 04
评估与鲁棒性
用真值掩码量化分割质量,导入 U-Net 预测 Mask 与传统流水线同图对比,并用 8 项扰动检验复杂采集条件下的稳定性。
IoU / Dice / PABoundary F1细线召回微孔完整率8 项扰动
模型评估:真值对比 + 传统 vs 深度学习(IoU / 分类准确率 / 细线 / 微孔)
IoU(交并比)
—
Dice 系数
—
像素准确率 PA
—
Boundary F1(容差2px)
—
细线像素召回
—
微小镂空完整率
—
符号分类准确率(人工复核)
—
未复核
召回率 Recall
—
精确率 Precision
—
像素 F1
—
自评(无需真值):载入图像后显示。
传统流水线 Mask本页实测
U-Net 预测 Mask(导入 / 后端)未导入
误差分布绿=命中 · 蓝=误检 · 红=漏检
混淆矩阵(像素级;行 = 真值,列 = 预测)
| 预测前景 | 预测背景 | |
|---|---|---|
| 真值前景 | — | — |
| 真值背景 | — | — |
上传真值掩码后显示。
| 方法 | IoU | Boundary F1 | 细线召回 | 微孔完整率 | 来源 |
|---|---|---|---|---|---|
| 传统图像处理(纯 OpenCV 式流水线) | 待上传真值 | 待上传真值 | — | — | 浏览器端实测 |
| 深度学习(U-Net / SAM / DeepLab) | 待导入/后端 | 待导入/后端 | — | — | 导入预测 Mask 或后端接口实测 |
真值掩码可由 Labelme 导出或人工标注(白=前景)。上传 GT 后即计算 IoU / Dice / PA / Boundary F1,并额外给出细线像素召回(3×3 邻域前景≤5 的细线条)与微小镂空完整率(GT 中被前景包围、面积≤300px 的小孔是否保持镂空),直接回答"细长线条、微小镂空是否分割完整"。深度学习一行可导入 U-Net 离线推理的 Mask(白=前景),或在上方后端接入位调用接口后自动填充,用于与传统方法同图对比。分类准确率以人工复核为真值:在符号表逐条点"✓正确"或校正类别后自动统计。
鲁棒性一键测试(光照 / 底色 / 噪声 / 破损)
| 扰动 | 前景占比 | 与基准 IoU | 稳定性 |
|---|---|---|---|
| 尚未运行。 | |||
模拟褪色红纸、弱光、扫描噪声、失焦模糊、黑纸深底、轻微破损等真实采集条件(覆盖不同纸色与背景),验证流水线在复杂环境下的识别稳定性(IoU ≥ 0.85 视为稳定)。还需泛化验证时,可回到「图像上传与分割」点选 12 张不同生肖照片换图复测,或在首页拖入自己的照片。
DeepLab 后端接入位(模型 / API 形态)
| 模型 | 本项目中的角色 | 接入方式 |
|---|---|---|
| U-Net | 像素级分割主力,保留剪纸精细边缘(锯齿/波浪纹) | model=unet |
| SAM | 点/框提示(Prompt)交互式精准提取交错单体 | model=sam |
| DeepLab v1/v2 | VGG+CRF / 空洞卷积+ASPP(对比基线) | model=deeplabv1|v2 |
| DeepLab v3/v3+ | 改进 ASPP / 编码器-解码器,细边界最强(默认) | model=deeplabv3|v3plus |
未启用后端时,本页使用浏览器端传统流水线,输出即为 DeepLab 训练所需的弱标签。
启动方式:
pip install -r requirements.txt → python deeplab_segment_api.py --check(一键自检)→ python deeplab_segment_api.py(启动服务),服务地址默认 http://localhost:8000。// 后端接口契约(FastAPI 示例)
POST /segment multipart/form-data
file : 剪纸图片
model : unet | sam | deeplabv1 | deeplabv2 | deeplabv3 | v3plus
prompt_x : 可选,点提示 x(SAM 点提示)
prompt_y : 可选,点提示 y
box : 可选,"x,y,w,h" 框提示
200 → { "mask_png_base64": "...", "backend": "onnx-sam",
"foreground_ratio": 0.37, "boundary_ratio": 0.056 }