Sierkinhane / CRNN_Chinese_Characters_Rec

(CRNN) Chinese Characters Recognition.
1.82k stars 538 forks source link

代码已经更新,关于新版本的问题可以在这里提出 #124

Closed Sierkinhane closed 4 years ago

changwh commented 5 years ago

新版本代码暂时碰到两个坑就没再继续测试了 1.models/crnn.py中最后两行有误 2.crnn_main_v2.py中147行的数据集未给出,是否应该改成 --trainroot 和 --valroot 传入的参数

Sierkinhane commented 5 years ago

你好,更新的代码适用的数据集适用于原来的360M中文数据集,通过以下操作进行准备:

  1. 将pytorch更新至v1.1.0
  2. 首先准备训练集与测试集的标签:python preprocessing.py to prepare train.txt and test.txt
  3. 修改crnn_main_v2.py程序中的图片、标签路径
  4. 运行:python crnn_main_v2.py --cuda

@changwh crnn.py出现的错误提示是什么呢?

changwh commented 5 years ago

你好,更新的代码适用的数据集适用于原来的360M中文数据集,通过以下操作进行准备:

1. 将pytorch更新至v1.1.0

2. 首先准备训练集与测试集的标签:python preprocessing.py to prepare train.txt and test.txt

3. 修改crnn_main_v2.py程序中的图片、标签路径

4. 运行:python crnn_main_v2.py --cuda

@changwh crnn.py出现的错误提示是什么呢?

你看看代码就知道了

Sierkinhane commented 5 years ago

OK了,删除的时候遗漏了

changwh commented 5 years ago

OK了,删除的时候遗漏了

顺便帮我看看另外一个issue吧,多谢啦。

AemaH commented 5 years ago

您好,按照您的步骤,我对于train和test的label使用preprocessing.py进行处理,修改了地址之后,运行出现了以下错误提示 ValueError: invalid literal for int() with base 10: '军(西点1912年班'

Sierkinhane commented 5 years ago

@AemaH 试试我制作的标签文件 链接:https://pan.baidu.com/s/1rd4tm0sCq5fFgB2ziUxcrA 提取码:w877

Sierkinhane commented 5 years ago

@AemaH 报错的是哪条语句?

AemaH commented 5 years ago

@Sierkinhane 谢谢您,是line11,之前的label我是从您的CSDN博客中

图片与之对应的标签我链接:https://pan.baidu.com/s/1jfAKQVjD-SMJSffOwGhh8A 密码:u7bo

下载下来得到,然后运行出现了错误,紧接着我在https://pan.baidu.com/s/1dFda6R3#list/path=%2F 下载了这个版本的label,采用您的preprocessing.py,倒是可以使用,只是训练的时候,在验证集上准确率会很低,训练了3个epoch,只有不到10%,可能也是因为我将dataloader长度限制为320000的原因。

AemaH commented 5 years ago

@Sierkinhane 您好,在使用了您所制作的标签文件作为train和test的label之后,进行训练。一方面因为每个epoch太长,于是我将dataloader长度限制在了320000,然后进行训练,出现了loss变为nan的情况,此前的loss都还很高,在0.01以上。

Sierkinhane commented 5 years ago

你的pytorch版本是多少?

AemaH commented 5 years ago

@Sierkinhane 系统为Ubuntu18.04

Sierkinhane commented 5 years ago

用的是这个仓库最新的代码吧?可以把你前面的loss的情况发来看看吗

AemaH commented 5 years ago

@Sierkinhane 是的 都是两天前git下来的,,loss的话请等一下,使用vscode连的ssh跑的,所以之前的loss 不见了都

AemaH commented 5 years ago

想起了之前看到的这个关于CTCLoss设置导致loss变为nan的问题 https://github.com/ypwhs/captcha_break/issues/29

AemaH commented 5 years ago

@Sierkinhane 您好,刚刚看了下您其中定义的CTCLoss的输入参数: https://github.com/Sierkinhane/crnn_chinese_characters_rec/blob/9b5ca05d1c537ff99980db358b4ac1c57ada4341/crnn_main_v2.py#L100 发现其中用来表示input_lengths和target_lengthpreds_size和length,前者仅为41,而后者为32。

但CTCLoss不是要求 input_length >= 2 * target_length + 1,比如 abcd 这个label,输出必须能放得下 -a-b-c-d-,不然就会 nan吗?

有关代码:

      if (s < 2*max_target_length+1)
         log_alpha_data[la_batch_offset + la_input_stride * t + la_target_stride * s] = neginf;
     }

https://github.com/pytorch/pytorch/blob/v1.1.0/aten/src/ATen/native/cuda/LossCTC.cu#L139-L141

AemaH commented 5 years ago

您好,这是我之前有一次训练loss变为nan的情况

这是刚刚loss变为nan的情况:

Sierkinhane commented 5 years ago

123

AemaH commented 5 years ago

抱歉,刚刚我仔细看了下代码中的CTCLoss的输入,才发现自己修改后 preds_size, length各自是81和10,就算不进行模型的修改,也是41和10,是肯定满足的,是我搞错了,抱歉😂,可能是学习率的原因我再修改一下试试看

Sierkinhane commented 5 years ago

@AemaH 这个nan应该是pytorch ctcloss的一个bug,我在主程序中加了一段别人的掩码技巧,这个方法倒是可以解决nan的问题,但是准确率方面我还没空去验证,你可以尝试一下?

Sierkinhane commented 5 years ago

增加了crnn_main_v2.py中的129-132和185行

AemaH commented 5 years ago

@Sierkinhane 好的😁

AemaH commented 5 years ago

@Sierkinhane 您的新版代码129-132缩进有点问题

AemaH commented 5 years ago

您好,刚刚跑设置为全部train集合大小,跑完了一个epoch,得到的准确率为96。

CharlesWu123 commented 5 years ago

@Sierkinhane 问一下您这个backward_hook()在哪里使用呢?

endy-see commented 5 years ago

@Sierkinhane 问一下您这个backward_hook()在哪里使用呢?

同问,我这边也报错,找不到backward_hook NameError: name 'backward_hook' is not defined

Sierkinhane commented 5 years ago

我在crnn_main_v2.py中增加的129-132行和185行就是

CharlesWu123 commented 5 years ago

好的,谢谢,之前没看到185的内容 ^-^

AemaH commented 5 years ago

@Sierkinhane 您好,出现了问题就是:训练出来的模型,加载后完全无法识别图片,输出的结果为空白,而且就算是识别训练集和验证集上的图片依旧是没有结果的。所以就很好奇那个准确率是怎么有的

Sierkinhane commented 5 years ago

@AemaH 训练时验证的准确率怎么样?你把你的模型发我邮箱

Sierkinhane commented 5 years ago

@AemaH 我想我找到问题了,我测试一下。

AemaH commented 5 years ago

@CharlesWu123 我是修改了函数的缩进,解决了问题

Sierkinhane commented 5 years ago

@AemaH 把模型发我QQ邮箱917407614

CharlesWu123 commented 5 years ago

对,解决了,缩进问题,还有就是backward_hook 的第一个参数应该是代表的module。现在我自己的数据也跑起来了,就是损失刚开始很大,2000多,是不是有什么问题。tensorflow跑起来后损失200多,现在收敛到10几不动了,我估计我这边数据处理还是有些问题。

Sierkinhane commented 5 years ago

@AemaH 新代码已经更新至test.py

vlzzhou commented 5 years ago

很奇怪,loss尽然变成了负值

Sierkinhane commented 5 years ago

@vlzzhou 下载这个仓库最新的代码,loss为负值和nan都已经解决

vlzzhou commented 5 years ago

你们的loss怎么变化的呢,我的loss变成负的了,有没有什么解决办法呢@AemaH@CharlesWu123 @Sierkinhane@yanmeizhao

vlzzhou commented 5 years ago

@Sierkinhane博主您好,我就是下载今天的github进行训练的,结果出现了loss负值情况。nan的问题没有出现,但是出现了loss负数的情况。

Sierkinhane commented 5 years ago

Pytorch 更新到1.10没,刚开始正常的loss应该是70左右

vlzzhou commented 5 years ago

更新了,开始是50多,后来减少到0左右,一会正一会负

在2019年08月02日 22:18,Louis. 写道:

Pytorch 更新到1.10没,刚开始正常的loss应该是70左右

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

AemaH commented 5 years ago

@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej

vlzzhou commented 5 years ago

谢谢,你那个parems参数设置是多少啊?一开始我的loss值也是50多,最后慢慢变成了0左右,正负变化。这个和样本的数量有关系吗?

在2019年08月02日 23:39,AemaH 写道:

@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

AemaH commented 5 years ago

额 批次的大小只是影响loss下降的趋势 不会影响loss的正负吧,我使用的默认的值跑的 也就是batch为32之类的,dataloader的长度我还没调整

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: vlzzhou notifications@github.com 发送时间: 2019年8月2日 23:45 收件人: Sierkinhane/crnn_chinese_characters_rec crnn_chinese_characters_rec@noreply.github.com 抄送: AemaH 934966706@qq.com, Mention mention@noreply.github.com 主题: 回复:[Sierkinhane/crnn_chinese_characters_rec] 代码已经更新,关于新版本的问题可以在这里提出 (#124)

谢谢,你那个parems参数设置是多少啊?一开始我的loss值也是50多,最后慢慢变成了0左右,正负变化。这个和样本的数量有关系吗?

在2019年08月02日 23:39,AemaH 写道:

@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

vlzzhou commented 5 years ago

我用的batchsize是32,dateloder设置不设置,结果都会出现loss负值,搞不懂为什么

在2019年08月02日 23:50,AemaH 写道: 额 批次的大小只是影响loss下降的趋势 不会影响loss的正负吧,我使用的默认的值跑的 也就是batch为32之类的,dataloader的长度我还没调整

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: vlzzhou notifications@github.com 发送时间: 2019年8月2日 23:45 收件人: Sierkinhane/crnn_chinese_characters_rec crnn_chinese_characters_rec@noreply.github.com 抄送: AemaH 934966706@qq.com, Mention mention@noreply.github.com 主题: 回复:[Sierkinhane/crnn_chinese_characters_rec] 代码已经更新,关于新版本的问题可以在这里提出 (#124)

谢谢,你那个parems参数设置是多少啊?一开始我的loss值也是50多,最后慢慢变成了0左右,正负变化。这个和样本的数量有关系吗?

在2019年08月02日 23:39,AemaH 写道:

@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

vlzzhou commented 5 years ago

我的pytorch已经是最新版本1.1.0,而且现在loss初始值是70左右。我用的迁移学习,使用了您的预训练模型继续训练,自己添加的样本只有两千张,没有扩充。val_datelodor也设置了。没有下载360万的数据集。这个会不会有影响呢?但是loss值跑到后面就会在0左右摆动,一会正一会负,accuracy只有0.4左右。params中best_accuracy设置为50答不到,会一直答不到。不知道为什么loss会出现低于0的情况。训练样本大小我都还为了(280,32)。

在2019年08月02日 22:18,Louis. 写道:

Pytorch 更新到1.10没,刚开始正常的loss应该是70左右

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

vlzzhou commented 5 years ago

我的loss值降低,我查了一下代码,utils.py文件中计算loss的数值时,def add(self,v)函数中的v变为在正负之间变动,所以导致loss结果在正负之间跳动。 criterion(preds, text, preds_size, length)这个的计算存在问题

vlzzhou commented 5 years ago

我的loss值降低,我查了一下代码,utils.py文件中计算loss的数值时,def add(self,v)函数中的v变为在正负之间变动,所以导致loss结果在正负之间跳动。 criterion(preds, text, preds_size, length)这个的计算存在问题

Sierkinhane commented 5 years ago

@vlzzhou crnn.py中网络的前向传播最后添加log max没?

vlzzhou commented 5 years ago

很怪异的现象 在2019年08月03日 18:04,Louis. 写道:

@vlzzhou crnn.py中网络的前向传播最后添加log max没?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.