BiSeNet训练笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rainforestgreen/article/details/85047054

BiSeNet训练总结笔记


针对BiSeNet语义分割模型,利用开源的pytorch项目,进行了训练尝试。主要是利用不同的head network(res18和res101),结合不同的优化方法(rmsprop和sgd),在不同batch下(1,2,4,8)进行Camvid数据集的训练。
训练结束以后,利用如下图片和真实标签进行测试和对比:

学习率poly更新策略

其中初始学习率为0.01,采用poly_lr_scheduler策略,按epoch不断下降。

(图中的iteration应该为epoch)

Res18

rmsprop优化器

 batch1

batch 4


sgd优化器

batch4

batch8

res101

rms

batch1

batch4

sgd

batch1

batch2

batch4

学习率step更新策略

其中初始学习率为0.01,采用step策略,每100个epoch下降10倍。

Res18

rmsprop优化器

 batch1

batch4

sgd优化器

batch8

res101

rms

batch1

batch4

sgd

batch4

总结

当学习率使用poly方式更新时:

    1. rmsprop优化器,训练时accuracy上升很快,但是训练过程中accuracy波动比较大。(1)相比于稍微简单的res18,复杂的模型res101训练过程中更容易出现训练过程的震荡。比如在batch1训练时,甚至出现了accuracy的drop。(2)另外,增大batch训练,accuracy前期震荡更加剧烈,但训练后期震荡会小一些。
    2.  sgd优化器,训练时loss和accuracy变化更加平稳,最终的accuracy也比较高。并且batch越大,训练的效果相应会更好。
    3.  从模型预测的效果来看,rmsprop优化器训练的效果更加丰富,但比较杂乱。sgd优化器训练的效果更加平滑,但细节区域不够精细。

当学习率使用step方式更新时:

    1. 基本的训练效果和poly方法差不多,但是对于复杂模型res101的rms优化器的训练,相比poly方法震荡情况有所好转。

    2.从总体的训练accuracy效果来看,相比于poly方法,最终的精度会有一点点下降。不过也有可能是学习率step的epoch次数(100,200,300)不是很好导致的。

另外,可以看出训练过程中并不是batch越大越好。可以考虑先用大点的batch训练模型整体的分割表现和精度,再用小batch提升细节的表现。

后续工作

    1. 根据上面的对比分析,可以考虑先进行rmsprop优化器训练,再利用sgd优化器进行fine-tuning,看是否可以实现前期accuracy快速上升以及细节分割能力的训练,并在中后期进一步将accuracy平稳提升,改善细节区域的分类错误,提高模型最终精度与效果。

    2.另一个思路是,采用sgd优化器先用大batch进行整体效果的训练,等模型效果基本稳定以后,再用小batch采用rms/sgd方法进行细节精修/finefine-tuning。

猜你喜欢

转载自blog.csdn.net/rainforestgreen/article/details/85047054