基于GAN-CNN-CNN的鲁棒笔迹识别方法(三)

news2024/11/26 8:19:37

上一篇文章提出了一个用于笔迹识别(鉴别)的三段式模型,同时也提出了一个新数据集HTID_1,本文主要针对模型的最后一部分--笔迹识别,在HTID_1上进行实验.

数据集

实验前先介绍一下HTID_1.

        HTID_1是用于笔迹识别的数据集,是基于本文提出的模型制作而成的.将互联网上收集的740人笔迹原始图片输入模型而制作成的笔迹纹理图.每张纹理图由5*5字组成,每字32*32像素,单张纹理图大小为160*160像素.

笔迹纹理图

        数据集分为两部分:训练集和测试集.两部分是互斥的,即训练集中的单字笔迹不会出现在测试集中.其中训练集分为740类,每类100张纹理图,总74,000张;测试集中每人随机生成100~200张纹理图,总111,601张.数据集大小为725MB.

实验

一.验证笔迹识别可行性

        前文提到了HTID_0,准确率达到了99%,一定程度上证明了图像分类应用于笔迹识别的有效性,但该数据集可能存在数据泄露,所以制作了HTID_1.

        本次实验使用通用的图像分类网络,更倾向于轻量化网络,使用了ResNet、MobileNet、SqueezeNet、ShuffleNet.使用了飞桨PaddlePaddle的模型代码及预训练权重.

        实验结果:

        ResNet152因为loss下降的太快了,所有学习率到后面减小一些.

        可以看到测试集的top1&5的准确率都挺高的,大部分达到了90%以上,验证了图像分类用于笔迹识别是可行的.

        ResNet的参数量比其他模型多了一个数量级,其中ResNet18的准确率最高,但是ResNet152的表现不及18,可能是学习率的问题.

        squeezenet是本次实验中参数量最少得,但是准确率也是最低的.

        MobileNetV3Large准确率与ResNet152相近,考虑到训练成本,后续的实验将使用MobileNetV3Large

 二.数据增强

本次实验主要有两种数据增强:

BW

随机添加黑白噪声.

这种方法需要消耗大量的CPU,需要核心比较多,否则训练很慢.

  

RE

将单张纹理图内的25个字重新随机排序.

        本次实验将以上面实验中的MobileNetV3Large作为基础,在该基础上继续训练,对训练集使用数据增强.增强方式如下:

        ID 5: 训练集中每张图片有0.8的概率增加随机黑白噪声,增加的黑白噪声数量为当前图像总像素的10%~30%(随机比例,黑白也是随机的).

        ID 6: 训练集的每张图片都应用RE.

        ID 7: 先应用和ID5相同的BW,再应用RE.

实验结果如下:

        3种方式的准确率都有提高,说明数据增强是有效的.但是BW的提升不明显,top_1只增加了0.24%,而RE的top1增加了1.24%.BW和RE一起使用时准确率也有提高,但更像是BW给RE添加了一些削弱效果.

三.单字位置影响

        数据集中的纹理图每个单字的位置都是随机的,按照CNN的平移不变性,即使单字位置换了,输出的结果也相同.本次实验将使用ID 6的模型,对测试集的每张图片进行RE,然后进行推理(只推理不训练).

        实验结果:

 6_0是为了验证加载权重是否正确.

可以看到测试集的top1基本保持在92.8%附近,top5在98.7%附近.误差小于0.1%,可认为单字位置对预测结果不产生主要影响,影响可以忽略.

四.单字个数

        在真实场景中,获取的笔迹检材的字数是不确定的.为了探索这种不确定性对结果的影响,设计了本次实验:更换测试集,纹理图仍保留5*5字,从测试集字库中随机抽取单字,构成单字为1~25的25个测试集,当纹理图内非重复单字不足25字时,使用当前纹理图内的单字进行随机填充.每个人生成25张图片.每个新测试集有18500张纹理图.使用ID 6和ID 0对这25个测试集进行推理.

新纹理图

        实验结果:

        从结果上看ResNet18还是要比MobileNetV3Large强的.两个模型呈现的趋势都是随着无重复单字个数减少准确率减低,接近于log函数.字数越少准确率下降越快.

        MobileNetV3Large在14个无重复单字时top1准确率还有80%,top5在11个单字时还有90%.

        ResNet18在13个单字时top1为81%,top5在10个单字时还有91%.

        所有要保障可用性,单张纹理图内至少需要有10~15个无重复单字.

五.噪声污染

        噪声有多种来源,比如墨水溅落、年代久远导致的纸张损坏字迹不清、虫子的尸体粪便等非模型因素,还有就是模型的因素,如对非笔迹像素擦除不完整,擦除时对笔迹造成了损坏,切割单字时对笔迹造成了损坏.这些都影响推理的结果.本次实验考虑一种理想的噪声污染,不考虑单字位置的影响,每张纹理图使用25个无重复单字,对纹理图进行随机黑白噪声填充,填充比例为单图总像素的5%~50%(步长5%),每个比例创建一个新测试集,每个测试集8500张纹理图.

不同噪声比例的纹理图

        50%的噪声人眼已经无法识别笔迹(眯眼睛或者缩小图片可以看清楚一些),所以再大的噪声比例不进行测试.

        使用ID 5 MobileNetV3Large+BW和ID 6 MobileNetV3Large+RE进行推理.

        实验结果:

        可以清楚地看到两个模型呈现两级分化的情况,未经过BW数据训练的ID 6根本无法承受噪声攻击(即使是5%的噪声).这也就引出了鲁棒性问题了,如果单纯使用训练集训练是无法抵抗噪声污染的,当检材多了一些水渍、墨水时模型将会作废.而在训练时主动加入噪声污染,在损失极小的正常图片准确率时,能大幅提高被污染后的推理准确率.在噪声到达30%时,ID 5依旧有81%的top1准确率,top5为95%.

        所以要增加模型的鲁棒性,在不修改模型结构的情况下,要对训练集进行BW数据增强.

六.极限

        前面的实验都是在训练参数相同的情况下进行的,本次实验主要目的是探索现有模型在HTID_1上能达到的最好准确率是多少.

        这里只使用了一个专门应用于笔迹识别的网络GR-RNN[1],全称为"用于书写者识别的全局上下文残差递归神经网络",他的网络引入了GRU.

        同时也使用一些通用的图像分类网络,ConvNeXt[2],Inception-ResNet[3],PNASNet5[4],UniRepLKNet[5].

        实验结果:

        GR-RNN(vertical) top1 起步是93.8872%,后面在图像增强继续训练下达到了96.1452%.相比之下horzontal结果比vertical差一些,差了0.6496%,当前情况下vertical更适合.

        GR-RNN(vertical)_384x384是图像放大到384*384像素,结果变差了,猜测是因为以RGB形式加载图片,放大算法添加了一些过渡像素让新笔迹图片变模糊了,原本棱角分明的笔画被圆滑了.

可能用位图效果会好一些.

Res-RNN(vertical)是基于GR-RNN魔改的网络,加了残差块,效果不如GR-RNN(vertical).

剩下几个模型表现都一般,UniRepLKNet-S表现好一些,可能这些模型需要大型数据集进行训练.

测试就进行到这里了,在HTID_1上最好结果是top1 96.1452%,top5 99.4391%

参考文献

[1]S. He and L. Schomaker, “GR-RNN: Global-Context Residual Recurrent Neural Networks for Writer Identification,” arXiv.org, 2021. Available: https://arxiv.org/abs/2104.05036.

[2]Z. Liu, H. Mao, C.-Y. Wu, C. Feichtenhofer, T. Darrell, and S. Xie, “A ConvNet for the 2020s,” arXiv.org, 2020. Available: https://arxiv.org/abs/2201.03545.

[3]C. Szegedy, S. Ioffe, V. Vanhoucke, and A. Alemi, “Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning,” arXiv.org, 2016. Available: https://arxiv.org/abs/1602.07261v2.

[4]C. Liu et al., “Progressive Neural Architecture Search,” arXiv.org, 2017. Available: https://arxiv.org/abs/1712.00559v3.

[5]X. Ding et al., “UniRepLKNet: A Universal Perception Large-Kernel ConvNet for Audio, Video, Point Cloud, Time-Series and Image Recognition,” arXiv.org, 2023. Available: https://arxiv.org/abs/2311.15599. [Accessed: Jan. 29, 2024]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity Shader 滚动进度条效果

Unity Shader 滚动进度条效果 前言项目场景布置导入图片修改场景设置修改图片尺寸即可调整进度 ASE连线 前言 UI要实现一个滚动进度,于是使用Shader制作一个。 项目 场景布置 导入图片 修改一下导入图片的格式,这样才能循环起来 WrapMode改为Repea…

2024/2/1学习记录

echarts 为柱条添加背景色: 若想设置折线图的点的样式,设置 series.itemStyle 指定填充颜色就好了,设置线的样式设置 lineStyle 就好了。 在折线图中倘若要设置空数据,用 - 表示即可,这对于其他系列的数据也是 适用的…

Windows11 用 HyperV 安装 Ubuntu-16.04 虚拟机

Windows11 用 HyperV 安装 Ubuntu-16.04 虚拟机 1. 确保已经开启HyperV2. 准备Ubuntu16.04镜像(推荐64位的)3. HyperV ->快速创建 -> 更改安装源 选刚刚下载的镜像(.iso)文件就好 -> 创建虚拟机[^1] 前提:VMw…

(硬核中的硬核)链路追踪落地过程中的挑战与解决方案

🎬作者简介:大家好,我是蓝胖子🥇 ☁️博客首页:CSDN主页蓝胖子的编程梦 🌄每日一句:编程中我们会遇到多少挫折?表放弃,沙漠尽头必是绿洲。 大家好,我是蓝胖子…

【Qt加密播放器】登录窗口功能补充

输入框小设计 目的:实现鼠标点击输入框时的聚焦效果。 首先在LoginForm构造函数中为账号和密码输入框添加事件过滤器。关于事件过滤器的具体介绍可以参考这篇博文:Qt消息机制和事件 ui->nameEdit->installEventFilter(this); ui->pwdEdit->…

uniapp+微信小程序+nodejs问题记录

一、前言 通过uniapp进行微信小程序调试。服务端使用NodeJs。 二、报错统计 1、本地调试时微信小程序报错:request:Cannot send network request to localhost 解决方法: 【微信小程序开发平台】-【本地设置】-勾选“不校验合法域名、web-view、TLS版本…

Python完善APC netbotz 250报告功能实现主动式运维。

首先介绍一下APC netbotz 250, 这是施耐德推出的一款机架式监控主机,能够对所有IT环境进行经济有效而且灵活的监控,号称APC史上性价比最高的环境监测方案,这可不是我吹的,是APC官网的介绍,可参考下面的官网截图。 我们…

Visual Studio 2022编译错误 Error MSB8041-此项目需要MFC库解决方案

Visual Studio 2022编译错误 Error MSB8041-此项目需要MFC库 错误原因: Visual Studio 2022安装的MFC库不够。 解决方案: 安装Visual Studio 2022 需要的MFC 库就可以了。 安装方法: 第一步,打开vs2022 工具 ->获取工具和功…

数据可视化Tableau

目录 一.第一次实验课内容 1、熟悉Tableau Desktop的工作环境。 2、熟悉数据导入、维度和度量的区分以及不同数据字段类型的标识符。 3、熟悉工作表的基本操作,主要包括行列功能区,标记卡,筛选器,智能推荐的使用。 4、作业--…

两个链表的第一个重合节点

法一:蛮力法 即顺序遍历第一个链表的每个节点,每遍历到一个节点,就在第二个链表中顺序遍历每个节点,比较是否有节点相同。该方法的时间复杂度是O(mn),空间复杂度是O(1)。…

Java进击框架:Spring-综合(十)

Java进击框架:Spring-综合(十) 前言Rest ClientsWebClientRestTemplateHTTP接口 JMS (Java消息服务)使用Spring JMS发送消息接收消息注释驱动的侦听器端点 JMXEmail任务执行和调度Spring TaskExecutor 抽象Spring TaskScheduler 抽象支持调度…

cuda基础教程(一)

文章目录 0. CURA Runtime API1. CUDA人工智能编程1.1. CUDA介绍1.2. 课程内容 2. 异构计算和并行计算2.1. 什么是并行计算2.2. 什么是异构计算 3. CUDA介绍3.1. GPU的性能指标3.2. 什么是CUDA3.3. 如何学习CUDA 4. 系统GPU查询5. Linux系统6. CUDA安装7. 查询GPU信息8. CUDA编…

[C#][opencvsharp]winform实现自定义卷积核锐化和USM锐化

【锐化介绍】 图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法…

Python机器学习:一文讲透机器学习中的验证集法

验证集法又被称为“留出法”,基本思路是将样本数据集划分为两个互斥的集合:训练集和测试集。其中训练集占比一般为2/3~4/5,常用70%;测试集占比一般为1/5~1/3,常用30%。训练集用来构建机器学习模型;测试集也…

vit细粒度图像分类(八)SIM-Trans学习笔记

1.摘要 细粒度视觉分类(FGVC)旨在从相似的从属类别中识别物体,这对人类准确的自动识别需求具有挑战性和实用性。大多数FGVC方法侧重于判别区域挖掘的注意机制研究,而忽略了它们之间的相互依赖关系和组成的整体对象结构,而这些对模型的判别信…

11. UE5 RPG使用GameplayEffect修改角色属性(二)

上一篇写了一下GameplayEffect的基础操作,这一篇进阶一下,讲解一下GameplayEffect堆叠功能,以及能够基于这个堆叠能够实现一些怎样的效果。 经过几天的查看,发现新版的更新的真不错,而且最上面竟然直接显示编译的错误…

Django部署到服务器后无法获取到静态元素 The requested resource was not found on this server

问题描述 写了一个Django项目,部署到云主机后,访问发现图片无法访问,报错The requested resource was not found on this server 图片是一个词云图,根据爬虫爬取的信息生成的,根据爬取的信息会改变,所以没…

大数据信用报告应该去哪里查询比较好呢?

对于个人而言,大数据信用报告也变得越来越重要。那么,大数据信用报告应该去哪里查询呢?本文将为您详细介绍征信和大数据的区别,并推荐一个可靠的大数据平台。 首先,我们需要了解征信和大数据的区别 征信报告 依法采集、整理、保存…

Redis主从集群

一.资源分布 操作系统:Centos 7 Redis版本:6.2.14 IP端口角色192.168.157.1306379master192.168.157.1316379slave1192.168.157.1326379slave2 二.流程 1.创建三台虚拟机IP及端口如上且安装好Reids 2.修改三个redis.conf配置文件 其它说明&#xff1a…

Modbus协议学习第六篇之基于libmodbus库的示例程序(可以联合Modbus模拟仿真软件进行调试)

前置工作 学了这么多Modbus的知识,如果不进行实际的操作,总感觉懂的不透彻。基于此, 本篇博文就带各位读者来了解下如何通过编写程序来模拟与Modbus Slave仿真软件的通讯。当然了,这里有两个前提,如下: 1.请…