Giter Club home page Giter Club logo

captcha_identify.pytorch's Introduction

深度学习识别验证码

基于: https://github.com/dee1024/pytorch-captcha-recognition 进行修改

本项目致力于使用神经网络来识别各种验证码。

在这个库的基础上,进行了改动,添加了很多trick来增强识别效果,如attention机制,dual pooling, ibn模块,bnneck,center loss等。

链接为:https://github.com/pprp/captcha.Pytorch

改动

  • 添加了更多torchvision中支持的模型
  • 改了一下文件的名称
  • 支持了GPU,当然cpu也可以
  • 添加了以下功能:训练完成一个epoch之后进行测试,(需要保证test和train中的模型一致)
  • 添加了以下功能:将每次得到的测试结果写入results.txt文件,运行torch_util.py得到results.png可视化准确率。
  • RES152为基础网络进行训练,混合数字和大写字符只能达到94%,还达不到原作者的识别率,希望得到赐教

特性

  • 端到端,不需要做更多的图片预处理(比如图片字符切割、图片尺寸归一化、图片字符标记、字符图片特征提取)
  • 验证码包括数字、大写字母、小写
  • 采用自己生成的验证码来作为神经网络的训练集合、测试集合、预测集合
  • 纯四位数字,验证码识别率高达 99.9999 %
  • 四位数字 + 大写字符,验证码识别率约 96 %
  • 深度学习框架pytorch + 验证码生成器ImageCaptcha

原理

  • 训练集合生成

    使用常用的 Python 验证码生成库 ImageCaptcha,生成 10w 个验证码,并且都自动标记好; 如果需要识别其他的验证码也同样的道理,寻找对应的验证码生成算法自动生成已经标记好的训练集合或者手动对标记,需要上万级别的数量,纯手工需要一定的时间,再或者可以借助一些网络的打码平台进行标记

  • 训练卷积神经网络 构建一个多层的卷积网络,进行多标签分类模型的训练 标记的每个字符都做 one-hot 编码 批量输入图片集合和标记数据,大概15个Epoch后,准确率已经达到 96% 以上

验证码识别率展示

快速开始

  • 步骤一:10分钟环境安装

    Python3.6+ 、ImageCaptcha库(pip install captcha)、 Pytorch(参考官网http://pytorch.org)

  • 步骤二:生成验证码

    python captchaGenerator.py

    执行以上命令,会在目录 dataset/train/ 下生成多张验证码图片,图片已经标注好,数量可以是 1w、5w、10w,通过 captchaGenerator.py 内的 count 参数设定

  • 步骤三:训练模型

    python train.py

    使用步骤一生成的验证码图集合用CNN模型(在 models 中定义)进行训练,训练完成会生成文件保存在weights文件夹中,最好的结果保存为cnn_best.pt

  • 步骤四:测试模型

    python test.py

    可以在控制台,看到模型的准确率(如 95%) ,如果准确率较低,回到步骤一,生成更多的图片集合再次训练

  • 步骤五:使用模型做预测

    python predict.py

    可以在控制台,看到预测输出的结果

可视化

results_res101

贡献

我们期待你的 pull requests !

有问题欢迎提出issue

作者

声明

本项目仅用于交流学习

captcha_identify.pytorch's People

Contributors

pprp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

captcha_identify.pytorch's Issues

代码下载后直接运行后遇见的两个简单报错

1.FileNotFoundError: [Errno 2] No such file or directory: './weights/cnn_000.pt'
解决方法:在代码根目录创建weights文件夹

2.OsError could not found \dataset\test
解决方法:在datasets中创建test文件夹,再创建一些验证码作为测试。

3.Error22...... cnn_000.pt。此错误为跑了一遍报错后重跑发生的
解决方法:删除weights中生成的cnn_000.pt

关于模型正确率的问题

这里我采用了1w的训练集,跑了100个epoch,验证码是五位数字+小写+大写字母混合型,正确率只有20%不到,需要改变神经网络模型吗?

请赐教

现在的话 准确度到了85了 但是始终上不去了
可以问一下具体的超参以及训练集数据集的大小吗?

运行train报错

RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same

请教一下 这个 num_samples 设置多少呀

File "D:/Program Files/pycharm-professional-2018.1/project/captcha_identify.torch-master/train.py", line 51, in main
acc = test.test_data("./weights/cnn_%03g.pt" % epoch)
File "D:\Program Files\pycharm-professional-2018.1\project\captcha_identify.torch-master\test.py", line 56, in test_data
test_dataloader = datasets.get_test_data_loader()
File "D:\Program Files\pycharm-professional-2018.1\project\captcha_identify.torch-master\datasets.py", line 47, in get_test_data_loader
return DataLoader(dataset, batch_size=1, shuffle=True)
File "D:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\dataloader.py", line 213, in init
sampler = RandomSampler(dataset)
File "D:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\sampler.py", line 94, in init
"value, but got num_samples={}".format(self.num_samples))
ValueError: num_samples should be a positive integer value, but got num_samples=0

请教一下 这个 num_samples 设置多少呀

if not isinstance(self.num_samples, int) or self.num_samples <= 0:

运行报错

直接运行后会弹以下报错
ValueError: num_samples should be a positive integer value, but got num_samples=0
我将captcha_identify.pytorch-master\datasets.py 第47行的
return DataLoader(dataset, batch_size=1, shuffle=True) 的True改为False后弹出新的报错
报错信息:ZeroDivisionError: division by zero
似乎是test.py 中第78行的 return 100 * correct / total 引起的

报错

运行train.py的时候出现报错 请问是哪里问题呢
QQ图片20191118020821

输入图片size设置

图片生成脚本中生成的图片的size为60x160,用vgg或resnet模型时,是否需要transforms.resize图片大小为224x224?

请问怎么用GPU训练

找了好久资料都不知道怎么用GPU训练,一些设置也改了

-- coding: UTF-8 --

import torch
import torch.nn as nn
from torch.autograd import Variable
import datasets
from models import *
import torch_util
import os, shutil
import argparse
import test
import torchvision
import settings

os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"

Hyper Parameters

num_epochs = 300
batch_size = 20
learning_rate = 0.001

device = torch_util.select_device()
device = torch.device("cuda:0")

def main(args):
cnn = CNN().to(device)

cnn.train()
criterion = nn.MultiLabelSoftMarginLoss()
optimizer = torch.optim.Adam(cnn.parameters(), lr=learning_rate)

if args.resume:
    cnn.load_state_dict(torch.load(args.model_path, map_location=device))

max_acc = 0
# Train the Model
train_dataloader = datasets.get_train_data_loader()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.