Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

利用CRNN进行文字识别

发表于 2021-08-28 | 分类于 深度学习

CRNN

参考文章:https://xiaobaibubai.blog.csdn.net/article/details/115862743

GitHub项目:https://github.com/meijieru/crnn.pytorch

预训练模型下载地址:https://pan.baidu.com/s/1pLbeCND

CRNN 全称为 Convolutional Recurrent Neural Network,主要用于端到端地对不定长的文本序列进行识别,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,就是基于图像的序列识别。

该算法出自An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Secene Text Recognition,这篇文章来自华中科技大学白翔团队,并在2017年被人工智能顶级期刊《TPAMI》收录。

CRNN网络架构示意图

阅读全文 »

关于中文点选验证码的识别

发表于 2021-08-14 | 分类于 深度学习

关于中文点选验证码的识别

背景描述

之前对yolov3学习了挺多,包括Keras和Pytorch版本的框架代码都有使用过,而且还针对网易易盾的滑块验证码做过训练和识别,因为整体上所有滑块仅可看作一类目标,所以任务比较简单;接下来打算对网易易盾的文字点选验证码进行尝试,其中又分为有语序要求和无语序要求的两类。

无语序要求

无语序要求的就是一张验证码图片上给4~5个字,然后再给你三个字,让你按顺序点击。

有语序要求

有语序要求的就是一张验证码图片上给4~5个字,但是不再直接给出让你点击的文字,而是让你根据语义顺序点击,一般是一个成语(词语)或古诗(古文里的句子,比如这里”感时花溅泪”),成语的话比较简单,利用结巴分词一般就可以解决,古诗不太好弄。

解决方案

阅读全文 »

Pytorch-yolov3项目使用总结

发表于 2021-07-23 | 分类于 深度学习

前言

本文主要的参考资料和github项目如下:

Could not find the Qt platform plugin windows错误解决方法:

https://blog.csdn.net/DonetRen/article/details/106437538

pytorch版yolov3训练自己数据集:

https://www.cnblogs.com/pprp/p/10863496.html

https://blog.csdn.net/qq_38587510/article/details/106019905

https://blog.csdn.net/qq_39056987/article/details/104327638

github项目:

labelImg:https://github.com/tzutalin/labelImg

yolov3:https://github.com/ultralytics/yolov3(master是`yolov5`,archive是`yolov3`)

labelImg

安装PyQt5和lxml就可以运行了,运行可能会需要配置环境变量

具体参考文章:https://blog.csdn.net/DonetRen/article/details/106437538

数据标注的方式和数据集分割的方式(划分为训练集、验证集和测试集)与keras-yolov3项目是一样的,但是数据格式转换的操作有所不同,pytorch-yolov3项目中没有keras项目中的voc_annotation.py用来转换数据格式,需要使用以下代码来完成操作。

阅读全文 »

YOLOV1、V2、V3 理论篇

发表于 2021-07-17 | 分类于 图像处理

YOLOV1、V2、V3 理论篇

YOLOV1核心思想

yolo论文地址

这部分参考文章地址:https://blog.csdn.net/litt1e/article/details/88814417

作者在YOLO算法中把物体检测(object detection)问题处理成回归问题,用一个卷积神经网络结构就可以从输入图像直接预测bounding box(边框)和类别概率。

算法首先把输入图像划分成S×S的格子,然后对每个格子都预测B个bounding boxes,每个bounding box都包含5个预测值:x,y,w,h和confidence。
x,y就是bounding box的中心坐标,与grid cell对齐(即相对于当前grid cell的偏移值),使得范围变成0到1;
w,h进行归一化(分别除以图像的w和h,这样最后的w和h就在0到1范围)。
confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息

换句话说,如果ground truth(人工标注的框,更一般化的理解为训练集标签)落在这个grid cell里,那么Pr(Object)就取1,否则就是0,IOU就是bounding box与实际的groud truth之间的交并比(所谓交并比就是这两个框相交的面积除以两个框并起来的面积)。confidence是这两者的乘积。

在yolov1中作者将一幅图片分成7x7个网格(grid cell),由网络的最后一层输出7×7×30的tensor,也就是说每个格子输出1×1×30的tensor。30里面包括了2(B=2)个bound ing box的x,y,w,h,confidence以及针对格子而言的20个类别概率,输出就是 7x7x(5x2 + 20) 。
(通用公式: SxS个网格,每个网格要预测B个bounding box还要预测C个categories,输出就是S x S x (5×B+C)的一个tensor。 注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的)

v1使用的Backbone是GoogLeNet,带有全连接层,使用224*224的分辨率训练图像,但是输入图像要求448*448的尺寸。

YOLOV2重要升级

阅读全文 »

PyTorch实现卷积神经网络

发表于 2021-07-04 | 分类于 深度学习

PyTorch实现卷积神经网络

关于卷积神经网络的一些基础知识和概念等前面已经多次学习,这篇文章的重点是Pytorch来实现卷积神经网络,偏向于代码实践,理论知识不多,不过有一点关于图像经过卷积后的输出尺寸问题的公式我觉得不错,值得记录。

卷积层

我们知道卷积的过程是:让卷积核在图片上依次进行滑动,滑动方向为从左到右,从上到下,每滑动一次,卷积核就与其滑窗位置对应的输入图片x做一次点击运算并得到一个数值。在卷积的过程中,一般情况下,图片的宽高会变得越来越小,而通道数会变得越来越多。这里尺寸改变有什么样的规律呢?

输入1*7的向量,经过1*3的卷积,如果步长为2,最终得到一个1*5的向量;如果步长为2,最终得到一个1*3的向量

输入7*7的向量,经过3*3的卷积,如果步长为1,最终得到一个5*5的向量;如果步长为2,最终得到一个3*3的向量;如果步长为3,会报错

上面的例子卷积核个数都是1且通道数也是1,下面考虑多个卷积核的情况

输入32*32*3的图片,如果kernel大小为5*5*3(实际上大小就是5*5,后面的3只是为了表示针对3通道图片的一种写法,卷积核会对三个通道分别实行5*5卷积,然后加到一起),单个卷积核和步长为1的情况下,最终得到一个28*28*1的新图片;如果我们连续堆叠6个不同的卷积,最终特征层将得到6个通道,即28*28*6的新图片。

,在7*7的输入图片周边做一个像素的填充(pad=1,周边填充是上下左右都会填充),如果步长为1,kernel为3*3的卷积输出的特征层为7*7。

阅读全文 »

PyTorch实现神经网络图像分类

发表于 2021-06-26 | 分类于 深度学习

PyTorch实现神经网络图像分类

本文章主要参考《深度学习与图像识别 原理与实践一书》

上篇文章介绍了KNN分类算法,并用其来实现MNIST和Cifar10数据集的分类任务,这篇文章同样是做这两个数据集的分类,但是使用的Pytorch构建神经网络算法来完成实验,是我自己对Pytorch的一个初步学习。

之前一直是使用Keras,之所以学习Pytorch是因为,Keras比较适合作为练习使用的深度学习框架,因为其过度的封装导致学习时无法理解深度学习的真正内涵。

PyTorch的使用

Tensor

Tensor是Pytorch中的基础组件,Tensor与Numpy中的ndarrays非常类似,但是Tensor可以使用GPU加速而ndarrays不可以。在pytorch下使用如下命令来进行GPU运算:

1
2
3
4
5
6
import torch

if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
print(x+y)

x和y为Tensor类型的数据,如果电脑无GPU,则无法进行GPU运算。

Terson与Numpy互相转换

1
2
3
4
5
6
7
8
9
10
11
import torch
import numpy as np

np_data = np.arange(8).reshape((2, 4))
# 将numpy数组转换为tensor结构
torch_data = torch.from_numpy(np_data)
print(np_data)
print(torch_data)
# 转回numpy
np_data2 = torch_data.numpy()
print(np_data2)

Tensor做矩阵运算(矩阵相乘)

阅读全文 »

KNN 分类算法

发表于 2021-06-11 | 分类于 算法

KNN分类算法

KNN是机器学习种最简单的分类算法,而图像分类也是图像识别种最简单的问题,所以这里使用KNN来做图像分类,帮忙大家初步了解图像识别算法。

KNN(K-NearestNeighbor),即K-最近邻算法,顾名思义,找到最近的k个邻居,在前k个最近样本(k近邻)中选择最近的占比最高的类别作为预测类别。

KNN算法的计算逻辑:

  1. 给定测试对象,计算它与训练集中每个对象的距离;
  2. 圈定距离最近的k个训练对象,作为测试对象的邻居;
  3. 根据这k个近邻对象所属的类别,找到占比最高的那个类别作为测试对象的预测类别。

在KNN中,有两个方面的因素会影响KNN算法的准确度:一个是距离计算,另一个是k的选择。

一般使用两种比较常见的距离公式计算距离:

  1. 曼哈顿距离:
  2. 欧式距离:

KNN算法实现

阅读全文 »

反爬(七)

发表于 2021-05-18 | 分类于 爬虫

网站七处罚信息反爬破解

前情回顾:

本次破解的网站其实在前面的文章中已经有过了,具体可以参考这篇博客:

https://forchenxi.github.io/2019/09/20/spider-bankofchina/

本次是网站反爬有所升级,所以破解流程也是基于上一次的升级,所以看这篇文章前你需要先补习一下上面那篇。

正式开始:

首先跳过无限Debug

本次网站升级后,当我们按下F12开始调试时,浏览器会出现无限Debug的情况:

我们只要把鼠标放到Debugger前面的序号3上面,点击鼠标右键,选择Never pause here就可以解决了。

wzwschallenge参数

上一次破解时,我们需要获取的就是这样一个东西(省略了前缀):
/WZWSREL3poZW5nd3Vnb25na2FpLzEyNzkyNC8xMjgwNDEvMjE2MTQyMS9pbmRleC5odG1s?wzwschallenge=V1pXU19DT05GSVJNX1BSRUZJWF9MQUJFTDg2MzAxMQ==

通过发送这样一个请求来获取cookie,从而成功获取到数据。

而且当时,改变的只有wzwschallenge参数的值,前面那部分是固定的,下面来看下本次网站改版后是什么情况:

阅读全文 »

神经网络--激活函数

发表于 2021-05-16 | 分类于 深度学习

神经网络–激活函数

参考文章:

https://blog.csdn.net/tyhj_sf/article/details/79932893

https://zhuanlan.zhihu.com/p/73214810

什么是激活函数

单一神经元模型如下图所示:

神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

激活函数的用途

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

阅读全文 »

手动推导BP网络

发表于 2021-05-15 | 分类于 深度学习

手动推导BP网络

本文章转载自CSDN

原作者:ZJE_ANDY

原文链接:https://blog.csdn.net/u014453898/article/details/88607537

BP网络神经元

从神经网络中拿出一个神经元j分析:

一:BP算法第一阶段:输入信息的正向传播阶段

阅读全文 »
1…678…12
chenxi

chenxi

116 日志
11 分类
213 标签
Links
  • Docle
  • Swift
© 2025 chenxi
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4