打字的小强 发表于 2020-6-28 14:08

一个简单的零基础的机器学习教程之二,字母数字验证码识别

本帖最后由 打字的小强 于 2020-6-28 17:40 编辑

一.前言
基于前面我发的贴子 一个简单的零基础的机器学习教程,Pytorch搭建Faster R-CNN目标检测平台 ,一个非常震撼的目标检测的例子。上个帖子从环境安装到调试代码再到图片检测视频检测一个详细的教程,今天我来讲一下正真的实战经历吧。完全不需要深度相关的知识。
这个项目就是《Python3 反爬虫原理与绕过实战》里面的项目,GitHub地址: https://github.com/asyncins/captcha_cnn   基础环境与我上一个深度学习教程的基础环境一摸一样,拿过来基本不用改就可以用了。书里面的讲了一下原理,还不错,通俗易懂,但是没讲太深,意犹未尽,毕竟是一本爬虫书啊
整个项目训练速度非常快,因为专门为验证码检测设计的,自己的显卡还不错,每次训练就几分钟的样子,测试了一下,最终我把原项目的单次训练的样本数量调大了8倍,原先是32的,4分钟不到3w张图片。setting.py里面我看到,检测的内容都限制了,26个字母和10个数字,所有的图片格式大小都规定了。



二.开始训练
运行环境看我的上一个深度学习的教程   一个简单的零基础的机器学习教程,Pytorch搭建Faster R-CNN目标检测平台
完全一样。

下载代码和相关资源
下载GitHub代码,下载图片数据集。相关资源最后会放出来,原项目的代码导入图片目录的时候有点问题。貌似原项目是在ubuntu系统上面运行的,我改了一下setting里面的参数如下图。
把下载images的图片放到项目目录下面如图,images这个文件夹我会单独拎出来,因为比较大,images里面的数据集图片的文件名就是图片正确的识别结果,要做自己的数据集要注意哦,train文件夹下面的图片就是我们训练时候的图片集,test文件夹下面的图片是用来训练时验证我们的训练效果的图片集,predict文件夹下面的图片就是我们训练好之后要预测的图片集。




接下来打开setting.py根据自己显卡的算力设置BATCH_SIZE,我的显卡是2070S,最终设置成了256,CPU和GPU都快到100%了。然后打开train.py运行等待就行了,训练完成会生成result.pkl文件。






验证的代码在verifies.py里面,直接运行,它会先载入模型,遍历验证集图片正确的验证码与预测结果对比,算出成功比例。


验证码的图片就是下图,26个字母和10个数字的混合,长度固定,6位。有干扰线和干扰点,没有倾斜变形。

三.最后说明
这个项目代码量非常的少,文章的篇幅也很短,项目的结构简单可以一步步的详细分析所有代码的用处,特别是model.py里面进行了三次卷积和池化操作。loader.py对图片的灰度化处理和数字化处理。虽然这些东西很抽象,但是只要不要本能的去拒绝它们,还是能够慢慢的理解的。

关注我,给我评分,给我动力继续研究更多有意思的有关python的东西哦。

Github:https://github.com/koala9527/captcha_cnn

我傻瓜1991 发表于 2020-6-28 15:12

前来学习一i下

ciker_li 发表于 2020-6-28 15:24

学习一下,机器学习得有个好显卡

天空宫阙 发表于 2020-6-28 19:35

ciker_li 发表于 2020-6-28 15:24
学习一下,机器学习得有个好显卡

确实,不过偶尔使用也可以用云GPU

天空宫阙 发表于 2020-6-28 20:47

代码写的相当有逻辑比我强多了
最近我也在用深度学习来搞验证码
1.没有看到数据集如果是自己生成的可以用python的验证码库captcha来生成,像他这样搭建数据集可以生成扭曲字体的验证码https://github.com/ypwhs/captcha_break/blob/master/ctc_pytorch.ipynb
2.可以在训练的时候增加对训练集正确率的计算和输出,毕竟loss不能直观反映正确率
3.这是我见过的最优雅的one_hot_encode
4.有一点我一直不能理解,损失函数MultiLabelSoftMarginLoss怎么实现多标签的分类的?

坂本版本 发表于 2020-7-1 13:27

默默的看了看我的GTX960苦笑了
页: [1]
查看完整版本: 一个简单的零基础的机器学习教程之二,字母数字验证码识别