Git Product home page Git Product logo

Comments (20)

chenjun2hao avatar chenjun2hao commented on August 28, 2024

@Hubert2102
针对图片不定长的问题,后面会更新一个版本的。文字不定长,理论上改标注就行了。

from attention_ocr.pytorch.

Hubert2102 avatar Hubert2102 commented on August 28, 2024

改标注指的是不定长文字训练嘛@chenjun2hao

from attention_ocr.pytorch.

zuokai avatar zuokai commented on August 28, 2024

@chenjun2hao 我尝试了不定长训练,包括几种方式:
1)batch内定长,不同batch之间不定长
2)所有batch都定长,通过pad的方式
3)cnn阶段不定长,在输入lstm的时候加pad
这3种方式都无法收敛,我想问下你是怎么实现不定长图片训练的啊?

from attention_ocr.pytorch.

Lanme avatar Lanme commented on August 28, 2024

这个是不定长训练可以解决的么?我看ctc解码是定长训练可以不定长预测来着

from attention_ocr.pytorch.

Lanme avatar Lanme commented on August 28, 2024

@chenjun2hao 我尝试了不定长训练,包括几种方式:
1)batch内定长,不同batch之间不定长
2)所有batch都定长,通过pad的方式
3)cnn阶段不定长,在输入lstm的时候加pad
这3种方式都无法收敛,我想问下你是怎么实现不定长图片训练的啊?

请问你是pad了图片还是文字还是两者呢?不定长那么图片的大小也会不一样吧

from attention_ocr.pytorch.

chenjun2hao avatar chenjun2hao commented on August 28, 2024

@Lanme ,针对不定长的文本,你需要:1. 在batch内将图片统一宽度或者整个数据集用同样的宽度。2. 为了batch训练,你需要将标注的label填充为统一的长度(用blank进行填充)。

from attention_ocr.pytorch.

Lanme avatar Lanme commented on August 28, 2024

那这确定是不定长训练能解决么? 我定长训练了,之后我输入的图片也是这么多字符,但是图片被拉长了,字符间距变大,resize成固定高度,这个时候宽度和原来训练的不一样,就识别不出来了。

from attention_ocr.pytorch.

zuokai avatar zuokai commented on August 28, 2024

@Lanme 训练时输入图像分桶,保证同一个batch内的长度一样就可以

from attention_ocr.pytorch.

Lanme avatar Lanme commented on August 28, 2024

@Lanme 训练时输入图像分桶,保证同一个batch内的长度一样就可以

你试过这样不定长训练就能解决不定长预测的问题么?

from attention_ocr.pytorch.

zuokai avatar zuokai commented on August 28, 2024

@Lanme 可以,我尺度用的range(64,4,516),超过512缩放到512,低于64的缩放到64,效果和训练几个定长模型差不多

from attention_ocr.pytorch.

wenston2006 avatar wenston2006 commented on August 28, 2024

@zuokai 将图像缩放到统一高度,长度不够的话进行padding; 这样做进行不定长训练可否? 我的想法是这样就不用对数据分桶了; 另外请问你数据分桶用的什么函数?

from attention_ocr.pytorch.

zuokai avatar zuokai commented on August 28, 2024

@wenston2006考虑到训练耗时,我没有加pad啊,你可以试试,我觉得应该是可以的,不过这样你要把sequence_length传给dynamic_rnn,分桶我就是随机random.choice(range(64,516,4))

from attention_ocr.pytorch.

wenston2006 avatar wenston2006 commented on August 28, 2024

@zuokai 了解了,我以为用的pytorch自带的bucket函数; 你训练不定长图片,最后在测试集上识别精度如何?

from attention_ocr.pytorch.

zuokai avatar zuokai commented on August 28, 2024

@wenston2006 精度和训练多个定长的attention模型几乎一样,具体和你测试集难度有关

from attention_ocr.pytorch.

wenston2006 avatar wenston2006 commented on August 28, 2024

@zuokai tensorflow因为用的静态图, 对于不定长的训练数据, 由于相应的RNN的参数也会改变, 导致需要构建多个静态图, 所以推出了dynamic_rnn; pytorch本身就是构建的动态图,应该没有dynamic_rnn这个函数吧?我现在用的这个git里面的第二版本, 作者对每个batch求得最长的文本长度max_length, 然后构建图时图的长度就是max_length, batch里面长度较短的文本,会填充若干个blank字符进行对齐. 不知道他的做法是否跟你前面讲的思路一致?

from attention_ocr.pytorch.

wenston2006 avatar wenston2006 commented on August 28, 2024

@zuokai 我梳理了一下,本git第二版图片的长度统一resize到高32, 长280, 对于文本标签也进行了对齐; 根据你前面讲的,你是将图片分桶, 我的理解是不改变原图的宽和高的比例, 但将高度统一缩放到某个固定高度(如32?), 然后不断从训练数据中抽取相同宽度的图片,直到获得batch_size张图片,然后进行训练; 我现在还有三点存疑: 1)请问你对文本标签怎么处理的,是否进行了对齐呢?同时确保图片尺寸和文本标签长度一致似乎较难; 2)分桶以后要针对每种图片宽度构建一个模型吗?;3)在2)的基础上, loss也要针对每种模型进行计算,最终将不同模型的loss累加起来?

from attention_ocr.pytorch.

zuokai avatar zuokai commented on August 28, 2024

@wenston2006 是一个模型啊,cnn和dynamic_rnn本来就支持动态大小的图片,只是因为需要batch训练,才通过分桶保证图像在一个batch内宽度是一样的,但是文本长度是不一样的,用补齐就行了

from attention_ocr.pytorch.

wenston2006 avatar wenston2006 commented on August 28, 2024

@zuokai 我现在也尝试了bucket的思路,不过我是根据训练文本长度来区分的, 训练的loss很低,但在测试集上loss很高, 训练出来的模型泛化性能不强, 应该是过拟合了; 把训练数据用来测试都是对的,换成别的数据,就不行了,对测试文本长度也比较敏感

from attention_ocr.pytorch.

wenston2006 avatar wenston2006 commented on August 28, 2024

@kellylin841015 请问你的训练和测试代码可以分享一下吗? 你上面提到训练都用的10个字,那么cnn阶段不定长是指的训练还是测试?

from attention_ocr.pytorch.

kellylin841015 avatar kellylin841015 commented on August 28, 2024

@Lanme ,针对不定长的文本,你需要:1. 在batch内将图片统一宽度或者整个数据集用同样的宽度。2. 为了batch训练,你需要将标注的label填充为统一的长度(用blank进行填充)。

你好,請問,blank填充是指你的字典裡有一個字符是" "空格嗎?還是你以其他字符代表?

from attention_ocr.pytorch.

Related Issues (20)

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.