在 COCO 数据集上从头开始训练 CNN

人工智能 卷积神经网络 计算机视觉 张量流 物体识别
2021-11-05 13:52:54

我正在使用 Tensorflow 对象检测 API 在 COCO 数据集上从头开始训练 CNN。我需要使用这个特定的配置COCO 上没有具有该配置的预训练模型,这就是我从头开始训练的原因。

然而,经过 1 周的训练并评估了训练阶段生成的每个检查点,这就是我的学习阶段在 Tensorboard 上的显示方式:

张量板评估

因此,我的问题是:

  • 有谁知道大约需要多少次迭代?现在我做了超过 500'000 次迭代。
  • 500'000 之后的评价怎么可能是 0.8%?我预计会达到 60-70%。
  • 为什么500k迭代后突然下降?我认为 eval 应该收敛到某个极限。(这是SGD应该做的)
  • 有什么“技巧”可以加快训练阶段吗?(例如:提高学习率等)。
1个回答

很难确定出了什么问题,但这里有一些可能性:

  1. 问题很困难。COCO 论文报告说,一个典型的物体只覆盖了图像的 4-6%。因此,随机初始化的模型可能表现极差,预期精度在 4% 到 6% 之间,用于检测帧中的感兴趣对象。您的配置文件中还有 90 个类。目前尚不清楚该模型是否可以访问正确的标签,但如果它还可以推断类别,我们预计初始准确度约为 0.06%。这实际上与您的起始模型的精度有关。

  2. 您正在对大小为 32 的小批量进行训练。从您的配置中,我不清楚该图的下轴是迭代还是时期。如果是前者,那么您的模型在整个训练期间只会看到 150 万个示例。对于这么难的问题,这还远远不够。事实上,COCO 只包含 328k 个独特的例子,所以模型只会看到它们中的每一个 5 次(对应于 5 个 epoch)。如果你已经完成了 500,000 个 epoch,那么这应该就足够了。

  3. 超参数可能没有设置好。我不是训练 CNN 的专家,但深度网络是出了名的挑剔。我很难阅读你的配置文件,但你的学习率在我看来是合理的。不过,随着时间的推移,它似乎也经历了指数衰减,我不清楚你想这样做,或者你用于衰减的时间表是否有意义。这可能值得回顾。