Closed kaixinbaba closed 4 years ago
比如: 识别出来的是:
前后都有 '0'(数字零)。不是很懂 为什么会这样
@kaixinbaba 您好,第一个字母必须是空白符;pytorch 的ctc默认类别0代表空白。
@kaixinbaba 您好,预测后空白会替换掉,不会有空白呀;
label = [k for k, g in itertools.groupby(list(label))]
label = ''.join(label).replace(' ', '') #空白替换掉了
return label
这一段我注释掉了。。。soga。。。但是我的图片里 就是有空白的,需要怎么修改训练脚本呢? 请教大佬 感谢
@kaixinbaba 这个需要特殊处理一下; 1) 在类别字符中包含空白符(这里的空白符是真正的空白符) 2) 在gen_image函数中,增加一行indices+=1(将0留个ctc的空白符) 3) 预测时,注意预测的class_ids已经是真实的类别id值加1了。
@kaixinbaba 预测代码修改参考如下:
def inference_image(net, alpha, image_path):
image = load_image(image_path)
image = torch.FloatTensor(image)
predict = net(image)[0].detach().numpy() # [W,num_classes]
# label = np.argmax(predict[:], axis=1)
# label = [alpha[class_id] for class_id in label]
label = np.argmax(predict[:], axis=1) - 1
label = [alpha[class_id] if class_id >= 0 else '' for class_id in label]
label = [k for k, g in itertools.groupby(list(label))]
# label = ''.join(label).replace(' ', '')
label = ''.join(label)
return label
@kaixinbaba 这个需要特殊处理一下;
- 在类别字符中包含空白符(这里的空白符是真正的空白符)
- 在gen_image函数中,增加一行indices+=1(将0留个ctc的空白符)
预测时,注意预测的class_ids已经是真实的类别id值加1了。
不好意思,我想知道具体点,实在是麻烦您了
- 这样可以不? 真正的空白符,我直接使用空格
def get_all_words(self): # words = string.whitespace + string.digits + string.ascii_letters + ',-' words = ' ' + string.digits + string.ascii_letters + ',-' # words = string.digits + string.ascii_letters + ',- ' return words
- 2.
indices = np.array([self.alpha.index(c) + 1 for c in text])
- 3.我已经修改为大佬您提供的代码片段了
我先试试
..报错了0 0.。。
Epoch: 1/70 loss: nan
Traceback (most recent call last):
File "app/ocr/scripts/text_recognize_train.py", line 189, in <module>
train(arguments)
File "app/ocr/scripts/text_recognize_train.py", line 135, in train
utils.add_weight_history_on_master(writer, model_without_ddp, epoch + 1)
File "/data/junjiexun/intelligent_platform/app/ocr/text_reco/utils.py", line 48, in add_weight_history_on_master
_add_weight_history(writer, net, epoch)
File "/data/junjiexun/intelligent_platform/app/ocr/text_reco/utils.py", line 43, in _add_weight_history
writer.add_histogram(name, param.clone().cpu().data.numpy(), epoch)
File "/home/dev/anaconda3/envs/intelligent_platform/lib/python3.6/site-packages/tensorboardX/writer.py", line 503, in add_histogram
histogram(tag, values, bins, max_bins=max_bins), global_step, walltime)
File "/home/dev/anaconda3/envs/intelligent_platform/lib/python3.6/site-packages/tensorboardX/summary.py", line 210, in histogram
hist = make_histogram(values.astype(float), bins, max_bins)
File "/home/dev/anaconda3/envs/intelligent_platform/lib/python3.6/site-packages/tensorboardX/summary.py", line 248, in make_histogram
raise ValueError('The histogram is empty, please file a bug report.')
ValueError: The histogram is empty, please file a bug report.
@kaixinbaba 模型的类别数也需要加1, model = crnn.CRNN(len(data_set.alpha)+1)
预测的label还是没有空格,不过之前多余的空格是没有了,实在是麻烦您了。。
主要修改生成器,使生成的图像与预测的图像更相似
易作天 | |
---|---|
邮箱:csuyzt@163.com |
签名由 网易邮箱大师 定制
在2020年10月30日 17:44,Jeff Xun 写道:
预测的label还是没有空格,不过之前多余的空格是没有了,实在是麻烦您了。。
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
了解~ 感谢
抱歉又来打扰了,现在有两个问题
耽误你时间了,实在是抱歉,因为我并不太懂,只能大概看懂一些算法或代码
@kaixinbaba a) 参照eval.py中的评估,将评估代码加入训练中即可 b) crnn是文本行识别,只能识别单行文字,多行情况,需要做文字检测,然后再做文字识别;或者直接使用端到端ocr网络
谢谢~
我修改了Word对象的all_word的返回,我的目标字符只有英文和数字 加上 逗号 空格 减号一些简单的符号,训练完200epoch 之后使用这个模型预测的时候发现 无论识别什么图片(先不管最终结果的正确),在结果的label中的各个字符前后都有很多0 比如: 我的图片中是 hello world 识别出来的是 h0e0l0l0o0 0w0o0r0l0d0 类似于这样的。 然后我尝试修改all_word的返回 把空格放在第一个字符位 -, 123456... (原先是0123456...abc...) 之后训练出来模型的结果也是类似的情况,只是0变成了空格 hello world就会变成 h e l l o w o r l d 请问为什么会这样,为什么会和all_word的第一个字符有关系呢 现在代码截图
还有一个问题是怎么在训练中加入验证集的验证,以及metric的指标还有准确率acc(现在只有一个loss,也不区分训练loss还是验证的loss)
希望得到您的回复,万分感激!