Detectron2 中每次迭代的图像数量

Saw*_*aha 3 iteration object-detection detectron

我是使用检测器 2 的新手,只是在学习它。这可能是一个菜鸟问题,但我真的需要答案。我发现与存储库中的时代数无关。

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

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

Tob*_*eis 8

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

single_iteration = cfg.SOLVER.NUM_GPUS * cfg.SOLVER.IMS_PER_BATCH
Run Code Online (Sandbox Code Playgroud)

因此,如果您现在想知道一个时期需要多少次迭代(所有图像都看过一次),该数字将是

iterations_for_one_epoch = TOTAL_NUM_IMAGES / single_iteration
Run Code Online (Sandbox Code Playgroud)

因此,如果您想训练 20 个 epoch,则可以按如下方式设置 MAX_ITER:

cfg.SOLVER.MAX_ITER = iterations_for_one_epoch * 20
Run Code Online (Sandbox Code Playgroud)

资料来源:

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

MaskRCNN-benchmark Github问题以类似的方式解释它

  • 我认为这个方程是错误的,因为当我设置 IMS_PER_BATCH=2 和 NUM_GPUS =8 时,它的 shell 终端显示一条错误消息,指出 2/8 不可整除。#################################################### ###### single_iteration = cfg.SOLVER.NUM_GPUS * cfg.SOLVER.IMS_PER_BATCH ################################ ######################### (3认同)
  • 同意@yuhang.tao,cfg.SOLVER.IMS_PER_BATCH是每次迭代的训练图像数量。如果您在多个 GPU 上运行 detectorron2,则会相应地计算每个 GPU 的图像数量。即 SOLVER.IMS_PER_BATCH/GPU 数量。请参阅此处的官方定义:https://github.com/facebookresearch/detectron2/blob/9725c7f2150c985e601301789e6568603c8ca1f6/detectron2/config/defaults.py#L556 (2认同)

Cog*_*bot 7

在检测器2中,epochMAX_ITER * BATCH_SIZE / TOTAL_NUM_IMAGES