EasyOCR 文本检测训练代码(craft)存在BUG,

ar5n3qh5  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(114)

从您提供的信息来看,Craft模型在训练过程中的预测结果列表为空。这可能是由于模型在训练过程中没有学到任何有用的信息,或者是由于数据集的问题。为了解决这个问题,您可以尝试以下方法:

  1. 检查数据集:确保您的数据集中包含足够的有标签和无标签样本,以便模型能够学习到有效的特征。此外,检查数据集中的图像是否清晰、完整且具有代表性。

  2. 调整模型参数:尝试使用不同的超参数设置,例如学习率、批次大小等,以找到最适合您的任务的参数组合。

  3. 更换模型:如果上述方法都无法解决问题,您可以尝试使用其他预训练模型,如Faster R-CNN、YOLO等,看看它们是否能在您的任务上取得更好的效果。

  4. 增加训练轮次:您提到在第5个epoch时,训练损失开始降低。这可能意味着模型在前几个epoch中没有学到足够的信息。您可以尝试增加训练轮次,观察模型的表现是否有所改善。
    [0.0180, 0.0186, 0.0196, ..., 0.0000, 0.0000, 0.0000],
    ...,
    [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],
    [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],
    [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000]]
    设备:cuda: 1
    负样本召回率:3%
    最小负样本数:5, 534
    检查正样本数量:25353
    检查负样本数量:127135
    正样本损失:66485889256
    负样本损失:22214415948837996
    检查正样本数量:4121
    这不是正确的。我不知道问题是否在实现的损失函数内部或其他代码部分。我会在这里附上图片和相应的gt。我的配置文件是:
    wandb_opt: False

ig9co6j1

ig9co6j11#

根据我的观察和理解,模型训练过程中出现较低的训练损失但没有检测框/精度/召回率较差是可以理解的,因为模型仍在训练。从日志中可以看出,模型首先输出了两个独立的检测框,而不是一开始就输出一个。在第5次迭代时,它产生了一个预期的边界框,但由于IOU小于0.5,因此未被使用,导致精度和召回率为0。训练结果与原始模型结果非常相似,至少学会了移除一个原始检测框并使用第二个具有略差IOU的框。总体而言,这导致了训练损失的提高,但由于IOU阈值,并未导致积极的检测结果。

针对上述情况,我有一些建议/确认:

  1. 请问您是否多次运行了训练代码以确保可重复性?
  2. 您是否尝试在例如20个epoch(或者在您的情况下是1张图片)之后查看结果?
  3. 您可以尝试绘制原始权重和训练权重的边界框,并将NMS/边界框阈值设置为低于0.5。根据结果,应该显示一个边界框,尽管与您的实际结果不完全对齐(但正在接近)。我认为评估脚本包含了绘制边界框的代码,只需降低阈值即可。
hpxqektj

hpxqektj2#

你好@masoudMZB,
我注意到你在使用提供的代码训练Craft时遇到了问题,以及你遇到的意外结果。几个月前,我也曾尝试使用EasyOCR的微调CRAFT模型。总结一下:

  • 默认情况下,EasyOCR会使用并下载default model weights,即使提供了自定义版本。
  • YAML config中调整阈值,如text_threshold和low_text,没有改变什么。
  • README中的地面真实格式让我们思考单个字符的边界框与整个短语之间的差异可能会产生影响。
  • 根据你的日志,我也发现了一些不一致之处,尤其是在训练损失和预测结果方面。

我在想其他人是否遇到过这个问题,找到了解决方案,或者是否有关于训练代码或损失函数潜在错误的见解。任何指导都将非常感谢!

mxg2im7a

mxg2im7a3#

大家好!
我遇到了同样的问题。有人找到解决方法了吗?

相关问题