面对解决小型图像数据集,一种常用且非常高效的方法是使用预训练网络。那么什么是预训练网络呢?

定义:

预训练网络(pretrained network)是一个保存好的网络,之前已经在大型数据集(通常是大规模图像分类任务)上训练好。

作用:

如果这个原始数据集足够大且足够通用,那么预训练网络学到的特征的空间层次结构可以有效地作为视觉世界的通用模型,因此这些特征可用于各种不通的计算机视觉问题,即使这些新问题涉及的类别和原始任务完全不同。

这种学到的特征在不同问题之间的可移植性,是深度学习与血多早期浅层学习方法相比的重要有事,它使得深度学习对小数据问题非常有效。

例子:

在ImageNet上训练了一个网络(其类别主要是动物和日常用品),然后将这个训练好的网络应用于某个不相干的任务,比如图像识别中识别家具。

预训练网络的方法:

1)特征提取(feature extraction)

2)微调模型(fine-tuning)

一、特征提取

原理:

特征提取是使用之前网络学到的表示来从新样本中提取出有趣的特征。然后将这些特征输入一个新的分类器,从头开始训练。

过程:

用于图像分类的卷积神经网络包含两部分:首先是一系列池化层和卷积层,最后是一个密集连接分类器。第一部分叫做模型的卷积基(convolutional base)。对于CNN来说,特征提取就是取出之前训练好的网络的卷积基,在上面运行新数据,然后在输出上面训练一个新的分类器。

为什么仅重复使用卷积基?是否也能重复使用密集连接分类器?

一般来说,应该避免这么做。原因在于卷积基学到的表示更加通用,因此更适合重复使用。CNN的feature map表示通用概念在图像中是否存在,无论面对什么样的计算机视觉问题,这种feature map都可能很有用。但是,分类器学到的标识必然是针对于模型训练的类别,其中仅包含某个类别出现在整张图像中的概率信息。此外,密集连接层的表示不再包含物体在输入图像中的位置信息。密集连接层舍弃了空间的概念,而物体位置信息仍然由卷积特征图所描述。如果物体位置对于问题很重要,那么密集连接层的特征在很大程度上是无用的。

注意,某个卷积层提取的表示的通用性(以及可复用性)取决于该层在模型中的深度。模型中更靠近底部的层【靠近输入】提取的是局部的,高度通用的特征图(比如视觉边缘、颜色和纹理),而更靠近顶部的层提取的是更加抽象的概念(比如“猫耳朵”或“狗眼睛”)。因此,如果新的数据集和原始模型训练的数据集有很大差异,那么最好只使用模型的前几层来做特征提取,而不是使用整个卷积基。

拿到与训练好的卷积基后,可以得到一个feature map,需要在这个特征上添加一个密集连接分类器。

有两个可供选择的方法:

1)在你的数据集上运行卷积基,将输出保存成硬盘中的Numpy数组,然后用这个数据作为输入,输入到独立的密集连接分类器中。这种方法速度快,计算代价低,因为对于每个输入图像只需运行一次卷积基,而卷积基是目前流程中计算代价最高的。但是出于同样的原因,这种方法不容许你是用数据增强。

2)在顶部添加Dense层来扩展已有模型(即conv_base),并在输入数据上端到端地运行整个模型。这样可使用数据增强,,因为每个输入图像进入模型时都会经过卷积基。这种方法的计算代价比第一种要高的多。【本方法计算代价很高,只有在GPU的情况下才能尝试运行

注意:

第二种方法,在编译和训练模型之前,一定要“冻结”卷积基。冻结一个或多个层是指在训练过程中保持其权重不变。如果不这么做,那么卷积基之前学到的表示将会在训练过程中被修改。因为其上添加的Dense层是随机初始化的,所以非常大的权重更新将会在网络中传播,对之前学到的表示造成很大的破坏。

二、模型微调

模型微调(fine-tuning)与特征提取互为补充。对于用于特征提取的冻结的模型基,微调是指将其顶部的几层“解冻”,并将这解冻的几层和新增加的部分联合训练。

之所以叫做微调,是因为它只是略微调整了所复用模型中更加抽象的表示,以便让这些表示与手头的问题更加相关。

如下图,微调VGG16网络的最后一个卷积模块:

冻结VGG16的卷积基是为了能够在上面训练一个随机初始化的分类器。只有分类器已经训练好了,才能微调卷积基的顶部几层。如果分类器没有训练好,那么训练期间通过网络传播的误差信号会特别大,微调的几层之前学到的表示都会被破坏。因此,微调网络的步骤如下:

1)在已经训练好的基网络(base network)上添加自定义网络

2)冻结基网络

3)训练所添加的部分

4)冻结基网络的一些层

5)联合训练解冻的这些层和添加的部分

既然微调那么有用,为啥不微调更多层?为啥不微调整个卷积基?

1)卷积基中更靠底部的层编码的是更加通用的可复用特征,而更靠顶部的层编码的是更专业化的特征。微调这些更专业化的特征更加有用,因为它们需要在你的新问题上改变用途。微调更靠底部的层,得到的回报会更少。

2)训练的参数越多,过拟合的风险越大。卷积基有成千上万个参数,故在小数据集上训练那么多参数是有风险的。

小型图像数据集效果优化:使用预训练的CNN相关推荐

  1. 无需在数据集上学习和预训练,这种图像修复新方法效果惊人 | 论文

    林鳞 编译自 Github 量子位 出品 | 公众号 QbitAI Reddit上又炸了,原因是一个无需在数据集上学习和预训练就可以超分辨率.修补和去噪的方法:Deep image prior. 帖子 ...

  2. RoBERTa:一种鲁棒地优化BERT预训练的方法

    RoBERTa:一种鲁棒地优化BERT预训练的方法 文章目录 RoBERTa:一种鲁棒地优化BERT预训练的方法 前言 背景 实验 静态 VS 动态 Masking 输入形式与NSP任务 更大的bat ...

  3. 《预训练周刊》第29期:Swin Transformer V2:扩大容量和分辨率、SimMIM:用于遮蔽图像建模的简单框架...

    No.29 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 本期周刊,我们选择了10篇预训练相关的论文,涉及图像处理.图像屏蔽编码.推荐系统.语言模型解释.多模态表征.多语言建模.推 ...

  4. 超越ImageNet预训练,Meta AI提出SplitMask,小数据集也能自监督预训练

    ©作者 | 陈萍 来源 | 机器之心 大规模数据集对自监督预训练是必要的吗?Meta AI 认为,小数据集也能自监督预训练,效果还不错. 目前,计算机视觉神经网络被大量参数化:它们通常有数千万或数亿个 ...

  5. 微软提出AdaLM,用于开发小型、快速且有效的领域预训练语言模型

    ©作者 | 常馨 学校 | 北京邮电大学硕士生 研究方向 | NLP.信息检索 论文标题: Adapt-and-Distill: Developing Small, Fast and Effectiv ...

  6. 基于元学习和自我监督的图像翻译预训练

    提示:系读文章的笔记,侵删. 文章目录 前言 一.摘要 二.结论与展望 1.结论:新的小样本多任务图像到图像的转换 2.展望:提高性能和稳定性 三.介绍 四. 背景和相关工作 1 数据集(风暴事件图像 ...

  7. 《预训练周刊》第67期: ChatGPT引起热议、量化技术、Meta图像掩码加速CLIP

    No.67 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<预训练周刊>已经开启"订阅功能",以后我们会向您自动推送最新版的&l ...

  8. 【自然语言处理】【多模态】BLIP:面向统一视觉语言理解和生成的自举语言图像预训练

    BLIP: 面向统一视觉语言理解和生成的自举语言图像预训练 <BLIP: Bootstrapping Language-Image Pre-training for Unified Vision ...

  9. BEIT: BERT Pre-Training of Image Transformers(图像Transformer的BERT预训练)

    文章目录 摘要 1. Introduction 2. 方法 2.1 图像表示 2.1.1 Image Patch(图像块) 2.1.2 Visual Token 2.2 Backbone Networ ...

最新文章

  1. 让AI个性化而且功耗更低 IBM研发新型神经网络芯片
  2. Freescale 基于IMX536处理器的Dialog DA9053电源管理参考设计
  3. 计算机网络·域名等级及域名服务器的命名
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作
  5. vivado点击xsetup.exe没有反应 最终版
  6. acer switch 10 linux,【AcerSwitch10评测】高颜值的2in1电脑 Acer Switch 10评测_Acer Switch 10_笔记本评测-中关村在线...
  7. 【IDEA】向IntelliJ IDEA创建的项目导入Jar包的两种方式
  8. python并行计算for循环_在python中并行化这个嵌套的for循环
  9. 爬取网易某只股票2017-01到2018-01的数据
  10. 重载操作符解析(原)
  11. 单日暴跌60%,崩盘4次的AMPL,这次还能回来吗?
  12. 三维CAD/CAM软件SINOVATION 10 中文注册版
  13. JxBrowser开启调试模式,JxBrowser debug
  14. 图解数据库左连接、右连接、内连接、外连接、全连接的区别
  15. Nifi Api访问
  16. 用于目标检测的细粒度动态头
  17. 计算机思维和应用技术,计算机的思维与计算机应用关系分析
  18. c语言中实型标准,在C语言中的实型变量分为两种类型.docx
  19. 如何使用mtPaint制作像素艺术和GIF动画
  20. 如何用本地连接共享无线网络连接

热门文章

  1. 区块链商品溯源系统左侧导航栏+右侧加载页面ajax html
  2. 盘点阿里巴巴 15 款开发者工具
  3. 单向拉伸试验有限元模拟(ABAQUS)
  4. 1.1JVM内存结构——堆、栈、方法区、直接内存、堆和栈区别
  5. 基于Java的校园一卡通系统
  6. unity学习(三)
  7. 【vue项目实战】Vue工程化项目--猫眼电影移动端
  8. HTML5仿手机微信聊天界面
  9. 什么是网站安全?网站安全保障有哪些方式?
  10. Ubuntu 查看电池损耗