【学习笔记】元学习如何解决计算机视觉少样本学习的问题?

目录

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 参考资料


今天为大家总结元学习解决计算机视觉领域问题的方法,先介绍少样本学习和元学习的概念,然后介绍寻找最优初始参数值和距离度量方法的原理和代码,希望大家看完文章后可以动手实践以便解决现实问题。

1 计算机视觉少样本学习

在工业领域解决计算机视觉问题,例如质检相关工作通常会遇到样本少的情形。这时候就需要采用少样本学习方法。

少样本学习(few-shot leaming)或 k 样本学习(k-shot learning)指的是利用较少的数据点进行学习,k表示数据集各个类别中数据点的数量。

2 元学习

元学习是学习如何学习,这样设计的模型能够快速适应新任务,特别是那些从未见过的新任务。

元学习可以通过较少的标记数据完成,通过学习任务之间的相似性,不是单独学习每个任务。

元学习能够学习到任务之间的共享知识,具备更好的泛化能力。元学习模型在处理新任务时,能够利用已经学习到的知识,而无需从头开始。

元学习的学习过程和框架如下图所示

图片来源: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

3 寻找最优初始参数值方法:MAML

MAML试图找到一组模型参数,这组参数能够通过少量的梯度更新步骤快速适应新的任务。

3.1 算法步骤

  1. 首先,对于每个任务,从模型的参数开始,并计算出损失函数。
  2. 然后,使用梯度下降法更新模型的参数以最小化损失函数。
  3. 在所有任务上重复这个过程几次(这被称为内部循环)。
  4. 然后,计算出在所有任务上的平均损失,并使用这个损失来更新模型的参数(这被称为外部循环)。
  5. 重复这个过程,直到模型的性能达到满意的水平。

3.2 代码:使用MAML FO-MAML、任务增强完成Few-shot Classification

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

4 距离度量方法:Siamese Network,ProtoNet,RN

4.1 孪生网络(Siamese Network)

主要用于处理少样本学习和相似性比较问题。在计算机视觉中,孪生网络常常被用于面部识别、签名识别等任务。

算法步骤

  1. 首先,孪生网络由两个完全相同的神经网络组成,这两个网络共享相同的参数。
  2. 然后,将一对样本(例如,两个图像)分别输入到这两个网络中,每个网络会输出一个特征向量。
  3. 接着,计算这两个特征向量之间的距离或相似度。
  4. 最后,根据这个距离或相似度来进行分类或回归。例如,如果距离小于某个阈值,就认为这两个样本属于同一类别。

Siamese Network代码

https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python/tree/master/Chapter02

4.2 原型网络(Prototypical Networks)

原型网络通过创建每个类的原型表示,根据类原型与查询点之间的距离对查询点(新点)进行分类。

算法步骤

  • 首先,对于每个类别,计算出该类别下所有样本的特征向量的均值,这个均值向量被称为该类别的“原型”。
  • 然后,对于一个新的样本,计算它的特征向量与所有类别的原型之间的距离,将其分类到距离最近的原型所代表的类别。
  • 在训练过程中,通过优化一个目标函数来更新模型的参数,这个目标函数基于新的样本与其对应原型之间的距离。

ProtoNet代码

https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python/blob/master/Chapter03/3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb

4.3 关系网络(Relation Network)

关系网络是一种特别设计用来处理少样本学习问题的元学习算法。它通过学习一个深度神经网络来度量样本之间的关系,从而进行分类。关系网络的优点是它可以处理任意数量的支持集样本和查询集样本。

算法步骤

  1. 特征提取:首先,使用一个深度神经网络(例如卷积神经网络)来提取样本的特征。将这个网络称为特征提取器。

  2. 计算关系得分:然后,将支持集中的每个样本的特征与查询集中的样本的特征配对,形成一个特征对。将每个特征对输入到另一个深度神经网络中,这个网络被称为关系网络。关系网络的输出是一个关系得分,表示这个特征对中两个样本的相似度。

  3. 分类:最后,将查询集中的样本分类到关系得分最高的支持集样本所属的类别。

注意,因为需要计算支持集中的每个样本与查询集中的每个样本之间的关系得分,关系网络的训练需要大量的计算资源。

RN代码

https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python/blob/master/Chapter04/4.5%20Building%20Relation%20Network%20Using%20Tensorflow.ipynb

5 其他应用于少样本学习的方法

 除了元学习,数据增强、迁移学习、自监督学习和零样本学习等方法也可以应用于少样本学习。

自监督学习可以查看我的视频

【专题11:用自监督学习方法解决计算机视觉问题】1.概述和DINOv2原理

幻灯片在这里

【专题11:用自监督学习方法解决计算机视觉问题】1.概述和DINOv2_1sthalf.pdf

6 参考资料

猜你喜欢

转载自blog.csdn.net/weixin_38575258/article/details/132706459