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

news2025/1/11 22:50:43

目录

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/virginiakm1988/ML2022-Spring/blob/main/HW15/HW15.ipynb
  • 源代码说明幻灯片:https://github.com/virginiakm1988/ML2022-Spring/blob/main/HW15/HW15.pdf
  • 配套练习说明视频:2022 - 作业说明 HW15_哔哩哔哩_bilibili
  • Building MAML From Scratch代码:

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

  • 元学习:基础与应用(博文视点出品)
  • Python元学习:通用人工智能的实现 (印) 苏达桑·拉维尚迪兰 配套代码 https://github.com/PacktPublishing/Hands-On-Meta-Learning-with-Python Meta learning using one-shot learning, MAML, Reptile, and Meta-SGD with TensorFlow
  • Meta-Learning | Papers With Code
  • A COMPREHENSIVE OVERVIEW AND SURVEY OF RECENT ADVANCES IN META-LEARNING https://arxiv.org/pdf/2004.11149.pdf
  • Yisheng Song, Ting Wang, Subrota K Mondal, Jyoti Prakash Sahoo.A Comprehensive Survey of Few-shot Learning: Evolution, Applications, Challenges, and Opportunities. https://arxiv.org/pdf/2205.06743.pdf 
  • Chelsea Finn, Pieter Abbeel, & Sergey Levine. (2017). Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks.
  • Mengye Ren, Eleni Triantafillou, Sachin Ravi, Jake Snell, Kevin Swersky, Joshua B. Tenenbaum, Hugo Larochelle, Richard S. Zemel.Meta-Learning for Semi-Supervised Few-Shot Classification.
  • Aniruddh Raghu, Maithra Raghu, Samy Bengio, & Oriol Vinyals. (2020). Rapid Learning or Feature Reuse? Towards Understanding the Effectiveness of MAML.
  • https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/meta_v3.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不安全的反序列化(phpjava)及漏洞复现

不安全的反序列化 1. 序列化与反序列化 A8:2017-不安全的反序列化 A08:2021-Software and Data Integrity Failures 为什么要序列化? 序列化,将对象的状态信息转换为可以存储或传输的形式的过程,这种形式大多为字节流、字符串、json 串。…

搭建PyTorch神经网络进行气温预测

import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline features pd.read_csv(temps.csv)#看看数据长什么样子 features.he…

React三属性之:refs

作用 refs是为了获取节点,使用场景主要在需要操作dom的时候,比如echarts,就需要真实的dom节点 使用 import React from "react"; class RefsTest extends React.Component{state {value:输入框的值}refPlan React.createRef()logRef ()>{console.log(this.r…

AlmaLinux 经济收益增加,红帽 RHEL 源码限制不成威胁

导读红帽在两个月前发布公告表示,将限制对 Red Hat Enterprise Linux (RHEL) 源代码的访问,未来 CentOS Stream 将成为公共 RHEL 相关源代码发布的唯一仓库。对于这一决策,AlmaLinux OS Foundation 主席 Benny Vasquez 则向 SiliconANGLE 表示…

线性代数的学习和整理21,向量的模,矩阵的模,矩阵的模和行列式比较(未完成)

目录 1 模的定义 2 向量的模是距离 2.1 向量的模的定义 2.2 向量的模的计算公式 3 矩阵的模 3.1 矩阵/向量组的模的定义 3.2 矩阵的模的公式 4 矩阵的模和行列式的关系? 1 模的定义 模,又称为范数。范数,是具有“长度”概念的函数。…

暖手宝亚马逊美国站UL认证标准要求UL499测试报告

电子产品作为亚马逊平台上较受欢迎的品类之一,得到很多卖家的关注。目前,亚马逊已成为电子产品类零售商No.1。在亚马逊平台上,有18%的卖家出售电子产品。但随着销售该类产品的卖家逐渐增多,平台的审核力度也在加大。进驻亚马逊美国…

java八股文面试[数据库]——可重复读怎么实现的(MVCC)

可重复读(repeatable read)定义: 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。 MVCC MVCC,多版本并发控制, 用于实现读已提交和可重复读隔离级别。 MVCC的核心就是 Undo log多版本链 …

重磅|Falcon 180B 正式在 Hugging Face Hub 上发布!

引言 我们很高兴地宣布由 Technology Innovation Institute (TII) 训练的开源大模型 Falcon 180B 登陆 Hugging Face!Falcon 180B 为开源大模型树立了全新的标杆。作为当前最大的开源大模型,有180B 参数并且是在在 3.5 万亿 token 的 TII RefinedWeb 数据…

springboot项目配置flyway菜鸟级别教程

1、Flyway的工作原理 Flyway在第一次执行时,会创建一个默认名为flyway_schema_history的历史记录表,这张表会用来跟踪或记录数据库的状态,然后每次项目启动时都会自动扫描在resources/db/migration下的文件的版本号并且通过查询flyway_schem…

[极客大挑战 2019]FinalSQL(bypass盲注)

这里是数字型注入,选择一个序号 fuzz ?id1这里过滤了很多东西 使用fuzzSQL字典,这是我自己定义编写的一个fuzz字典,内容较少 select from information . tables whereand " or | & union columns updatexml extractvalue databa…

大数据Flink(七十四):SQL的滑动窗口(HOP)

文章目录 SQL的滑动窗口(HOP) SQL的滑动窗口(HOP) 滑动窗口定义:滑动窗口也是将元素指定给固定长度的窗口。与滚动窗口功能一样,也有窗口大小的概念。不一样的地方在于,滑动窗口有另一个参数控制窗口计算的频率(滑动窗口滑动的步长)。因此,如果滑动的步长小于窗口大…

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension “.ts“ for xxx

报错信息: 解决方法: 在 package.json 文件中将 【type:“module”】删除

【Spring Boot】分页

分页查询 分页查询是日常开发中比较常用的功能。MyBatis框架下也有很多插件实现分页功能,比如pageHelper。这是一款非常简单、易用的分页插件,能很好地集成在Spring Boot中。pageHelper是一款基于MyBatis的数据库分页插件,所以我们在使用它时…

【广州华锐互动】AR远程协助技术提供实时远程协作和指导

随着科技的不断发展,企业的运营管理模式也在不断地进行创新和升级。在这个过程中,AR(增强现实)技术的应用逐渐成为了企业运维管理的新兴趋势。AR远程协助平台作为一种结合了AR技术和远程协助理念的技术手段,为企业运维…

裙式给料机的全球市场在2030年前将达到64亿美元!

裙式给料机,又称旋翼式给料机或喂料机,是一种结构独特的连续式给料设备,主要用于粗碎或中碎物料的过程。其核心部分为带有旋翼的裙式料斗,通过裙式料斗的旋转,将物料均匀地送入后续的破碎设备中。这种给料机的特点是结…

Word 表格单元格无法垂直居中

Word使用 由于平时也需要用到word编写一些文档,但是咱们就是用的少,很多操作或者技巧不太清楚,很多小问题处理起来反而需要消耗很多时间,所以在这里记录平时遇到的一些问题。 表格无法垂直居中 类似于上图的情况,总之…

【Java 基础篇】Java 自动装箱与拆箱:优雅处理基本数据类型与包装类的转换

在 Java 编程中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个重要的概念。它们使得基本数据类型与其对应的包装类之间的转换更加方便,同时也提高了代码的可读性和可维护性。本篇博客将深入探讨自动装箱…

leetcode 92.反转链表II dummy节点的应用

题目 方法 dummy节点 链表的第一个结点,因为没有前驱结点,存在同时删除前驱和后继的情况,这时候我们需要人为构造dummy节点——人为制造出来的第一个结点的前驱结点,也就是说,在可能操作head节点时,我们可…

MySQL——存储引擎

简介 MySQL数据库主要的存储引擎: MyISAM和InnoDB简介 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能…

Spring学习笔记——3

Spring学习笔记——3 一、AOP简介1.1、AOP概述1.2、AOP思想的实现方案1.3、模拟AOP的基础代码1.4、AOP的相关概念 二、基于XML配置的AOP2.1、XML方式AOP快速入门2.2、XML方式AOP配置详解2.3、XML方式AOP原理剖析 三、基于注解配置AOP3.1、注解方式AOP基本使用3.2、注解方式AOP配…