自监督学习在计算机视觉中的应用
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
作者&编辑:李中梁
自监督学习介绍
对于预训练技术大家一定不陌生,在训练我们的深度学习模型时,我们一般会选择一个预先训练好的模型,并对其进行微调得到想要的模型。如果从随机权重开始,意味着需要花费大量的数据和时间进行训练。
那么,如果在你的领域中没有预训练模型,该怎么办呢?例如,在医学图像领域,很少有预先训练过的模型。最近发表的一篇有趣的论文《Transfusion: Understanding Transfer Learning for Medical Imaging》研究了这个问题,并发现即使使用来自预先训练过的ImageNet模型的几个早期层,也可以提高医学图像模型的训练速度和最终准确性。因此,您应该使用一个通用的预先训练的模型,即使它不属于您正在处理的问题的领域。
然而,正如本文所指出的,将ImageNet预训练模型应用于医学成像时,其改进程度并不大。我们想要模型工作更好,但不需要大量的数据,秘诀就是“自监督学习”。在自监督学习中,标签来自数据,而不需要单独的外部标签(外部标签就是指我们手工标注的标签)。
这个想法有着悠久的历史,早在1989年,Jurgen Schmidhuber就在他1989年(甚至更早)的论文《Making the World Differentiable》中讨论过。到1994年,这个术语还被用来涵盖一种相关的方法,即使用一种模态作为另一种模态的标签,例如论文Learning Classification with Unlabeled Data,该论文使用音频数据作为标签,使用视频数据作为预测任务。例如下面这个例子:
听到“哞哞”声和看到奶牛往往同时出现
论文《Universal Language Model Fine-tuning for Text Classification》中也研究了自监督学习对文本分类任务的效果。预训练模型的任务是预测句子中的下一个单词。我们并不一定对语言模型本身感兴趣,但事实证明,能够完成这一任务的模型必须在训练过程中了解语言的本质,甚至“了解”一点世界。当我们把这个预先训练好的语言模型,fine-tune到另一个任务中,比如情绪分析,结果是我们可以用很少的数据很快得到最新的结果。
在计算机视觉任务中应用无监督学习
在自监督学习中,我们把用于预训练的任务称为“pretext task”,把用于fine-tune的任务称为“downstream task”。尽管自监督学习在当今的自然语言处理中几乎被普遍使用,但考虑到它的工作效果,它在计算机视觉模型中的使用要比我们预期的少得多。也许这是因为ImageNet的预训练已经获得了广泛的成功,所以像医学成像这样的社区中的人们可能不太熟悉自监督学习的必要性。在这篇文章的其余部分,我将努力提供一个简短的自监督学习在计算机视觉中的应用介绍,希望这可能有助于更多的人利用这一非常有用的技术。
在计算机视觉中使用自我监督学习最需要回答的问题是:“你应该使用什么pretext task?”“其实你有很多选择。下面展示了一些相关的工作。
Colorization
着色任务就是输入一张灰度图,让网络预测其彩色图的色彩分布。由于原始图片是彩色的的,所以可以自动构建好输入和输出标签对。
相关工作有:
《Colorful Image Colorization》
《Learning Representations for Automatic Colorization》
《Tracking Emerges by Colorizing Videos》
Placing image patches in the right place
对一张图像分块。例如将其分成九宫格,输入中心小块周围的任意一小块,让网络预测其相对中心小块的位置,这是是一个典型的8分类问题,其学习到的特征可以用于下游任务。可以参考以下工作:
《Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles》
《Unsupervised Visual Representation Learning by Context Prediction》
Placing frames in the right order
既然图像中有对某一个patch的位置进行预测,那么视频中就可以对某一帧的位置进行预测:
《Unsupervised Representation Learning by Sorting Sequences》
《Shuffle and Learn: Unsupervised Learning using Temporal Order Verification》
Classify corrupted images
在《Self-Supervised Feature Learning by Learning to Spot Artifacts》这篇论文中,pretext task 是对损坏的图像进行分类,注意到绿色的图像没有被破坏,红色的图像被破坏。同时,过于简单的破坏机制可能会导致任务过于简单,并且不会产生有用的特性。上面的文章使用了一种聪明的方法,它破坏了自动编码器的特性,然后试图重建它们,使其成为一个具有挑战性的任务。
选择pretext task
如何选择合适的pretext task呢?您选择的pretext task必须是这样的:如果解决了这些任务,就需要提取这些数据的特征,而这些特征也是解决downstream task所需要的。例如,大家经通常使用autoencoder作为pretext task。这个模型可以将一个输入图像转换成一个大大简化的形式,然后将其转换回尽可能接近原始图像的内容。它有效地利用压缩作为的任务。然而,解决这个问题不仅需要重新生成原始图像的内容,还需要重新生成原始图像中的任何噪声。因此,如果您的downstream task是您想要生成更高质量的图像,那么这将是一个糟糕的pretext task的选择。
你还应该确保借口任务是人类可以做的事情。例如,您可以使用生成视频下几帧的问题作为pretext task。但是如果你试图生成的视频帧太靠后,那么它可能是一个完全不同的场景的一部分,因此没有模型能够自动生成它。
微调 downstream tasks
一旦你用一个pretext task预先训练了您的模型,你就可以继续进行微调了。在这一点上,你应该把这当作一个迁移学习的问题,因此你应该小心不要损失你预先训练的权重。可以借鉴ULMFiT论文中讨论的内容,例如逐步解冻权重、有区别的学习率和单周期训练。如果您正在使用fastai2,那么您可以简单地调用fine_tune方法来完成这些工作。
总的来说,我建议不要花太多时间来创建完美的pretext task模型,而应该尽可能地快速、简单地构建里所能构建的任何东西。然后你就可以知道它是否适合你的下游任务。通常情况下,你并不需要一个特别复杂的pretext task来完成你的下游任务。
还需要注意的是,你可以进行多轮的自我监督前训练和有规律的预训练。例如,你可以使用上述方法中的一种来进行初始的与预训练,然后进行细分以进行额外的预训练,最后再训练你的downstream任务。你也可以在一个或两个阶段同时做多个任务(多任务学习)。先做最简单的事情,然后只有在您确定确实需要它时才增加复杂性。
一致性损失
最后补充讲解一下Consistency loss(一致性损失)。
在自监督训练的基础上,你可以增加一个非常有用的技巧,这在NLP中被称为“一致性损失”,在计算机视觉中被称为“噪声对比估计”。基本思想是这样的:你的pretext task 是一些损坏你数据的事情,比如模糊部分,旋转它,移动补丁,或者(在NLP中)改变单词或者把一个句子翻译成外语然后再翻译回来。在这种情况下,你都希望原始数据和“混乱”数据在pretext task中给出相同的预测,并在中间层有相同的表达。你也希望同样的东西,当以两种不同的方式“搞砸”时(例如,一个图像旋转了两个不同的量),也应该有相同的一致表示。
因此,我们在loss函数中添加了一些内容,以惩罚为相同数据的不同版本(比如旋转了)获取不同的预测的训练。这张图来自谷歌的文章《 Advancing Semi-supervised Learning with Unsupervised Data Augmentation.》,提出了半监督学习和非监督的数据增强。
说这是“有效的”将是一个巨大的轻描淡写…例如,在谷歌的文章中讨论的方法完全和绝对打破了我们之前ULMFiT文本分类的结果。他们使用的标签数据少了1000倍!
Facebook人工智能最近发表了两篇论文,在计算机视觉环境中使用了这一想法:《Self-Supervised Learning of Pretext-Invariant Representations》和《https://www.fast.ai/2020/01/13/self_supervised》。就像NLP中的谷歌论文一样,这些方法超越了以前最先进的方法,并且需要更少的数据。
很可能你可以为你选择的几乎任何的pretext task来添加一致性损失。既然它是如此有效,我强烈建议你尝试一下!
参考文献
- https://www.fast.ai/2020/01/13/self_supervised/
好消息!
小白学视觉知识星球
开始面向外开放啦
自监督学习在计算机视觉中的应用相关推荐
- 计算机视觉中的自监督学习与注意力建模
分享嘉宾:胡瀚博士 MSRA 研究员 编辑整理:朱玉石 出品平台:DataFunTalk 导读:自从深度学习提出以来,AI得到了快速的发展,每年都会有很多成果涌现,2020年也是丰收的一年,在各个AI ...
- 深度学习在计算机视觉中的应用长篇综述
深度学习在计算机视觉中的应用长篇综述 前言 2012年ImageNet比赛,使深度学习在计算机视觉领域在全世界名声大震,由此人工智能的全球大爆发.第一个研究CNN的专家使Yann LeCun,现就职于 ...
- 计算机视觉中的自监督表示学习近期进展
©PaperWeekly 原创 · 作者|燕皖 单位|渊亭科技 研究方向|计算机视觉.CNN 回顾过去一年左右的自监督学习领域的最重要发展,那么会发现很多优秀的作品:MoCo v1 和 v2,SimC ...
- 收藏 | 计算机视觉中的自注意力
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Branislav Holländer 来源丨CV技术指南 编辑丨极市平台 AI博士笔记系列推荐 ...
- Generative Adversarial Networks in Computer Vision: A Survey and Taxonomy(计算机视觉中的GANs:综述与分类)
Abstract: 生成对抗网络(GANs)在过去几年得到了广泛的研究.可以说,他们最重要的影响是在计算机视觉领域,在挑战方面取得了巨大的进步,如可信的图像生成,图像之间的翻译,面部属性操纵和类似领域 ...
- 计算机视觉中头部姿态估计的研究综述--Head Pose Estimation in Computer Vision - A Survey
计算机视觉中头部姿态估计的研究综述 埃里克.莫非,IEEE的初级会员 默罕 马努拜特里维迪,IEEE高级会员 摘要---让计算机视觉系统作为一个普通人拥有识别另一个人的头部姿势的能力这一想法的提出,对 ...
- 一文尽览 | 计算机视觉中的鱼眼相机模型及环视感知任务汇总!
点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 论文 ...
- 自监督学习和计算机视觉
本文翻译自文章 <Self-supervised learning and computer vision> 我把我认为重要的部分加粗显示了 1.自监督学习介绍 只要有可能,你都应该用一个 ...
- 简要介绍 | 计算机视觉中的开放词汇:挑战与未来
注1:本文系"简要介绍"系列之一,仅从概念上对计算机视觉中的开放词汇(open vocabulary)进行非常简要的介绍,不适合用于深入和详细的了解. 注2:"简要介绍& ...
最新文章
- [转]div里table居中的问题 Div与body顶部间隙
- 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图
- php 向ldap请求文件,绑定 LDAP 目录 - PHP 7 中文文档
- node之npm一直出错
- python高级-------python2.7教程学习【廖雪峰版】(四)
- 【Python实例第24讲】稀疏的可逆协方差估计
- 拒绝996,选对框架很关键!看这里。。。。。。
- UNIAPP 小说采集阅读器
- DirectX SDK 2010 , DXSDK_Jun10.exe, 下载地址
- 试用新版Windows Home Server 2011 (Vail)
- docker提交比赛记录
- 相机拍摄时最重要的三个参数——光圈、快门、ISO
- 编译出现问题:-Dmaven.multiModuleProjectDirectory=$M2_HOME
- Unity3D中场景烘培步骤分享
- 快手引流犯法吗?如果发现造成具体损失以及影响恶劣的情况会被起诉
- 【今日CV 计算机视觉论文速览 第114期】Thu, 9 May 2019
- 巡更巡查系统QY-LY51
- opencv学习日志15-统计焊点个数并输出
- 甲骨文中国乱象:渠道混乱售后屡遭投诉
- 微信小程序组件隐藏与消失方法