liuhu-bigeye / enctc.crnn

Project for Connectionist Temporal Classification with Maximum Entropy Regularization.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

训练速度较慢

zhifengqi opened this issue · comments

训练速度要低很多

commented

因为用pytorch实现,确实比c实现的warp_ctc要慢很多。文中Synth90k的结果,我们训练了一周左右。

这个是否可以在原始的ctc上去做更改那

commented

作者已经毕业投身产业界,暂时没有改成c实现的计划。enctc在supplementary里提供了反向的公式,参照warp_ctc改起来不会很难。有需要欢迎讨论。

作者已经毕业投身产业界,暂时没有改成c实现的计划。enctc在supplementary里提供了反向的公式,参照warp_ctc改起来不会很难。有需要欢迎讨论。

@liuhu-bigeye Hi, 您好。想咨询一下您,如果我想把您的方法加入到Pytorch_warpctc里面,我需要到Pytorch_warpctc哪里进行修改呢?谢谢

commented

@Allenhu47
对比一下可以看到enctc的递归计算方式和ctc十分类似。

建议仔细读下warp-ctc的实现:https://github.com/SeanNaren/warp-ctc/blob/pytorch_bindings/include/detail/cpu_ctc.h#L189

然后把这部分python代码用类似的C实现(矩阵运算换成逐点计算):https://github.com/liuhu-bigeye/enctc.crnn/blob/master/pytorch_ctc/ctc_ent.py#L82

最后根据enctc在supplementary中的反向公式,用C实现backward。

@liuhu-bigeye 感谢!我研究一下

@allen4747 你实现了吗,可以分享一下吗?

@liuhu-bigeye 我找不到supplementary,能发一下吗?

有人使用 warp-ctc改了吗?

commented

你好,我用的是pytorch自带的CTCLoss,自带的可以不带参数,在使用cuda加速器时,使用entCTC的话必须让设置Loss的四个参数,请问有什么解决方法吗?criterion = CTCLoss()
if opt.cuda:
crnn.cuda()
crnn = torch.nn.DataParallel(crnn, device_ids=range(opt.ngpu))
image = image.cuda()
criterion = criterion.cuda() @liuhu-bigeye 谢谢

作者已经毕业投身产业界,暂时没有改成c实现的计划。enctc在supplementary里提供了反向的公式,参照warp_ctc改起来不会很难。有需要欢迎讨论。

@liuhu-bigeye Hi, 您好。想咨询一下您,如果我想把您的方法加入到Pytorch_warpctc里面,我需要到Pytorch_warpctc哪里进行修改呢?谢谢

请问后续有进展嘛?