vuforia的物体识别能识别大物体吗_BG59:深度学习帮你识别验证码

最开始的验证码还是简单的数字,后来换成了汉字,近些年又出现低分辨率图像内容识别的验证码。对于没见过那么多类型物品或者不习惯低分辨率的朋友而言,通过验证码认证实在是一种痛苦的考验。那么机器学习能够帮助人完成这种任务吗?特别是在自动化网站信息处理的任务中,一个识别验证码的agent是重要的敲门砖,比如自动购票系统。本文只在于探讨“低分辨率验证码内容识别”这个问题,无意于指导可能存在争议的商业行为,至于使用该技术从事这些商业活动所带来的争议更与本文无关。

1. 问题描述

以12306火车票预定网站为例,在登录时,需要从若干个低分辨率的图像中找出包含指定物体的所有图片。通常,每一张图片中只包含一种物体,如果能够先识别出图片中所包含物体的名字,然后通过简单的字符串筛选就能找出符合要求的所有图片。

3a28d6522f126c17eb52b318b77d6b46.png

因此,这个实际问题就分成了两部分,第一识别图片内容,第二字符串匹配。问题的重点也就在图片内容的识别上。根据实际情况,我们可以认为每张图片包含一个物体,那么该物体的名字就是这个图像数据的标签。每一张图像都对应一个标签,这就可以抽象为机器学习中的分类问题,即给定一张图像,输出图像的标签,数学上的表示为

=Φ(,),

其中 就是输入图像, 就是标签,Φ 表示一个机器学习模型,而 就是这个机器学习模型的参数。

也就是说,只要建立了这样的一个分类的模型,就可以解决上述问题。而建立分类模型的过程也分为两步,第一步确定模型具体结构,第二步确定模型的参数。现在处理这种分类问题,一般还是使用深度学习模型。网上关于这个问题已经有了不少讨论,我们选择其中一种深度网络结构,smaller vggnet,具体如图所示。

b444dd91b49705f35799ca98e80472c8.png

确定网络结构之后,剩下的问题就是求解模型参数 ,专业术语称为“训练模型”。

2. 训练模型

训练模型的首要任务是建立损失函数,即描述预测值与目标真值差距的函数。训练的目标就是使得差距越来越小,预测值与真值接近,从概率学上来讲,就是函数预测的概率分布与真实分布相近。由于目前的深度学习框架使用误差反传的方式计算导数,然后根据导数进行参数更新优化,因此要求损失函数可导。对于分类这种常见问题,已有成熟的损失函数,交叉熵 (,),数学表达式如下 (,)=−∑log(),

其中 表示类别, 表示输出为类别的真实概率, 表示输出为类别 的估计概率,整个函数就描述了预测概率分布 与真实概率分布 之间的接近程度。假设 有 种可能的取值,即有 个类别标签,那么每个类别标签的概率分布都可以表示为一种one-hot形式的向量,即只在该类别索引处的值为 1,其他索引位置的值为 0。 接下来就可以通过最小化交叉熵来训练模型的参数。
这里使用keras框架来进行模型参数的训练,对于使用NVIDIA显卡的朋友,可以使用GPU版本的tensorflow作为计算后端;对于使用AMD显卡的朋友,可以使用plaidml作为计算后端;没有安装显卡的朋友,使用CPU训练也可以。训练完成之后就可以得到训练过程中损失函数的变化图。

e3d7130f2b471809a41fb3f23ee8d8c2.png

3. 效果测试

数据集中提供了一个100张图像组成的测试集,我们使用该测试集评估一下深度学习模型识别验证码的正确率。评估结果显示正确率为95%。事实上,还可以使用数据增强的手段进一步提供精度,不过这里就不进行测试了,留待需要使用这个模型的朋友自行添加。以上都没有提及运行速度的测试,因为对于这种低分辨率图像的分类网络运行速度一般极快,能够满足日常的使用需求,所以不单独列出数据。最后展示一些测试集上预测正确和预测错误的结果,大家可以看看在这个问题上,AI的正确率是否超过了人类。

bb1bcd8fc6d0267a5acaa1e0c2ed91c7.png

实验代码的github链接:https://github.com/cnbluegeek/12306verifycode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值