[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别

栏目: 数据库 · 发布时间: 6年前

内容简介:老规矩,先上代码吧最近在做深度学习相关的项目的时候,了解在现有的深度学习检测流派里面有one-stage ,two stage 两种流派,one-stage流派中yolo模型十分的抢眼OK,在进一步了解了yolo模型之后,发现不仅有提供速度非快的yolo v3 tiny 版本,而且准确率也非常高,顿时想起了之前在上一篇Tensorflow破解验证码只是做了一些简单的分类任务,还没有正式接触过物体检测的任务,这一次项目刚好可以拿过来测试一下自己工程能力,比如网易验证码之类的

内容

  • 背景
  • 准备
  • 实践
  • 结果
  • 总结
  • 引用

背景

老规矩,先上代码吧

最近在做深度学习相关的项目的时候,了解在现有的深度学习检测流派里面有one-stage ,two stage 两种流派,one-stage流派中yolo模型十分的抢眼

[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别

OK,在进一步了解了yolo模型之后,发现不仅有提供速度非快的yolo v3 tiny 版本,而且准确率也非常高,顿时想起了之前在上一篇Tensorflow破解验证码只是做了一些简单的分类任务,还没有正式接触过物体检测的任务,这一次项目刚好可以拿过来测试一下自己工程能力,比如网易验证码之类的

[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别
如图很轻松将这些字符框出来,然后在进一步的做分类和识别就很容易了

准备

  • 系统:ubuntu16.04
  • python: 3.6
  • cuda: 10.0
  • GPU: GeForce GTX 1080
  • Darknet :http://github.com/pjreddie/darknet 
  • labelImg: https://github.com/tzutalin/labelImg

实践

安装环境

将cuda ,等环境安装好,本次将使用gpu训练,将darknet clone到本地

编译框架

进入darknet文件夹,修改 Makefile

GPU=0  #如果使用GPU改为1
CUDNN=0  #如果使用CUDNN改为1
OPENCV=0 #opencv就不用使用了,下面两个一样
OPENMP=0
DEBUG=0
......
C=gcc
CPP=g++
NVCC=nvcc #这里如果编译报错,可以换成全路径

使用命令make ,得到二进制的文件 darknet ,训练框架已经准备好了

修改配置

这里重点修改 cfg/yolov3-tiny.cfg 文件,本次的模型文件选用小版本的,这样训练速度快,而且识别速度也够快,应对本次的验证码定位完全够了,本次的任务是定位任务,所以分类看来只有一类:文字,这里我们需要修改 配置文件中的几项

Line 3: set batch=24 → using 24 images for every training step
Line 4: set subdivisions=8 → the batch will be divided by 8
Line 127: set filters=(classes + 5)*3   → in our case filters=18
Line 135: set classes=1  →  the number of categories we want to detect
Line 171: set filters=(classes + 5)*3  → in our case filters=18
Line 177: set classes=1   → the number of categories we want to detect

至于为什么fliters = (classes + 5) * 3 ,参考 yolov3 paper https://pjreddie.com/media/files/papers/YOLOv3.pdf  第2.3节的内容

准备数据

我自己使用selenium的google driver 下载了很多图片,接下来就是标注数据了

下载并编译labelimage工具 : https://github.com/tzutalin/labelImg ,安装完成后如图开始进行苦逼的标注工作

[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别
进行标注

因为我们这里只有一类内容,所有只有一类框,大概准备了500张训练数据,120张验证数据,将原始的图片文件夹 imgs ,和 label 文件夹准备好,使用代码 data.py 生在训练能使用的txt训练文件配置,另外会将label出的xml 文件以规整的形式在图片文件生成同名的标注文件(darknet的训练就是这么定义的)

准备配置

./weights 文件夹下使用使用 darknet53.sh 文件下载我们的预训练的权重文件,进入 data 文件夹,我们准备如下文件

  • train.txt  – 训练数据文件,由data.py产生
  • char.names – 类别配置文件
  • val.txt – 验证数据文件
  • train.data – 训练配置表

开始训练

进入darknet 文件夹,使用 命令

./darknet detector train data/train.data cfg/train.cfg weights/darknet53.conv.74 -gpus 1,2,3,4,5,6

使用gpu进行并行训练,一般来说我们看到训练的loss 达到0.6左右就可以停止了

[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别
训练过程

结果

使用命令 ./darknet detector test train/train.data cfg/train.cfg session/train_final.weights test_imgs/1.jpg -thresh 0.5 -gpus 0  验证我们训练好的模型,我们可以看到darknet 文件夹里面会产生一个名为 predictions.jpg 的文件,这就是我们验证出来的结果文件,我自己这边手动测试了几好张,效果都还不错

[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别
[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别
[深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别

到这里我们只是介绍了如何使用深度学习的模型去定位我们要的文字(或者说框),接下来我们可以crop出来我们的文字,然后送到检测(分类)网络里面,关于分类的网络,看下期有时间就进一步做了(有数据增强的彩蛋)

引用


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CLR via C#

CLR via C#

(美)Jeffrey Richter / 周靖 / 清华大学出版社 / 2010-9 / 99.00元

本书针对CLR和.NET Framework 4.0进行深入、全面的探讨,并结合实例介绍了如何利用它们进行设计、开发和调试。全书5部分29章。第Ⅰ部分介绍CLR基础,第Ⅱ部分解释如何设计类型,第Ⅲ部分介绍基本类型,第Ⅳ部分以实用特性为主题,第Ⅴ部分花大量篇幅重点介绍线程处理。 通过本书的阅读,读者可以掌握CLR和.NET Framework的精髓,轻松、高效地创建高性能应用程序。一起来看看 《CLR via C#》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具