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。