TensorFlow OCR训练ctc_loss报No valid path found错误求解
解决方案
错误根因
ctc_loss_calculator.h:499] No valid path found警告、损失为inf的核心原因是CTC损失的对齐规则不满足:CTC要求模型输出的时间步长度T必须大于等于「标签总长度L + 标签内连续重复字符的数量R」,否则不存在合法的对齐路径,损失直接返回inf。你之前标签长度≤10时满足该条件,标签长度提升到20后时间步长度不足,触发报错。
需修改的内容
调整骨干网络下采样率
你现有网络的下采样倍率过高,导致输出时间步不足。如果需要支持最长20位的标签,至少要保证输出时间步T ≥ 40(预留2倍冗余兼容连续重复字符场景)。可修改网络结构:将部分stride=2的卷积/池化层的步长改为1,或者移除多余的下采样层,把整体下采样率控制在≤5的范围即可。
如果需要支持任意长度n的标签,需要动态适配输入尺寸:根据当前批次的最长标签长度n,将输入图片的宽度缩放至≥10*n,保证输出时间步始终满足T≥2*n的要求。修正CTC损失入参
调用tf.nn.ctc_loss时要检查三个核心参数的正确性:logit_length不要写死为固定值,要动态获取模型输出的时间步维度长度(模型输出shape为[batch_size, time_step, num_classes]时取第二维的值)label_length要和实际传入的标签长度严格对齐,不要出现标签填充后长度和实际长度不一致的问题- 确认
blank_index配置正确,默认值为0,字符集的第0位必须留给blank占位符,不要放置实际识别字符
调整标签预处理逻辑
不要对超出原有长度阈值的标签做截断,保留完整标签;不要提前合并标签中的连续重复字符,CTC会自动处理重复字符的对齐逻辑,提前合并会导致标签长度计算错误。调整训练超参数
初始学习率调低30%~50%,避免前期模型输出混乱触发无合法路径问题;调整早停触发逻辑,前5个epoch出现inf损失时不要直接终止训练,等待模型迭代稳定后如果仍有inf报错再停止。
内容的提问来源于stack exchange,提问作者watch-this
相关产品推荐
相关产品推荐

