GiantPandaCV | 浅谈分辨率对模型影响以及训练方法

本文来源公众号“GiantPandaCV”,仅用于学术分享,侵权删,干货满满。

原文链接:浅谈分辨率对模型影响以及训练方法

一、前言

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

二、基础配置

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

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

模型:ResNet50

数据集:ImageNet1k-128w

数据增强:RandomResizeCrop+RandomFlip

优化器:SGD+momentum

学习率衰减:cosineLr

混合精度: yes

三、实验

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

3.1 Pretrain

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

3.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的情况下,想要按原始的训练配置来提升精度,在更高的分辨率下收益不会有太大提升。

3.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的分辨率下,精度达到了最高。

3.2 Finetune

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

3.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,会有较大幅度的提升。

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

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

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一天挣几十元的网上兼职副业有哪些?推荐几个适合普通人做的兼职副业,有线上的也有线下的,建议收藏哦~

一天几十的兼职,不是几百的,这个会更容易实现。 相比网络上充斥着各种五花八门的兼职,教你轻松月入过万,一年几十万的...... 对于绝大多数没有一技之长的普通人,网络小白的话刚开始会很难的,慢慢来就可以…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branches: [[nam…

自然语言处理(NLP)—— 置信度(Confidence)

1. 置信度(Confidence)的概念 置信度(Confidence)在机器学习和统计中通常指一个模型对其做出的预测是正确的确信程度。在分类任务中,置信度通常由模型赋予特定类别的概率值来表示。例如,在文本分类或实体识…

阿里云短信服务使用(Java)

文章目录 一、流程1.打开短信服务2.提交材料申请资质3.资质通过后,申请短信签名并设置短信模板4.右上角设置AccessKey5.充值 二、参考官方文档调用API1.引入maven依赖2.调用API补充 一、流程 1.打开短信服务 登陆注册阿里云 搜索“短信服务”,点击“免…

WHAT - 容器化系列(一)

这里写目录标题 一、什么是容器与虚拟机1.1 什么是容器1.2 容器的特点1.3 容器和虚拟机的区别虚拟机(VM):基于硬件的资源隔离技术容器:基于操作系统的资源隔离技术对比总结应用场景 二、容器的实现原理1. Namespace(命…

TVS管的功率计算与选型

“选择多大功率的TVS管才算合适?”。关于TVS功率的选择,不晓得之前你考虑过没。反正我这边是感觉网上关于TVS管参数、选型等文章比较多,但关于TVS管功率计算及功率选型的文章比较少。但往往在这些点上更能体现面试者的功力。 研究过TVS规格书…

go语言linux安装

下载:https://go.dev/dl/ 命令行使用 wget https://dl.google.com/go/go1.19.3.linux-amd64.tar.gz解压下载的压缩包,linux建议放在/opt目录下 我放在/home/ihan/go_sdk下 sudo tar -C /home/ihan/go_sdk -xzf go1.19.3.linux-amd64.tar.gz 这里的参数…

【LeetCode热题100总结】239. 滑动窗口最大值

题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,7]…

Vue3-Ref Reactive toRef toRefs对比学习、标签ref与组件ref

响应式数据: Ref 作用:定义响应式变量。 语法:let xxx ref(初始值)(里面可以是任何规定内类型、数组等)。 返回值:一个RefImpl的实例对象,简称ref对象或ref,ref对象的value属性是响应式的。 注意点&am…

python安装pystan教程

简介 PyStan是Stan编程语言的Python接口,Stan是一种用于统计建模和数据分析的概率编程语言。PyStan使用户能够在Python环境中定义、编译和采样Stan模型。 安装步骤 首先,需要先安装 Cython pip install Cython -i https://mirrors.aliyun.com/pypi/sim…

三十三篇: 解锁决策之门:专家系统深度探索与未来展望

解锁决策之门:专家系统深度探索与未来展望 在今天这个日益复杂的世界中,我们对决策的速度和质量提出了更高的要求。在众多解决方案中,专家系统作为人工智能的一大分支,扮演着不可或缺的角色。它不仅是技术创新的产物,…

React常见的一些坑

文章目录 两个基础知识1. react的更新问题, react更新会重新执行react函数组件方法本身,并且子组件也会一起更新2. useCallback和useMemo滥用useCallback和useMemo要解决什么3. react的state有个经典的闭包,导致拿不到最新数据的问题.常见于useEffect, useMemo, useCallback4. …

【激光雕刻机上位机的成品软件】核心功能 - 参考wecreat

Software | WeCreat MakeIt! https://wecreat.com/pages/software 体验软件如上,自行下载体验。 价格5W,本人为 wecreat 创立之初上位机软件开发的核心员工,详细内容私信我。 由于该公司快3个月未给我竞业补偿了,对我不仁那我…

Anaconda创建python环境默认C盘,如何修改路径

文章目录 前言解决方案1.找到Anaconda的根目录2. 找到根目录文件夹,右键-属性-安全 测试-重新创建新的python环境 前言 使用 Anaconda创建python环境,默认在C盘。 如何修改到别的路径呢? base环境 是安装 Anaconda是安装的默认环境&#x…

设计模式——结构型模式——责任链模式

责任链模式简介 责任链模式,又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求处理者通过前一对象记住其下一个对象的引用而成一条链;当有请求发生时,可将请求沿着这条链传递,传递过…

python dlib 面部特征点检测

运行环境macos m2芯片 Python 3.11.7,python3.9都能通过,windows系统应该也是一样的效果 import dlib import cv2 import matplotlib.pyplot as plt# Load the image image_path path_to_your_image.jpg # Replace with the path to your image image…

QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数

在窗体里放置一个单行文本编辑控件(QLineEdit)、一个标签控件(QLabel)和一个文本浏览控件(QTextBrowser),在单行文 本编辑控件里的文本被编辑时,标签控件和文本浏览控件都会同步显示…

网安速成之选择题(详细解析版)

网安速成之选择题 单选多选 单选 密码学的目的是( C )。 A. 研究数据压缩 B. 研究数据解密 C. 研究数据保密 D. 研究漏洞扫描 密码学的目的是研究数据加密,保证数据的机密性 数据机密性安全服务的基础是( D )。 A. 数…

C++ 的 Tag Dispatching(标签派发) 惯用法

目录 1.概述 2.标准库中的例子 3.使用自己的 Tag Dispatching 3.1.使用 type traits 技术 3.2.使用 Type_2_Type 技术 4.Tag Dispatching的使用场景 5.总结 1.概述 一般重载函数的设计是根据不同的参数决定具体做什么事情,编译器会根据参数匹配的原则确定正确…

面试题 - Java基础个人总结

1、Java语言特点/优势 1.1、什么是面向对象编程 2、Java的八种基本数据类型 2.1、为什么要有基本数据类型的封装类 2.2、Java自动装箱和拆箱 笔试题-1 笔试题-2 2.3、为什么浮点数运行时,会有丢失精度的风险? 2.4、补充知识: 3、重载…