提高CV模型训练性能的 9 个技巧

导读

本文 主要想分享一些可能有助于提高计算机视觉任务模型训练速度和准确性的一般技巧或建议,这些建议是通过课程、阅读顶级文章或论文学习所得来的。

1. 分辨率

  • 从较小的分辨率开始:

前两个技巧侧重于实现更快的模型——您尝试的想法越多,获得更好结果的机会就越大。为了更快地迭代,我们需要从“小”着手以减少我们的训练时间:

Ayush 创建了一个指向所有共享数据集的数据集线程。从较小的数据集尺寸或分辨率开始可以让您更快地迭代。

如果您使用较小的 GPU 内存,那么可以通过增加 batch_size 加快迭代速度。一旦您对自己的想法充满信心并看到了效果提升,您就可以扩展到更大的图像尺寸或分辨率。

2. 数据集

  • 从数据子集开始:

您应该从少量的数据集或示例开始,并在那里验证您的训练模型。

例如:训练 10 个 classes,检查它是否提高了 CV -> 提交

扩展到 20 个classes,检查 CV,然后再次提交

如果一切顺利,就在完整数据集上进行训练。

3. 精度

  • 使用 FP16 或半精度训练:

NVIDIA GPU 具有 Tensor-Cores,在使用“半精度”张量时可提供巨大的加速。这里写了一篇更详细的博客,尝试使用 fp_16 训练来观察任何 GPU(和 TPU!)上的加速情况。

4. TPU

  • 使用 TPU

Kaggle 每周提供 20 小时的 TPUTPU 有 8 个核心,这允许您的 batch_sizes 是 8 的倍数。这允许更快的训练和更快的迭代。

注意:最近发现了 Hugging Face Accelerate,它声称可以在 TPU 上使用 PyTorch 为您提供简单的工作流程。

5. 渐进式

  • 渐进式调整大小:

IIRCEfficientnet 论文中被介绍,也在 fastai 课程中教授。

Chris Deotte 发表了一篇关于 CNN 输入图像大小的文章。这个博客教你渐进调整大小在 fastai 中是如何工作的。长话短说:

  • 训练模型尺寸:小
  • 保存权重并在更大的图像尺寸上重新训练模型
  • 再次保存权重并重新训练最终图像大小

这个过程将会获得更快的收敛和更好的性能。

6. Depthwise Convs

  • 使用 Depthwise Convs 而不是 Regular Convs

这个概念首先是在 MobileNet 论文中引入的,最近与 ConvNext 架构相关的讨论中它再次出现。 Depthwise Convolutions 具有更少的 filters,因此训练速度更快。

请参阅此处以获取有关使其在 PyTorch 中运行的一些提示

7. 学习率

  • 在模型训练期间更改 learning_rate

慢的 lr 需要太长的时间,而快的 lr 可能无法帮助你的模型收敛,使用这个逻辑,我们应该使用动态学习率。

我建议使用 fastai 及其 fine_tune()fit_one_cycle() 函数。有关更多详细信息,请参见此处。

8. 热身

  • 从论文 Bag of Tricks中,使用 LR 预热是亮点之一:

当你开始训练一个模型时,它具有更多的“随机性”,因为它刚刚开始学习特征,因此首先从较小的 learning_rate 开始允许它选择细节,然后你可以在“预热”后将其增加到预期的schedule

9. 图像增强

NNs 受益于更多数据。图像中的微小变化确实可以帮助模型提高对图像内部特征的理解。使用正确的图像增强可以真正帮助您的模型。此外,在训练模型时可视化结果,以确保它们了解的是特征而不是背景!

本文转载于网络 如有侵权请联系删除

相关文章

  • Android图片等比例缩放和填充屏幕效果

    本文实例为大家分享了Android图片等比例缩放和填充屏幕的具体代码,供大家参考,具体内容如下第一种方法:在ImageView的t同事设置两个属性android:adjustViewBounds="true" android:scaleType="fitXY复制第二中方法:用IamgeView的android:scaleType设置属性的时候填充屏幕出现的各种问题/** *将图片等比例缩放setAdjustViewBoundssetMaxWidthsetMaxWidth必须同时设置才有效 * *@paramcontext *@paramview *父容器 *@paramimage *图片控件 *@paramsource *图片资源 */ publicstaticvoidsetImageViewMathParent(Activitycontext,LinearLayoutview, ImageViewimage,intsource){ Bitmapbitmap=BitmapFactory.decodeResource(context.getResources

  • 爬虫之正则表达式

    1.学习爬虫,为什么必须会正则表达式?   我们爬取一些网页具体内容时,只需要这个网页某个标签的一部分内容就足够,或者是这个标签的某个属性的值时,用普通的xpath或者css.selector是不能完成的,此时我们就需用到正则表达式去匹配获取。 2.正则表达式官方简介?     正则表达式,又称规则表达式。(在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。1''' 2正则表达式 3''' 4 5importre 6 7line='jijianXksA123' 8 9#^a表示匹配以a开头的字符串(只匹配一次) 10#.表示该字符可为任意字符(只匹配一次) 11#*表示前面的字符可以出现任意次(0次或多次)(多次匹配) 12reg_str01='^j.*'#表示以j开头的字符串 13#re.match函数 14#第一个参数是匹配的格式 15#第二参数是要匹配的字符串 16#返回值为:匹配成功,返回matc

  • shell中的函数(function)、数组、告警系统分析

    20.16-20.17shell中的函数函数就是把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时直接调用这个小单元的名字即可。格式functionf_name(){ commond }复制说明:单词“function”可以省略,直接写函数的名字;函数必须放在脚本的最前面;调用函数的方法:直接写函数名。  eg:eg1:[root@localhostsbin]#vimfunc.sh #!/bin/bash functioninp(){ echo"Thefirstparameteris$1" echo"Thesecondparameteris$2" echo"Thethirdparameteris$3" echo"Thenumberofparameteris$#" echo"Thescript'snameis$0" } #定义一个函数 inpabcasdsdg #引用该函数 [root@localhostsbin]#shfunc.sh Thefirstparam

  • 从 http://www.batteries.com 搜索引擎优化效果谈起

    从http://www.batteries.com搜索引擎优化效果谈起Batteries.com网站优化的经验和教训 是胡菜菜胡宝介最新的一篇文章,估计是这是他们的一个外国客户。国内做搜索引擎优化的公司能得到国际客户订单不容易。先祝贺他们。Zunch已经进入中国了,ses最近也大力作宣传,希望这个行业能进入良性发展。         为了学习他们的优化案例,我对batteries.com的优化结果作了一些分析,数据如下:1、首先是总体的PR值分布抽样调查:                 PR=2    PR=3    PR=4    PR=5 网页数:          1           1          31         40     可以看出pr值集中在4和5之间,至于pr的分布式不是应该像一个正态分布还正在研究中。2、BATTERIES.COM的有效关键字大约有130个。其中含battery的51个,含batteries的52个。3、搜索引擎优化,最后的结果看排名,以下是google排名前3,10,20,30条的统计结果: 前3 条的统计结果:'http

  • Picasso(毕加索)加载圆形图片、圆角图片

    Picasso的使用详解导入依赖compile'com.squareup.picasso:picasso:2.5.2'复制代码使用Picasso.with(Activity.this) .load(URL) .transform(newCircleCornerForm()) .error(R.drawable.head) .into(ImageView);复制加载圆形图片importandroid.graphics.Bitmap; importandroid.graphics.BitmapShader; importandroid.graphics.Canvas; importandroid.graphics.Paint; importcom.squareup.picasso.Transformation; /** *Createdlibinon2016/4/25. *圆形图片 */ publicclassCircleTransformimplementsTransformation{ @Override publicBitmaptransform(Bitm

  • 小白请上车 | Python抓取花瓣网高清美图

    一:前言嘀嘀嘀,上车请刷卡。昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中。这个妹子主页http://huaban.com/boards/favorite/beauty是动态加载的,如果想获取更多内容可以模拟下拉,这样就可以更多的图片资源。这种之前爬虫中也做过,但是因为网速不够快所以我就抓了19个栏目,一共500多张美图,也已经很满意了。先看看效果:Paste_Image.pngPaste_Image.png二:运行环境IDE:PycharmPython3.6lxml3.7.2Selenium3.4.0requests2.12.4三:实例分析1.这次爬虫我开始做的思路是:进入这个网页http://huaban.com/boards/favorite/beauty然后来获取所有的图片栏目对应网址,然后进入每一个网页中去获取全部图片。(如下图所示)Paste_Image.pngPaste_Image.png2.但是爬取获取的图片分辨率是236x354,图片质量不够高,但

  • ImageAI:专为没有机器学习背景的程序员设计,让你十行代码搞定对象检测

    AiTechYun编辑:yxy计算机视觉是AI的一个重要领域。计算机视觉是计算机和软件系统的科学,能够识别和理解图像和场景。计算机视觉还包括图像识别,对象检测,图像生成,图像超分辨率等多个方向。由于实际使用案例数量众多,对象检测可能是计算机视觉最深刻的一个方向。在本教程中,我将简要介绍现代对象检测的概念,软件开发人员面临的挑战,我的团队提供的解决方案以及用于执行高性能对象检测的代码教程。对象检测是指计算机和软件系统在图像或场景中定位对象并识别每个对象的能力。它已广泛用于人脸检测,车辆检测,行人计数,网络图像,安全系统和无人驾驶汽车。在实践的许多领域中,也有很多可以使用对象检测的方法。像其他任何计算机技术一样,计算机程序员和软件开发人员的努力肯定会带来创造性的、令人惊叹的对象检测应用。在应用程序和系统中使用现代对象检测方法,以及基于这些方法构建新应用程序并不是一项简单的任务。对象检测的早期实现包括使用经典算法,比如,现阶段流行计算机视觉库OpenCV中支持的算法。然而,这些经典算法工作在不同条件下可能无法达到的足够好性能。2012年深度学习的突破,带来了R-CNN,Fast-RCNN,F

  • Conda常用命令

    虚拟环境 查看已经安装的虚拟环境 condaenvlist condainfo-e 复制 创建Python虚拟环境 condacreate-nYOUR_ENV_NAMEpython=x.x #-n指定虚拟环境名字; 复制 激活或切换虚拟环境 #激活 condaactivateYOUR_ENV_NAME #取消激活 condadeactivate 复制 删除虚拟环境 condaremove-nYOUR_ENV_NAME--all 复制 删除虚拟环境中的某个包 condaremove--name$your_env_name$package_name 复制 切换镜像 清华镜像 condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 复制 中科大镜像 condaconfig--addchannels

  • 与答辩有关资料

        倒排索引  传送门   倒排索引(InvertedIndex)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。    关键字提取算法TF-IDF  传送门   TF,是TermFrequency的缩写,就是某个关键字出现的频率,具体来讲,就是词库中的某个词在当前文章中出现的频率。那么我们可以写出它的计算公式:        TF(i,j):关键词j在文档i中的出现频率。n(i,j):关键词j在文档i中出现的次数。   比如,一篇文章一共100个词汇,其中“机器学习”一共出现10次,那么他的TF就是10/100=0.1。这么看来好像仅仅是一个TF就能用来评估一个关键词的重要性(出现频率越高就越重要),其实不然,单纯使用TF来评估关键词的重要性忽略了常用词的干扰。常用词就是指那些文章中大量用到的,但是不能反映文章性质的那种词,比如:因为、所以、因此等等的连词,在英文文章里就体现为and、the、of等等的词。这些词往往拥有较高的TF,所以仅仅使用TF来考察一个词的关键性,

  • 微信小程序:text元素中加入空格

    在text标签中加入 decode="{{true}}" ,然后字啊需要加入空格的地方使用 &nbsp; 即可加入一个空格,可以连续用多个例如: 1<textdecode="{{true}}">此处加入&nbsp;&nbsp;空格</text>复制  

  • 爬虫之requests模块基础

    一、request模块介绍 1.什么是request模块 -python中原生的基于网络请求的模块,模拟浏览器发起请求。复制 2.为什么使用request模块 -urllib需要手动处理url编码,quote()。 -urllib需要手动处理post请求参数。 -cookie的代理操作比较繁琐 1.cookie -创建一个cookiejar对象 -创建一个handler对象 -创建一个openner 2.代理 -创建handler对象,代理ip和端口分装到该对象 -创建openner对象复制 3.request如何被使用 -安装:pipinstallrequests -使用流程: 1.指定URL 2.使用request模块发起请求 3.获取响应数据 4.进行持久化储存复制 3.通过5个基于request模块的爬虫项目对该模块进行系统学习和巩固 -get请求 -post请求 -基于ajax的get请求 -基于ajax的post请求 -综合项目复制 二、项目实战 3.基于request模块发起一个get请求 需求:爬取搜狗首页的页面数据 importrequests #指定url ur

  • 回忆&#183;贰零贰壹

    回忆·贰零贰壹 序 2021在不经意间就溜走了,退役之后一直有点遗憾当时在信奥的时候只留下了一堆的题解和学习笔记,没有写什么游记,所以打算在2021结束的时候写点东西,留住仅存的一点记忆。 一月 刺骨的寒风呼啸着从耳边吹过,我默默地站在明月初升的操场上,我是谁,我在哪? 由于一时的大意,我在NOIp的考场上犯了一个极大的失误,导致我以倒数的成绩留了下来,准备参加省队选拔,那一段时间真的过得挺痛苦的,一边是沉重的知识,一边是省赛失误的痛苦,还记得我当时每天早上6.50去吃饭,因为那时去就不用排队了,可以直接买,然后用五分钟吃完跑回机房考试,FFT,NTT,平衡树,反演等知识大部分都是在那个时间熟练掌握的,当时考试的成绩都还不错,以至于我对即将到来的WC充满了希望,当时除了奥赛生和高三的同学,学校里几乎已经没人了,我想,努力了这么半天,总该有点成效了吧。 怀揣着自信与紧张,我踏入了WC的考场,省赛的失误被我牢牢记住,这一次,我没有再出现任何失误,可是,题目我真的不会,即使拼尽全力绞尽脑汁,也只是获得了一个大众分,最终以一个铜牌收尾。 不过当时考完之后我们一群人聚在一起吃泡面的场景还是挺不戳

  • 福建十三水房卡麻将源码下载搭建教程

    客户端源码是基于cocos2d版本开发的,代码完整可编译。编译环境:windows7(64位)+cocos3.13.1+ndk13+ant1.9.7+python2.7.5+android-sdk(20)+jdk8软件配置:1-ant配置:将ant解压至D盘,设置环境变量,在用户变量添加ANT_ROOT=ant安装目录下的bin目录(如D:\apache-ant-1.9.7\bin)2-python配置:双击python安装文件,安装成功后,设置环境变量在系统变量path变量头部追加python根目录(如D:\python27;)3-ndk配置:ndk解压后,配置环境变量在用户变量添加NDK_ROOT=ndk根目录(如D:\ndkr13b)4-androidsdk配置:adt-bundle-windows-x86_64-20140624解压后,目录下的sdk就是androidsdk.在用户变量添加ANDROID_SDK_ROOT=sdk根目录(如d:/adt-bundle-windows-x86_64-20140624/sdk)5-如果需要打开eclipse的话,还需要安装jdk,jd

  • 解决url中文乱码问题

    修改tomcat/conf/server.xml目录下Connector节点,添加URIEncoding="UTF-8"useBodyEncodingForURI="true" :

  • Windows系统安装MySQL5.5.21图解教程

    大家都知道MySQL是一款中、小型关系型数据库管理系统,很具有实用性,对于我们学习很多技术都有帮助 数据库是5.5.21这个版本的。以下是安装步骤: 1、首先单击MySQL5.5.21的安装文件,出现该数据库的安装向导界面,单击“next”继续安装,如图所示: 2、在打开的窗口中,选择接受安装协议,单击“next”继续安装,如图所示: 3、在出现选择安装类型的窗口中,有“typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,我们选择“Custom”,因为通过自定义可以更加的让我们去熟悉它的安装过程,单击“next”继续安装,如图所示:   4、在出现自定义安装界面中选择mysql数据库的安装路径,这里我设置的是“d:\ProgramFile\MySQL”,单击“next”继续安装,如图所示: 5、接下来进入到准备安装的界面,首先确认一下先前的设置,如果有误,按“back”返回,没有错误,单击“Install”按钮继续安装,如图所示: 6、单击“Install”按钮之后出现如下正在安装的界面,经过很少的时间,MySQL数据库安装

  • Unity-FairyGUI组件分类和获取使用

    FairyGUI官网:http://www.fairygui.com/ UnitySDK:http://www.fairygui.com/product/#Unity-SDK UnitySDK(GitHub):https://github.com/fairygui/FairyGUI-unity FairyGUI视频教程(泰课在线):http://www.taikr.com/my/course/446 组件分类和获取使用: 1、顶级组件: 睡觉了! 小时候我把老婆种到地下,长大了我能收获一大堆老婆! 我是威少,我是一名Unity游戏的主程,我为自己带盐,希望此文能给您一点点微不足道的帮助,祝你成功!

  • 值得思考的几句话,放在这看看

    1)很多时候,一去比较,你就输了 2)在情绪浮沉不定的时候,别人的故事里总能看到自己的悲凉。你发现流弊的人牛到你怀疑自己选错了副本,倒霉的人丧到你隔着屏幕都想伸出手拍拍他耷拉的肩头。 3)创业是自己的,工作是自己的,态度也是自己的。即便是同个团队同时站在道路尽头,总有一部分骂骂桑桑、有一部分祥林嫂附体、有一部分宛如一朝被蛇咬,也总有一部分,掸掸鞋上的灰,让它光洁如新,继续向前走。 对于管理者而言,一定要清楚每个岗位的主要职责,想让一个人承担大部分工作成为“全才”,最后不过是庸才而已。共勉!

  • TypeScript 高级类型

    一、高级类型 class 类型兼容性 交叉类型 泛型和keyof 索引签名类型和索引查询类型 映射类型 二、class 构造函数给变量赋值 extends继承 implement实现接口 public公开,所有可见,默认,可以省略 protected:仅仅自己和子类可用 private:私有的,只有自己可用 //感叹号表示虽然没有初始化,但一定会有值 classPerson{ name!:string gender='男' } letp=newPerson() p.name='小乔' p.gender='女' console.log(p) classPerson{ name:string gender:string age:number constructor(name:string,gender:string,age:number){ this.name=name this.age=age this.gender=gender } setName:(name:string)=>void=(name)=>{ this.name=name } setAge(age

  • DOM事件

    事件流事件:是文档或浏览器窗口中发生的特定的交互瞬间。JavaScript和HTML之间的交互都是由事件来实现。动作都是由事件触发的。事件流:描述的是从页面中接受事件的顺序。IE的事件流——事件冒泡流。Netscape网景——事件捕获流。事件冒泡事件冒泡:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接受,然后逐级向上传播到最不具体的那个节点(文档)。事件捕获事件捕获:不太具体的节点应该更早接受到事件,而最具体的节点最后接受到事件。事件处理程序HTML事件处理程序直接写在HTML中的事件,比如直接在button中加上onclick="alert('hello')",或者onclick="x()",在<body>标签中写函数x()。缺点:HTML和JS代码紧密地耦合在一起。修改起来非常麻烦。DOM0级事件处理程序较传统的方式:把一个函数赋值给一个事件的处理程序属性。把对象取出来,让事件以对象属性的形式出现,去给它添加这样的事件,可以添加多个事件。varbtn2=codument.getElementById('btn2');,再调用btn2.DOM2级事件处理程序

  • 2018-2019-2 20165336《网络对抗技术》Exp0 Kali安装 Week1

    2018-2019-220165336《网络对抗技术》Exp0Kali安装Week1 一.选择官网kalilinux系统的版本 二.配置虚拟机 根据安装教程(https://blog.csdn.net/u012318074/article/details/71601382)配置虚拟机与kali系统 我选的是workstation.12.X 磁盘大小我只分配了20G 三.安装kalilinux系统并使虚拟机连上网络 四.安装增强功能 五.安装共享文件夹 六.修改软件源 七.安装搜狗输入法 遇到的问题 安装kalilinux系统这一步中我出现了问题,让我选择网卡,解决办法是关机,将网络配适器换为NAT后,再换为桥接模式再次开机安装系统便没有问题。 安装软件源的时候部分源已经失效,需挑选可以使用的软件源。 安装搜狗输入法的时候需要一些配置文件

  • 文件操作,列表实例NiceHexSpiral

    复制 classmates=['a','b','c','d'] print(classmates[-1]) print(len(classmates)) classmates.append('t') classmates.insert(1,'r') classmates.pop() print(classmates)复制 复制   importturtle turtle.speed(10) colors=['#FF6EB4','#C67171','#CD4F39','#8968CD','#EE9A49','#FFFF00'] foriinrange(200): turtle.pencolor(colors[i%6]) turtle.forward(i) turtle.left(55) turtle.done()复制     fr=open('c_kk.txt',mode='r',encoding='utf-8') o=fr.read() fr.close() fw=open('kk.txt',mode='a',encoding='u

相关推荐

推荐阅读