目录
1 计算机视觉少样本学习
2 元学习
3 寻找最优初始参数值方法:MAML
3.1 算法步骤
3.2 代码:使用MAML 和 FO-MAML、任务增强完成Few-shot Classification
4 距离度量方法:Siamese Network,ProtoNet,RN
4.1 孪生网络(Siamese Network)
算法步骤
Siamese Network代码
4.2 原型网络(Prototypical Networks)
算法步骤
ProtoNet代码
4.3 关系网络(Relation Network)
算法步骤
RN代码
5 其他应用于少样本学习的方法
6 参考资料
今天为大家总结元学习解决计算机视觉领域问题的方法,先介绍少样本学习和元学习的概念,然后介绍寻找最优初始参数值和距离度量方法的原理和代码,希望大家看完文章后可以动手实践以便解决现实问题。
在工业领域解决计算机视觉问题,例如质检相关工作通常会遇到样本少的情形。这时候就需要采用少样本学习方法。
少样本学习(few-shot leaming)或 k 样本学习(k-shot learning)指的是利用较少的数据点进行学习,k表示数据集各个类别中数据点的数量。
元学习是学习如何学习,这样设计的模型能够快速适应新任务,特别是那些从未见过的新任务。
元学习可以通过较少的标记数据完成,通过学习任务之间的相似性,不是单独学习每个任务。
元学习能够学习到任务之间的共享知识,具备更好的泛化能力。元学习模型在处理新任务时,能够利用已经学习到的知识,而无需从头开始。
元学习的学习过程和框架如下图所示
图片来源:https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/meta_v3.pdf
感谢台湾大学李宏毅教授!大家可以查看李宏毅教授的讲解 第十五节 2021 - 元学习 Meta Learning (一) - 元学习和机器学习一样也是三個步骤_哔哩哔哩_bilibili,我就不重复了。
方法 | 学习目标 | 优点 | 典型代表 | 适用场景 |
---|---|---|---|---|
学习最优初始参数值 | 通过在多个任务上进行训练,学习到一个初始参数设置,这个参数设置可以在新任务上通过少量的梯度更新进行快速适应 | MAML可以与任何模型一起使用,只要该模型的参数可以通过梯度下降进行更新 | MAML(Model-Agnostic Meta-Learning) Meta-SGD Reptile |
少样本学习 强化学习 |
基于优化 | 学习一个优化器,该优化器可以快速适应新任务 | 直接学习到从损失函数到模型更新的映射,从而在新任务上实现快速适应 | Optimization as a Model for Few-Shot Learning Learning to Learn by Gradient Descent by Gradient Descent |
少样本学习 |
基于度量 | 学习距离度量,该度量可以用于比较新任务中的样本 | 利用所有的支持集样本来对查询集样本进行分类,从而在新任务上实现快速适应 | Siamese neural network Relation Network ProtoNet(Prototypical Networks) |
图像分类和对象识别 |
基于模型 | 学习一个模型,该模型可以预测新任务的输出 |
可以存储和检索过去的经验,从而在新任务上实现快速适应 | Memory-Augmented Neural Networks |
少样本学习 序列预测 强化学习 |
学习网络结构 | 学习一个网络结构,该网络结构可以在新任务上实现最优性能 | 自动搜索最优的网络结构,避免人工设计网络结构的复杂性 | Neural Architecture Search | 自动机器学习AutoML |
李宏毅老师也总结了元学习的应用场景
图片来源:http://speech.ee.ntu.edu.tw/~tlkagk/meta_learning_table.pdf
MAML试图找到一组模型参数,这组参数能够通过少量的梯度更新步骤快速适应新的任务。
MAML的挑战是需要计算二阶梯度,这在计算上可能会比较昂贵。有一些变体如FOMAML(First-Order MAML)和REPTILE,只需要计算一阶梯度,从而降低了计算复杂性。
https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python/blob/master/Chapter06/6.5%20Building%20MAML%20From%20Scratch.ipynb
主要用于处理少样本学习和相似性比较问题。在计算机视觉中,孪生网络常常被用于面部识别、签名识别等任务。
https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python/tree/master/Chapter02
原型网络通过创建每个类的原型表示,根据类原型与查询点之间的距离对查询点(新点)进行分类。
https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python/blob/master/Chapter03/3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb
关系网络是一种特别设计用来处理少样本学习问题的元学习算法。它通过学习一个深度神经网络来度量样本之间的关系,从而进行分类。关系网络的优点是它可以处理任意数量的支持集样本和查询集样本。
特征提取:首先,使用一个深度神经网络(例如卷积神经网络)来提取样本的特征。将这个网络称为特征提取器。
计算关系得分:然后,将支持集中的每个样本的特征与查询集中的样本的特征配对,形成一个特征对。将每个特征对输入到另一个深度神经网络中,这个网络被称为关系网络。关系网络的输出是一个关系得分,表示这个特征对中两个样本的相似度。
分类:最后,将查询集中的样本分类到关系得分最高的支持集样本所属的类别。
注意,因为需要计算支持集中的每个样本与查询集中的每个样本之间的关系得分,关系网络的训练需要大量的计算资源。
https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python/blob/master/Chapter04/4.5%20Building%20Relation%20Network%20Using%20Tensorflow.ipynb
除了元学习,数据增强、迁移学习、自监督学习和零样本学习等方法也可以应用于少样本学习。
自监督学习可以查看我的视频
【专题11:用自监督学习方法解决计算机视觉问题】1.概述和DINOv2原理
幻灯片在这里
【专题11:用自监督学习方法解决计算机视觉问题】1.概述和DINOv2_1sthalf.pdf