CRNN——pytorch + wrap_ctc编译,实现pytorch版CRNN

article/2025/11/1 8:50:20

文章目录

    • 简介
    • CTC网络的输入
    • CTC网络的计算过程
    • CTC网络的输出
    • pytorch安装
    • warp-CTC安装
    • Bug解决
    • References

简介

CTC可以生成一个损失函数,用于在序列数据上进行监督式学习不需要对齐输入数据及标签,经常连接在一个RNN网络的末端,训练端到端的语音或文本识别系统。CTC论文

本文主要是讲解用wrap_ctc来实现pytorch版本的CRNN环境配置过程,用其来进行OCR端到端文本识别。(注:wrap_ctc是百度开源的一个模块,需要自己编译使用。在pytorch 1.0中,自带了CTC loss,用pytorch 1.0的话可以不用编译这个wrap_ctc)

CTC网络的输入

CTC网络的输入是一个样本(图像)经过网络(一般是CNN+RNN)计算后生成的特征向量特征序列),这部分可参考CRNN论文。

特征序列里各个向量是按序排布的,是从图像样本上从左到右的一个个小的区间映射过来的,可以设置区间的大小(宽度),宽度越小,获得的特征序列里的特征向量个数越多,极端情况下,可以设置区间宽度为1,这样就会生成width(图像宽度)个特征向量(作为后续RNN的输入)。

CNN产生的一系列(假设为width个)特征序列作为后续RNN(在CRNN中用的是Bi-LSTM)的输入,可以得到一个width维的概率矩阵,这个概率矩阵就可以作为CTC的输入,用来计算CTC loss

CTC网络的计算过程

CTC网络的计算是为了得到特征序列最可能对应的标签对象,对语音识别是一段话,对文本识别是一段文字。

  1. 计算特征序列里每个特征向量(共N个)分别对应的n个可能结果的概率。如果当前的特征向量的预测结果不在样本标签列表里,就置预测结果为blank空格或下划线。计算结果从一个N维的特征序列,得到一个N×n概率矩阵(就是上面所说的)。

  2. 计算上述预测的N×n的概率矩阵的所有可能结果的概率,中间涉及到去除重复字母和blank的操作。N个n维的特征向量(即N×n的概率矩阵)对应的所有可能的结果有 N n N^{n} Nn个,涉及到组合学,计算所有可能概率的成本会很高,但是CTC运用了动态规划(前后向算法,这部分推荐看一下HMM)以大幅降低计算的复杂性。

CTC网络的输出

对识别过程,取出最大概率对应的结果作为识别结果输出;
对训练过程,取最大概率对应的结果跟真实标签之间的差异(计算编辑距离等方法),作为训练Loss,反向传输给前端网络。

CTC计算过程示意图:

在这里插入图片描述

pytorch安装

默认你会了。。。

warp-CTC安装

首先我用的是环境是python 3.6,pytorch 1.0.1,起码这个版本是没有问题的。

参考crnn-train-pytorch,这个就是官方的教程,这部分github上的教程没有问题,如果出现错误,可以去Issues中看一下有没有相同错误,我当时安装的时候也是出现了错误,在issues里面找到了答案,出问题一定要去看一下。下面我贴几个我编译时出现问题,然后找到的答案,希望能帮到大家。

  • https://github.com/SeanNaren/warp-ctc/issues/101
  • https://github.com/SeanNaren/warp-ctc/issues/76
  • https://github.com/baidu-research/warp-ctc/issues/49

每个人遇到的问题可能不一样,上面仅供参考,相信出问题issues里面大概率会有解决办法的。
注:上面第三个链接是原版wrap_ctc里面的Issues,这里面也可能有解决问题的答案。

warp-CTC是百度开源的一个可以应用在CPU和GPU上高效并行的CTC代码库,对CTC算法进行了并行处理。

warp-CTC安装

git clone https://github.com/SeanNaren/warp-ctc.git
cd warp-ctc
mkdir build; cd build
cmake ..
make
cd ../pytorch_binding
python setup.py install

添加环境变量

vim ~/.bashrc
export WARP_CTC_PATH=/home/xxx/warp-ctc/build

验证pytorch中warp-CTC是否可用GPU例子:

cd /home/xxx/warp-ctc/pytorch_binding/tests
python test_gpu.py

若输出下列内容,则代表warp_ctc编译安装成功:
在这里插入图片描述
或:

import torch
from torch.autograd import Variable
from warpctc_pytorch import CTCLoss
ctc_loss = CTCLoss()
# expected shape of seqLength x batchSize x alphabet_size
probs = torch.FloatTensor([[[0.1, 0.6, 0.1, 0.1, 0.1], [0.1, 0.1, 0.6, 0.1, 0.1]]]).transpose(0, 1).contiguous()
labels = Variable(torch.IntTensor([1, 2]))
label_sizes = Variable(torch.IntTensor([2]))
probs_sizes = Variable(torch.IntTensor([2]))
probs = Variable(probs, requires_grad=True) # tells autograd to compute gradients for probs
cost = ctc_loss(probs, labels, probs_sizes, label_sizes)
cost.backward()
print('PyTorch bindings for Warp-ctc')

Bug解决

到此整个CRNN的运行环境基本已经配置完毕(还需要安装一个lmdb,pip install lmdb即可),在编译wrap_ctc的时候可能会出一些莫名奇妙的Bug,这部分还是推荐先去Issues里面找答案。像这么成熟的模块,Issues里面基本已经包含所有常见错误了,其他有问题欢迎大家多交流,共同进步~

References

  • https://github.com/SeanNaren/warp-ctc
  • https://github.com/baidu-research/warp-ctc
  • https://blog.csdn.net/dcrmg/article/details/80199722

http://chatgpt.dhexx.cn/article/9H1UPTve.shtml

相关文章

OCR文本扫描 轮廓检测 透视变换

OCR文本扫描项目实战(图像预处理,调用pytesseract.image_to_string()完成文本识别) 本项目和源代码来自唐宇迪opencv项目实战 本文是一篇OCR文本扫描项目实战的学习笔记。在opencv-python环境下对图像进行轮廓检测、透视变换等处理。调用pytesseract模块实现文本扫…

搭建CRNN模型(基于windows与tensorflow)

3.1.1.CRNN介绍 通过CNN将图片的特征提取出来后采用RNN对序列进行预测,最后通过一个CTC的翻译层得到最终结果。说白了就是CNNRNNCTC的结构。 Git 地址https://github.com/bgshih/crnn 论文:paper http://arxiv.org/abs/1507.05717. 3.1.2.CNN介绍 CNN…

CTPN训练集准备

去down vgg_16.ckpt预训练模型准备一堆你需要训练的图片,使用labelme进行标注,得到一堆json文件 json文件大致如下: {"flags": {},"shapes": [{"label": "str","line_color": null,"…

【项目实践】中英文文字检测与识别项目(CTPN+CRNN+CTC Loss原理讲解)

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达本文转自:opencv学堂 OCR——简介 文字识别也是图像领域一个常见问题。然而,对于自然场景图像,首先要定位图像中的文字位置&#xff0…

『工程项目实践』银行卡识别(CTPN+CRNN)

银行卡识别 前言一、数据预处理1.1 数据准备1.2 数据增强 二、训练(CRNN)三、需要修改的内容3.1 数据增强3.2 训练 四、CRNN 结构说明4.1 CNN4.2 BiLSTM4.3 CTC 五、卡号检测六、BIN码校验参考链接 前言 对各种银行卡进行卡号识别,CTPN 进行文…

【深度学习】YOLOv5 中使用的 CSPNet 是怎么回事

论文:https://arxiv.org/pdf/1911.11929.pdf CSPNet全称是Cross Stage Partial Network,主要从一个比较特殊的角度切入,能够在降低20%计算量的情况下保持甚至提高CNN的能力。 跨阶段局部网络(CSPNet)是 Wang 等人于 20…

Opencv多语言自然场景文本识别系统(源码&教程)

1. 研究背景 人类在自然场景中可以快速定位并识别看到的文字信息,但是想要计算机做到和人类一样是比较困难的。开发人员一直想要让机器也能识别图像中的文字信息。当然,对于自然场景来说,图像中的信息复杂甚至是低效的,文字旁的物体﹑光影,以及字体颜色、大小、书写…

深度学习CTPN+CRNN模型实现图片内文字的定位与识别(OCR)

1:样本获取 **算法论文:** Synthetic Data for Text Localisation in Natural Images Github: https://github.com/ankush-me/SynthText **词库:** https://pan.baidu.com/s/10anmu 英文词汇 经过处理后得到大约500兆 6000万词组 **字体:** ubntu系统下支持中文的字体&…

ctpn、east阅读要点记录

最近要做一些ocr的事情,阅读了文字定位的相关论文,主要是ctpn和east.下面对这两篇论文的药店进行一个记录。 CTPN ctpn结合了卷积神经网络和循环神经网络。卷机神经网络用于提取图片特征,循环神经网络能够帮助提升对文字的定位和分类的准确…

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

文章主要是为了说明在windows平台下调试遇到的问题。 代码地址:https://github.com/Aurora11111/chinese-ocr-pytorch 按照相关说明,安装相关的pytorch和tensorflow,我使用的是python3.7 下载代码后,需要进行修改才能在windows…

OCR文字识别项目(原理)

参考视频: OCR文字识别原理 OCR光学字符识别:提取图像中的文字,并转换为文本形式,供后续NLP使用。 一、CTPN算法:文字检测 二、CRNN算法:文字识别 池化此时为12。才能把特征变为适用于输入到RNN中。

CTPN+CRNN算法端到端实现文字识别的实战开发

本文分享自华为云社区《CTPNCRNN 算法端到端实现文字识别》,作者:HWCloudAI。 OCR介绍 光学字符识别(英语:Optical Character Recognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取…

OCR入门教程系列(五):OCR实战代码解析

👨‍💻作者简介: CSDN、阿里云人工智能领域博客专家,新星计划计算机视觉导师,百度飞桨PPDE,专注大数据与AI知识分享。✨公众号:GoAI的学习小屋 ,免费分享书籍、简历、导图等,更有交流群分享宝藏资料,关注公众号回复“加群”或➡️链接 加群。 🎉专栏推荐: ➡️ …

制作自己的ctpn数据集

制作自己的ctpn数据集 1、利用label-image标注自己的数据集,保存为.txt文件,结果如下: 上图第一列 0:标签 后面的小数是label—image标注的坐标框位置(归一化后的结果) 2、ctpn数据集的格式:…

CTPN文本检测与tensorflow实现

1. 引言 近年来,随着人工智能的发展,文本检测在很多任务中都是一项基本任务,比如广告牌中文字识别、智能驾驶路牌的检测、身份证识别、快递地址识别等。这些任务中首先的一项就是文本检测,即检测出文本在图像中的位置,…

制作自己的CTPN训练集

制作自己的CTPN训练集 使用labelimg工具制作YOLO格式再将其转为CTPN中需要的8个坐标 1.标注框 2.代码生成坐标并保存 import cv2 import os def change_labelimage_to_cptn_data(pictures_file_path, txt_file_path, cptn_data_labels_path):list os.listdir(txt_file_pat…

【文本检测与识别-白皮书-3.1】第四节:算法模型 2

CTPN CTPN,全称是“Detecting Text in Natural Image with Connectionist Text Proposal Network”(基于连接预选框网络的文本检测)。CTPN直接在卷积特征映射中检测一系列精细比例的文本建议中的文本行。CTPN开发了一个垂直锚定机制&#xf…

CPTN代码运行报错

Windows10 系统运行 github上给的是linux操作系统指令 因为我是Windows10 的系统,不能通过setup的指令得到所需文件,后面根据https://github.com/eragonruan/text-detection-ctpn/issues/359的方法到第4步报错 错误1: 找不到cl.exe&#x…

JAVA项目实战开发电商项目案例(十)订单与支付模块

文章目录 1项目架构2项目采用技术3订单与支付模块功能演示4如何开发支付宝的支付模块以及订单模块4.1首先需要编写前端页面以及JS文件4.2其次需要编写JAVA后台接口4.3支付模块分析4.4订单模块分析5代码分析6个人说明7 [我的个人网站](http://www.liph.fun)8获取源码 此次电商系…

Java 项目实战 坦克大战 (0)--前言

做了有一个星期了,java语言太强大了,也算是学得最认真的一门语言了,本次课设花的心思也就比较多了。关键总是追求完美总是想原创,最终做出来效果不错,但感觉代码逻辑很乱,今天开始就好好整理一番&#xff0…