训练笔记 Fine tune my first semantic segmentation model using mxnet [2] tricks

Several Tricks

  • 1 用了n块GPU,在softmaxoutput的时候一定要注意:
    optimizer的参数设置,rescale_grad项要设置为1/n。原因是softmaxloss层在每块卡上分别进行normalize,所以在这里要除以卡的数量。
  • 2 batch_size不可以太小,不然训练不稳定。batch_size减小的话,对应的learning rate也应该设置小一些。它们是互相匹配的。比如batch_size为16的时候,lr设置的是0.0016。learning_rate一定要随着epoch增大而减小。
  • 3 wd不要太大了,这里设置的是0.0005,wd的作用是正则化,约束权值调整变化不要太大。
  • 4 作者在训练的时候使用了alexnet的训练策略,即weight和bias的learning rate不一致。
  • 5 softmax层可以设置ignore_label,不需要把不关注的label还当做一个类(比如背景类,比如不关心的其他类)。(e.g. cityscapes数据集中的为255的trainId)
  • 6 在ade20k_a1 model下进行fine tune,但是不需要固定前面层,linear层不需要单独设置lr_scale (lr_mult),当然这部分的params不要fit进去。不把这部分fit进去的方法是,把symbol中的名字改了,因为用.params为网络fit参数的时候也是靠layer的名字来做的。
  • 7 cityscapes的gtFine下面的label都是id,不是trainId,所以在提供的label的时候(我这里分的19类),要提供trainId而不是id,做数据预处理或者在dataiter的时候进行转换。
  • 8 对于parsing任务来说,batch_size越大对于训练效果越好(毕竟再大也不可能太多张图,所以尽量大就好),batch_size为16,iteration为1000,和batch_size为8,iteration为2000,虽然图片输入个数是一致的,但是后者效果更好,因为进行了更多轮训练;但是batch_size为16,iteration为2000的效果,是远远好于8,2000组合的。
  • 9 对于fully convolutional network来说,输入图片尺寸理论上可以是任意大小的。虽然在训练时crop出504×504(个人理解是为了增加data和为了提高训练效率),但是测试集完全可以输入2048*1024原图大小来生成parsing结果,效果没有差异。

你可能感兴趣的:(训练笔记 Fine tune my first semantic segmentation model using mxnet [2] tricks)