(附代码)浅谈分辨率对模型影响以及训练方法

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

编者荐语

 

最近几个人在讨论模型训练的时候,提到了一个尺度对于模型的影响以及训练方法的收益,因此花了点时间,简单做了几组实验,整理一下结论。

一、前言

最近几个人在讨论模型训练的时候,提到了一个尺度对于模型的影响以及训练方法的收益,因此花了点时间,简单做了几组实验,整理一下结论。

一、基础配置

本文的实验均是采用固定的配置结构以及同一套code实现,每次实验只改变分辨率等变量因素,保证实验合理性。

代码实现可以参考我的这个git repo https://github.com/FlyEgle/imageclassification

模型:ResNet50

数据集:ImageNet1k-128w

数据增强:RandomResizeCrop+RandomFlip

优化器:SGD+momentum

学习率

学习率衰减:cosineLr

混合精度: yes

二、实验

本次实验分成Pretrain和Finetune两大部分,实验过程和结果如下:

2.1 Pretrain

pretrain这里分成两组实验来做,第一组无任何pretrain,第二组用不同的方法load pretrain。

2.1.1 Training from Sketch

第一组实验,总计4次对比实验,分别实验在不同的分辨率的情况下R50的表现,训练周期均为90个epoch, warmup 5个epoch,训练配置保持一致,结果如下:

模型分辨率batchsizeacc@top1
R50224102476.548%
R50320102477.698%
R50416102478.026%
R50448102477.826%

可以看到,随着分辨率的增加,模型精度随之上升,但是在448分辨率的情况下,训练的精度反而没有416高,说明不加载pretrain的情况下,想要按原始的训练配置来提升精度,在更高的分辨率下收益不会有太大提升。

2.1.2 Training from Progressive

第二组实验,总计3次对比实验,分别是更大的分辨率先load小分辨率的权重后在按相同配置进行训练,由于batchsize在1k,所以我没有舍弃warmup,3.2的配置和3.1的配置是保持一致的,结果如下:

模型分辨率batchsizeacc@top1
R50224->320102478.052%
R50320->416102478.678%
R50416->448102478.542%

可以看到相比第一组实验,相同分辨率下的精度均有提升,而且在448的时候,没有显著的下降。

为了验证load精度稍微差一点的pretrain是否有提升,做了如下的实验,不同的分辨率训练,但是固定load的pretrain都是224的权重,结果如下:

模型分辨率batchsizeacc@top1
R50224->320102478.052%
R50224->416102478.572%
R50224->448102478.722%

很惊奇的发现,在448的分辨率下,精度达到了最高。

2.2 Finetune

这里设计了两大组实验,分别考虑了学习率缩放和冻结block。

2.2.1 Finetune with LR

前面的实验因为都是做pretrain和from sketch,所以固定了所有的配置,包括LR。这里对LR缩放做实验,探究finetune对模型精度的影响。缩放原始LR为0.1和0.01倍,去掉warmup,只训练40个epoch,结果如下:

模型分辨率batchsizeLRacc@top1
R50224->4481024LR*0.178.924%
R50224->4481024LR*0.0178.736%

可以看到,不固定任何参数的时候,缩放LR,finetune相比pretrain,会有较大幅度的提升。

2.2.2 Finetune with Freeze layer

上一组实验得到了LR*0.1的时候效果最好,但是没有冻结模型的任何参数,这组实验做一下上面实验的补充,R50总计有4个layer,以及conv stem和FC。FC是不会被冻结的,不然训练个寂寞了,所以调整的就是不同的layer的冻结,结果如下:

模型分辨率batchsizeLRlayeracc@top1
R50224->4481024LR*0.1conv stem+layer178.796%
R50224->4481024LR*0.01conv stem+layer1-278.822%
R50224->4481024LR*0.01conv stem+layer1-378.05%
R50224->4481024LR*0.01conv stem+layer1-474.432%

可以看到,当冻结前两个layer的时候,模型的性能还ok,但是当开始冻结第三个layer的时候有明显的下降,全部冻结下降的更明显。

三、结论

  • 如果同域数据,不希望提升模型的参数量的情况下,想要提升精度,可以考虑pretrain的方法。Finetune的方法虽然精度可以上来,但是bad case有时候会跟着权重继承过来。

  • 数据量多,时间不够的情况下可以适当freeze前面几层layer进行finetune,浅层特征一般是共性特征,影响精度的还是底层的抽象特征。

  • imagnet的数据集是属于目标性的,就是物体很明确的在图像中表示出来,如果你的任务是理解性质的或者需要隐表征的,那么最好从头训练(经验之谈)

以上实验结论仅供参考,不能保证不同数据集结论一致,欢迎交流讨论。

 
 

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

48b1538e24eac84bc45a67713bab5f80.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值