【学习笔记】元学习如何解决计算机视觉少样本学习的问题?
目录
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 算法步骤
- 首先,对于每个任务,从模型的参数开始,并计算出损失函数。
- 然后,使用梯度下降法更新模型的参数以最小化损失函数。
- 在所有任务上重复这个过程几次(这被称为内部循环)。
- 然后,计算出在所有任务上的平均损失,并使用这个损失来更新模型的参数(这被称为外部循环)。
- 重复这个过程,直到模型的性能达到满意的水平。
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)
主要用于处理少样本学习和相似性比较问题。在计算机视觉中,孪生网络常常被用于面部识别、签名识别等任务。
算法步骤
- 首先,孪生网络由两个完全相同的神经网络组成,这两个网络共享相同的参数。
- 然后,将一对样本(例如,两个图像)分别输入到这两个网络中,每个网络会输出一个特征向量。
- 接着,计算这两个特征向量之间的距离或相似度。
- 最后,根据这个距离或相似度来进行分类或回归。例如,如果距离小于某个阈值,就认为这两个样本属于同一类别。
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)
关系网络是一种特别设计用来处理少样本学习问题的元学习算法。它通过学习一个深度神经网络来度量样本之间的关系,从而进行分类。关系网络的优点是它可以处理任意数量的支持集样本和查询集样本。
算法步骤
-
特征提取:首先,使用一个深度神经网络(例如卷积神经网络)来提取样本的特征。将这个网络称为特征提取器。
-
计算关系得分:然后,将支持集中的每个样本的特征与查询集中的样本的特征配对,形成一个特征对。将每个特征对输入到另一个深度神经网络中,这个网络被称为关系网络。关系网络的输出是一个关系得分,表示这个特征对中两个样本的相似度。
-
分类:最后,将查询集中的样本分类到关系得分最高的支持集样本所属的类别。
注意,因为需要计算支持集中的每个样本与查询集中的每个样本之间的关系得分,关系网络的训练需要大量的计算资源。
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
相关文章:
【学习笔记】元学习如何解决计算机视觉少样本学习的问题?
目录 1 计算机视觉少样本学习 2 元学习 3 寻找最优初始参数值方法:MAML 3.1 算法步骤 3.2 代码:使用MAML 和 FO-MAML、任务增强完成Few-shot Classification 4 距离度量方法:Siamese Network,ProtoNet,RN 4.1 孪生网络(Sia…...
【C语言】17-函数-3
1. 链接属性 当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或多个函数库中引用的函数将链接在一起,形成可执行程序。然而,如果相同的标识符出现在几个不同的源文件中时,它们是表示同一个实体,还是表示不同的实体?标识符的链接属性决定如何处理…...
人工智能:为你提供的未来工作岗位
随着科技的快速发展,人工智能(Artificial Intelligence,AI)正逐渐渗透到各个领域。本文探讨一下人工智能可以提供的工作岗位,以期帮助大家更好地了解这个新兴行业的就业前景。 文章目录 1 机器学习工程师2 数据科学家3 自然语言处理工程师4 机器视觉工程…...
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。 HashMap相关问题 1、你用过HashMap吗?什么是HashMap?你为什么用到它?用过,HashMap是基于哈希表的Map接口的非同步实现, 它允许null键…...
flink学习之广播流与合流操作demo
广播流是什么? 将一条数据广播到所有的节点。使用 dataStream.broadCast() 广播流使用场景? 一般用于动态加载配置项。比如lol,每天不断有人再投诉举报,客服根本忙不过来,腾讯内部做了一个判断,只有vip3…...
PPT架构师架构技能图
PPT架构师架构技能图 目录概述需求: 设计思路实现思路分析1.软素质2.核心输出(office输出) 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,ma…...
STM32微控制器的低功耗模式
STM32微控制器的低功耗模式(Low-power modes):Sleep mode、Stop mode 和 Standby mode。 1.1 Sleep Mode(睡眠模式): 把STM32微控制器当作一位劳累的工人,他在工作过程中需要短暂的休息。在Sleep模式下,微控制器会关闭一部分电路,减小功耗,但仍然保持对中央处理单…...
tensorflow QAT
tensorflow qat https://www.wpgdadatong.com/tw/blog/detail/70672 在边缘运算的重点技术之中,除了简化复杂的模块构架,来简化参数量以提高运算速度的这项模块轻量化网络构架技术之外。另一项技术就是各家神经网络框架(TensorFlow、Pytorc…...
[杂谈]-快速了解LoRaWAN网络以及工作原理
快速了解LoRaWAN网络以及工作原理 文章目录 快速了解LoRaWAN网络以及工作原理1、LoRaWAN网络元素1.1 终端设备(End Devices)1.2 网关(Gateways)1.3 网络服务器(Net Server)1.4 应用服务器(Appli…...
MySQL--MySQL表的增删改查(基础)
排序:ORDER BY 语法: – ASC 为升序(从小到大) – DESC 为降序(从大到小) – 默认为 ASC SELECT … FROM table_name [WHERE …] ORDER BY column [ASC|DESC], […]; *** update...
Vue中启动提示polyfill缺少-webpack v5版本导致
安装 npm i node-polyfill-webpack-plugin 因为我们的项目使用webpack v5,其中polyfill Node核心模块被删除。所以,我们安装它是为了在项目中访问这些模块 vue.config.js文件 const { defineConfig } require("vue/cli-service"); const No…...
Hugging Face实战-系列教程3:AutoModelForSequenceClassification文本2分类
🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在notebook中进行 本篇文章配套的代码资源已经上传 下篇内容: Hugging Face实战-系列教程4:padding与attention_mask 输出我…...
《TCP/IP网络编程》阅读笔记--Socket类型及协议设置
目录 1--协议的定义 2--Socket的创建 2-1--协议族(Protocol Family) 2-2--Socket类型(Type) 3--Linux下实现TCP Socket 3-1--服务器端 3-2--客户端 3-3--编译运行 4--Windows下实现 TCP Socket 4-1--TCP服务端 4-2--TC…...
GitHub使用教程
GitHub使用教程 视频教程一:Github 新手够用指南 | 全程演示&个人找项目技巧放送_哔哩哔哩_bilibili 笔记: README.md编写教程:Typora官方免费版与入门教程__阿伟_的博客-CSDN博客 找开源项目的一些途径 • https://github.com/trendin…...
sql server 分区表
分区表 分区表是在SQL Server 2005之后的版本引入的特性,这个特性允许把逻辑上的一个表在物理上分为很多部分。换句话说,分区表从物理上看是将一个大表分成几个小表,但是从逻辑上看,还是一个大表。 步骤 创建分表区的步骤分为…...
开源许可证概述:GNU, BSD, Apache, MPL, 和 MIT
前言 开源许可证是开源软件分发的基础。它们定义了使用者如何使用,修改,分发开源软件。在这篇文章中,我们将探讨五种常见的开源许可证:GNU通用公共许可证 (GNU GPL),BSD许可证,Apache许可证,Mo…...
java中log使用总结
目录 一、概述1.1. 核心日志框架1.2 门面日志框架 二、最佳实践2.1 核心日志框架API包2.2 门面日志框架依赖2.3 集成使用2.3.1 集成jcl2.3.2 集成slf4j2.3.2.1 slf4j集成单一框架2.3.2.2 slf4j整合混合框架 三、总结3.1 所有相关包3.1.1 核心日志框架包3.1.2 门面日志框架3.1.3…...
【Java】传输层协议TCP
传输层协议TCP TCP报文格式首部长度保留位32位序列号和32位确认应答号标记ACKSYNFINRSTURGPSH 16位窗口大小16位校验和16位紧急指针选项 TCP特点可靠传输实现机制-确认应答超时重传连接管理机制三次握手四次挥手特殊情况 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘…...
计算机网络基础知识(非常详细)
1. 网络模型 1.1 OSI 七层参考模型 七层模型,亦称 OSI(Open System Interconnection)参考模型,即开放式系统互联,是网络通信的标准模型。一般称为 OSI 参考模型或七层模型。 它是一个七层的、抽象的模型体ÿ…...
如何进行SEO优化数据分析?(掌握正确的数据分析方法,让您的网站更上一层楼!)
在互联网时代,SEO优化已经成为了每一个网站运营者必备的技能。而在SEO优化中,数据分析更是至关重要的一环。在本文中,我们将会详细介绍如何正确的进行SEO优化数据分析,让您的网站更上一层楼! 数据分析的重要性 数据分…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
