Detectron2中每次迭代有多少张图片

问题描述

我刚开始使用detectron2,只是学习它。这可能是一个菜鸟问题,但我确实需要答案。我发现与存储库中的纪元数没有任何关系。

我们知道epoch表示将所有数据单次传递通过模型,而batch则表示整个数据集的特定子集,该子集具有通过梯度下降影响损失的能力。 在这个模型中,(Detectron2)我们有一个叫做迭代的东西。此迭代是什么意思?这是否意味着要通过该模式或一个时期(这不应该考虑每次迭代的时间)

我的问题是,我如何知道至少将一次将所有图像传递给模型的最小迭代次数

解决方法

在detectron2中,epochMAX_ITER * BATCH_SIZE / TOTAL_NUM_IMAGES

,

我认为目前接受的答案不正确

single_iteration = cfg.SOLVER.NUM_GPUS * cfg.SOLVER.IMS_PER_BATCH

因此,如果您现在想知道一个 epoch 需要多少次迭代(所有图像都看过一次),那么这个数字就是

iterations_for_one_epoch = TOTAL_NUM_IMAGES / single_iteration

所以如果你想训练 20 个 epochs,你可以设置 MAX_ITER 如下:

cfg.SOLVER.MAX_ITER = iterations_for_one_epoch * 20

来源:

Detectron2 Docs(一次迭代是一次 run_step 调用,从加载器中提取一个“数据点” data = next(self._data_loader_iter))

MaskRCNN-benchmark Github issue 以类似的方式解释

,

根据this源代码,在Detectron2术语中的迭代等于epoch
您应该通过选择最佳损耗率/火车时间比率,通过实验找到最佳MAX_ITER值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...