基于 SegFormer 语义分割模型的手写文字擦除系统设计

项目介绍

基于 SegFormer 语义分割模型,识别手写笔迹生成掩码并去除,实现 AI 笔迹橡皮擦,擦除试卷中的手写笔迹。项目训练数据主要是试卷中的手写文字,因此在试卷上效果较好,在其他场景下的手写文字去除效果较差。

训练数据介绍

手写文字擦除训练数据分为源数据和目标数据,源图像数据是各种试卷图像(含有手写文字),目标数据是其对应的去除手写文字后的图像,如图所示。

数据集处理

生成手写文字掩码图

通过对比去除文字后和去除文字前的图像,对于大于设定阈值的地方,认为是需要除去的部分,置为 1 值,其余置为 0 值,以此生成 Mask,如下图所示:

图像输入预处理

输入的图像往往是矩形图像,为了保持横纵比,对于非正方形图像,填充图像边缘形成正方向图像作为输入,同时输入图像的大小一,且有些图像像素尺寸较大,因此统一下采样图片至 384 * 384。

数据增强处理

在训练时,对数据进行一定的增强,加入了随机水平反转和随机裁剪等操作,增强模型的泛化能力。

训练模型

模型主要是对SegFormer模型进行改进,将模型最后的输出层改成转置卷积上采样,通过局部区域特征上采样,不断补充精细结构来生成掩码结果,相较于无参数的上采样(如双线性插值),能够更好利用局部信息进行更高阶上采样。

一般的语义分割任务中的对象往往大尺寸的结构占主体,因此交叉熵损失就足够解决问题;但是手写痕迹的细化结构,会导致交叉熵损失效果不能起到最好效果,因此我们在交叉熵损失基础上还加入了 dice loss 针对细化结构进行有效惩罚。

Dice=\frac{2|X \bigcup Y| }{|X|+|Y|}

L_{dice}=1-Dice

最终的损失函数为:

L=L_{ce}+\lambda \times L_{dice}

式中,L_{ce}为交叉熵损失,\lambda为平衡超参数,这里设置为0.5。

简单QT界面设计

代码调试

代码主要是涉及环境配置问题,第一个报错是SegFormer库的问题,版本一直报错,后来改了库代码;第二个报错是:ImportError: Qt bindings are not installed,虽然安装了但一直有问题,这个问题主要是在简单qt界面处出现的,后来查询后应该是pillow这个库版本不兼容导致的,将其降低为9.3.0解决。这个错误修改参考这篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值