Comments (20)
@Hubert2102
针对图片不定长的问题,后面会更新一个版本的。文字不定长,理论上改标注就行了。
from attention_ocr.pytorch.
改标注指的是不定长文字训练嘛@chenjun2hao
from attention_ocr.pytorch.
@chenjun2hao 我尝试了不定长训练,包括几种方式:
1)batch内定长,不同batch之间不定长
2)所有batch都定长,通过pad的方式
3)cnn阶段不定长,在输入lstm的时候加pad
这3种方式都无法收敛,我想问下你是怎么实现不定长图片训练的啊?
from attention_ocr.pytorch.
这个是不定长训练可以解决的么?我看ctc解码是定长训练可以不定长预测来着
from attention_ocr.pytorch.
@chenjun2hao 我尝试了不定长训练,包括几种方式:
1)batch内定长,不同batch之间不定长
2)所有batch都定长,通过pad的方式
3)cnn阶段不定长,在输入lstm的时候加pad
这3种方式都无法收敛,我想问下你是怎么实现不定长图片训练的啊?
请问你是pad了图片还是文字还是两者呢?不定长那么图片的大小也会不一样吧
from attention_ocr.pytorch.
@Lanme ,针对不定长的文本,你需要:1. 在batch内将图片统一宽度或者整个数据集用同样的宽度。2. 为了batch训练,你需要将标注的label填充为统一的长度(用blank进行填充)。
from attention_ocr.pytorch.
那这确定是不定长训练能解决么? 我定长训练了,之后我输入的图片也是这么多字符,但是图片被拉长了,字符间距变大,resize成固定高度,这个时候宽度和原来训练的不一样,就识别不出来了。
from attention_ocr.pytorch.
@Lanme 训练时输入图像分桶,保证同一个batch内的长度一样就可以
from attention_ocr.pytorch.
@Lanme 训练时输入图像分桶,保证同一个batch内的长度一样就可以
你试过这样不定长训练就能解决不定长预测的问题么?
from attention_ocr.pytorch.
@Lanme 可以,我尺度用的range(64,4,516),超过512缩放到512,低于64的缩放到64,效果和训练几个定长模型差不多
from attention_ocr.pytorch.
@zuokai 将图像缩放到统一高度,长度不够的话进行padding; 这样做进行不定长训练可否? 我的想法是这样就不用对数据分桶了; 另外请问你数据分桶用的什么函数?
from attention_ocr.pytorch.
@wenston2006考虑到训练耗时,我没有加pad啊,你可以试试,我觉得应该是可以的,不过这样你要把sequence_length传给dynamic_rnn,分桶我就是随机random.choice(range(64,516,4))
from attention_ocr.pytorch.
@zuokai 了解了,我以为用的pytorch自带的bucket函数; 你训练不定长图片,最后在测试集上识别精度如何?
from attention_ocr.pytorch.
@wenston2006 精度和训练多个定长的attention模型几乎一样,具体和你测试集难度有关
from attention_ocr.pytorch.
@zuokai tensorflow因为用的静态图, 对于不定长的训练数据, 由于相应的RNN的参数也会改变, 导致需要构建多个静态图, 所以推出了dynamic_rnn; pytorch本身就是构建的动态图,应该没有dynamic_rnn这个函数吧?我现在用的这个git里面的第二版本, 作者对每个batch求得最长的文本长度max_length, 然后构建图时图的长度就是max_length, batch里面长度较短的文本,会填充若干个blank字符进行对齐. 不知道他的做法是否跟你前面讲的思路一致?
from attention_ocr.pytorch.
@zuokai 我梳理了一下,本git第二版图片的长度统一resize到高32, 长280, 对于文本标签也进行了对齐; 根据你前面讲的,你是将图片分桶, 我的理解是不改变原图的宽和高的比例, 但将高度统一缩放到某个固定高度(如32?), 然后不断从训练数据中抽取相同宽度的图片,直到获得batch_size张图片,然后进行训练; 我现在还有三点存疑: 1)请问你对文本标签怎么处理的,是否进行了对齐呢?同时确保图片尺寸和文本标签长度一致似乎较难; 2)分桶以后要针对每种图片宽度构建一个模型吗?;3)在2)的基础上, loss也要针对每种模型进行计算,最终将不同模型的loss累加起来?
from attention_ocr.pytorch.
@wenston2006 是一个模型啊,cnn和dynamic_rnn本来就支持动态大小的图片,只是因为需要batch训练,才通过分桶保证图像在一个batch内宽度是一样的,但是文本长度是不一样的,用补齐就行了
from attention_ocr.pytorch.
@zuokai 我现在也尝试了bucket的思路,不过我是根据训练文本长度来区分的, 训练的loss很低,但在测试集上loss很高, 训练出来的模型泛化性能不强, 应该是过拟合了; 把训练数据用来测试都是对的,换成别的数据,就不行了,对测试文本长度也比较敏感
from attention_ocr.pytorch.
@kellylin841015 请问你的训练和测试代码可以分享一下吗? 你上面提到训练都用的10个字,那么cnn阶段不定长是指的训练还是测试?
from attention_ocr.pytorch.
@Lanme ,针对不定长的文本,你需要:1. 在batch内将图片统一宽度或者整个数据集用同样的宽度。2. 为了batch训练,你需要将标注的label填充为统一的长度(用blank进行填充)。
你好,請問,blank填充是指你的字典裡有一個字符是" "空格嗎?還是你以其他字符代表?
from attention_ocr.pytorch.
Related Issues (20)
- python3 change
- 请问新的模型什么时候 能出来,文件是太大了吗,一直下载不下来
- 请问新的模型什么时候 能出来,文件是太大了吗,一直下载不下来
- decoder每次预测一个字符,这样是不是很慢
- 预训练模型什么时候出来?
- GO 和END_TOKEN? HOT 2
- 为什么接着以前的训练,比从零开始的loss还要大.... 总感觉存在问题
- what is the difference of you repo and attention-ocr of da03 except for different frameworks? HOT 1
- encoder和decoder使用两次optimizer是为了更好的收敛吗?
- 图片位置和decoder_5.pth位置 HOT 1
- 前几个loss正常,为什么后面的损失都不正常,从5.多到0.1 HOT 1
- AssertionError: Torch not compiled with CUDA enabled 请问,这个程序一定要在GPU上跑吗? HOT 1
- 关于损失函数的问题,CRNN的损失函数不是CTC loss吗?为什么你的代码是NULLloss的?我刚入门不太清楚,望解答谢谢啦~
- 多行文本使用attention能训练吗 HOT 1
- 解码器权重加载写成加载编码器了
- 训练报错 AttributeError: 'str' object has no attribute 'decode' HOT 1
- 您好,大佬问您一个问题,为什么attention解码训练的时候,都要重置 decoder_hidden = decoder.initHidden(b).cuda()参数呢
- Increasing batch_size of validation set throws tensor size mismatch error
- 楼主可以分享一下预训练的模型么?
- 报错KeyError:' '
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from attention_ocr.pytorch.