caffe ssd训练脚本参数详解

ssd_pascal.py

# Divide the mini-batch to different GPUs.
batch_size = 32
accum_batch_size = 32
iter_size = accum_batch_size / batch_size
solver_mode = P.Solver.CPU
device_id = 0
batch_size_per_device = batch_size
if num_gpus > 0:
  batch_size_per_device = int(math.ceil(float(batch_size) / num_gpus))
  iter_size = int(math.ceil(float(accum_batch_size) / (batch_size_per_device * num_gpus)))
  solver_mode = P.Solver.GPU
  device_id = int(gpulist[0])

说明

  • batch_size:训练时每次进入网络的图片数
  • iter_size:训练时对进入网络的图片需要迭代的次数
  • accum_batch_size:batch_size和iter_size的乘积
  • test_batch_size : 测试时每次进入网络的图片数
  • test_iter_size : 测试时对进入网络的图片需要迭代的次数
  • test_interval : 训练迭代多少次后会进行一次测试

在运算资源有限的情况下,可以通过改变batch_size和iter_size降低计算资源。要注意的一点是在使用多张显卡跑网络的时候,每张显卡都是并行运行的,还是一个batch_size的图片输入,所以并不会使缓存降下来,但它在理论上是可以将运行的时间成显卡数量的倍数缩短。

例如

在ssd_pascal.py中,每次进入网络的图片为32张,训练时需要对这32张图片迭代1次。然而我们在实际的操作中用一张NV TITAN会”out of memory”,所以我们将batch_size改为4,iter_size改成4,相当于每次进入网络4张图片,训练时需要对这4张图片迭代4次,然后对迭代的结果取平均值,理论上来说就相当于batch_size为16,所以在原来的配置中跑完这个网络总共需要迭代120000次,而为了达到这个效果我们需要增加到240000次。虽说这样理论上可以达到同样的效果,但是实际中还是会有细小的差别。

猜你喜欢

转载自blog.csdn.net/liu_xiao_cheng/article/details/82454320