跳转到内容
灵墨笔记

试卷去手写做不了?我训了五代模型、测了四个开源方案,最后选了商用 API

编辑本页

做图像工具的人,几乎都会撞上「试卷去手写」这堵墙:把做过的卷子拍张照,去掉手写笔迹,还原成一张干净的空白卷,重新打印。

听起来就是个分割加修复的任务,真上手才知道是数据地狱。这篇文章记录我完整的选型之路:五代自训模型、四个开源方案挨个实测、最后一个反直觉的选择。先剧透结论:这个方向卡在数据上,不在代码上。

一、需求比看起来难

先说清楚这个需求到底难在哪。

一,去除要做到像素级。区域级涂抹在试卷场景根本没法用。试卷是高密度印刷体,手写笔迹和印刷内容犬牙交错,涂掉一块区域,印刷的题目跟着遭殃。

二,铅笔浅痕是重灾区。淡色笔迹对比度低,检测容易漏,漏一处,还原出来的卷子就脏一处。

三,印刷体必须毫发无伤。误擦一个印刷字,这张卷子就废了。也就是说,光「擦得掉」不够,还得「擦得准」,两个指标互相牵制。

二、自训五代模型

我起初认为最理想的路是自己训个模型。你别说,我还真去试了很多次。

训练流水线是 AI 搭的,数据增强、评估脚本、训练看护一应俱全,工程上没走弯路。模型迭代了五代,检测方法换了好几版,连淡色笔迹这种边角场景都做了专项训练。

五代下来,效果始终达不到能上线的水平。

问题很快清楚了:此类模型训练,代码占三成,七成是数据。要做到像素级的去除,需要海量一对一配对训练数据:同一张卷子,一份带手写、一份干净,严格像素对齐,最好还是真实拍摄的。这种数据全网扒一圈就明白了:开源的少得可怜,质量像样的基本被商业公司攥在手里闭源。公开能翻到的,要么只有千对上下的量级,要么是合成数据,真实场景效果要打折。

这是整个方向共同的门槛,谁做都绕不开。

三、四个开源方案实测

自训碰壁,我把 GitHub 上叫得上号的开源方案挨个跑了一遍。

inkstrip(handwritingRemover):管线最完整,YOLO 检测加 LaMa 修复,本机跑得通。短板在默认检测模型,训练集只有 91 张亚美尼亚语听写纸,对中文试卷召回很低,中文印刷体容易被误判成手写。M1 上一张图 23 秒。结论:工作流值得借鉴,检测器得自己重训。

HandWritingEraser-PyTorch:发布的权重是个早期版本,README 里说的三分类模型没有放出来,实际是二类版本。实测印刷体平均 32% 被标成手写,擦的时候印刷字跟着受损。它也说明了修复环节的上限:LaMa 这类区域级修复做不到像素级重建,铅笔浅痕会留痕。

DocUnfold:做文档矫正展开的,代码质量很好,M 芯片原生加速实测 8.7 倍。限制在于官方没放预训练权重,复现要从自训起步,推理脚本还有 bug,16G 内存下一整张试卷切片推理要 80 秒上下。研究价值高,工程上还要再等。

ENSExam-GAN 这类 GAN 路线:源码和训练流程都过了一遍,情况类似,暂时没有能直接落地的现成方案。

汇总一张表:

方案技术路线实测结果结论
inkstripYOLO 检测 + LaMa 修复中文召回低,M1 上 23 秒/张管线可借鉴,检测器需重训
HandWritingEraser-PyTorch二分类检测 + 修复印刷体 32% 误标为手写权重与 README 不符,未完全开源
DocUnfold文档矫正展开M 芯片 8.7 倍加速,无预训练权重,整卷推理约 80 秒研究价值高,工程暂不可用
ENSExam-GANGAN 生成无现成可落地权重路线待成熟

一圈测下来结论很清楚:不是没人做,是没人能把数据这关过了。

四、落地:商用 API

最后的解法朴素得很:找到一个划算的商用接口接进去。效果立刻达标,成本比自训还低一个量级。

这个结果最初让我有点不甘心,后来想通了。什么时候值得自训?两种情况:你有独家配对数据,或者你的场景市面上没人做过。两样都不占,买现成的就是最理性的选择。把自训省下来的时间,花在能攒下自己东西的环节上,回报率高得多。

顺带一个对照。同一个项目里,图片去水印我就自研做成了:OCR 加分割找水印区域,LaMa 只修复遮罩盖住的部分,效果达标。去水印和去手写看似同类需求,命运完全不同,差别就在数据长什么样。去水印不需要严格配对的成对数据,标遮罩就能训;去手写要像素级配对,数据这关绕不过去。评估一个算法需求能不能自研,先看数据搞不搞得来,再看代码难度。

五、留给同路人的三句话

一,评估算法需求,先掂量掂量数据。数据不占,技术再好也白搭。

二,开源方案要实测,别只看 README。这次四个方案里,两个的 README 和实际放出的权重对不上。

三,选商用 API 不是认输,是工程判断。省下来的时间,花在你能形成壁垒的地方。

你在自己的方向上撞过数据墙吗?评论区聊聊。


编辑本页
扫描二维码分享
打开应用扫一扫,即可分享