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

目录

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.rhkb.cn/news/131606.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试7大误区

随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在。因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…

驱动开发,stm32mp157a开发板的led灯控制实验(再优化),使用ioctl函数,通过字符设备驱动分步注册方式编写LED驱动,完成设备文件和设备的绑定

1.实验目的 编写LED灯的驱动,在应用程序中编写控制LED灯亮灭的代码逻辑实现LED灯功能的控制; 2. LED灯相关寄存器分析 LED1->PE10 LED1亮灭: RCC寄存器[4]->1 0X50000A28 GPIOE_MODER[21:20]->01 (输出) 0X50006000 GPIOE_ODR[10]-&…

024 - STM32学习笔记 - 液晶屏控制(一) - LTDC与DMA2D初始

024- STM32学习笔记 - LTDC控制液晶屏 在学习如何控制液晶屏之前,先了解一下显示屏的分类,按照目前市场上存在的各种屏幕材质,主要分为CRT阴极射线管显示屏、LCD液晶显示屏、LED显示屏、OLED显示屏,在F429的开发板上,…

Linux HTTP协议

目录 1.浏览器与服务器通信过程2.HTTP请求报头(1)HTTP的请求报头结构(2)HTTP的请求方法 3.HTTP应答报头(1)HTTP的应答报头结构(2) HTTP的应答状态 1.浏览器与服务器通信过程 浏览器…

Unity3D之动态生成指定数量带间隔的地面

文章目录 准备代码实现实现效果 准备 空物体生成脚本地面预制体 代码实现 using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine;public class CreateGround : MonoBehaviour {[SerializeField]public i…

Java版的数据结构——栈和队列

目录 1. 栈(Stack) 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1.4.1 改变元素的序列 1.4.2 将递归转化为循环 2. 队列(Queue) 2.1 概念 2.2 队列的使用 2.3 队列模拟实现 2.4 循环队列 3. 双端队列&…

Navicat15 /16 已连接数据库密码解密

前言 相信你会遇到使用navicat忘记已连接数据密码的问题吧!实在是,密码太多容易忘记!!! 感谢大佬as_dmy的文章如何查看navicat已连接数据库密码,然后才有了此文! 1.0版本需要手动查看导出的co…

垃圾收集算法

1.如何判断对象是否存活? 1.1引用计数算法 基本思路: 在对象中添加一个引用计数器每当有一个地方引用它的时候,计数器就加1每当有一个引用失效的时候,计数器就减-1当计数器的值为0的时候,那么该对象就是可被GC回收的…

vue基础知识八:为什么data属性是一个函数而不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象,也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格式data(){return {foo:"foo"}} })组件中定义data属性&#xff…

网站文章生成技术-网站文章生成工具免费

大家好,今天我想和大家分享一些关于网站文章生成的疑虑和期待。作为一个常常需要在网站上发布文章的人,我对这项技术的发展充满了好奇和担忧。在这篇文章中,我将坦率地表达我的想法,希望能引发一些思考。 让我谈一谈我的疑虑。网站…

基于SSM的农产品仓库管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

TypeScript命名空间和模块

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 命名空间(Namespace) 命名空间(Namespace)使用场景 第三方库 兼容…

【C语言】【strcpy的使用和模拟实现】

1.strcpy的使用: char* strcpy(char* destination,const char* source)返回类型是字符指针,参数是接受方字符串的首地址和要拷贝的字符串的首地址 从接受地的‘\0’开始拷贝,会将源字符串中的’\0’也拷贝过来目标空间必须足够大&#xff0…

【JavaEE】_CSS引入方式与选择器

目录 1. 基本语法格式 2. 引入方式 2.1 内部样式 2.2 内联样式 2.3 外部样式 3. 基础选择器 3.1 标签选择器 3.2 类选择器 3.3 ID选择器 4. 复合选择器 4.1 后代选择器 4.2 子选择器 4.3 并集选择器 4.4 伪类选择器 1. 基本语法格式 选择器若干属性声明 2. 引入…

terraform简单的开始-安装和一些配置

terraform的安装: 官方下载: 浏览器打开terraform官方主页https://www.terraform.io/ 点击Download Terraform 跳转到程序下载页面: 找到自己对应的操作系统,按照操作系统选择安装terraform的方式: linux为例&…

LabVIEW利用人工神经网络辅助进行结冰检测

LabVIEW利用人工神经网络辅助进行结冰检测 结冰对各个领域构成重大威胁,包括但不限于航空航天和风力涡轮机行业。在起飞过程中,飞机机翼上轻微积冰会导致升力降低25%。研究报告称,涡轮叶片上的冰堆积可在19个月的运行时间内造成29MWh的功率损…

《86盒应用于家居中控》——实现智能家居的灵动掌控

近年来,智能家居产品受到越来越多消费者的关注,其便捷、舒适的生活方式让人们对未来生活充满期待。作为智能家居方案领域的方案商,启明智显生产设计的86盒凭借出色的性能和良好的用户体验,成功应用于家居中控系统,让家…

数据在内存中的存储——练习3

题目&#xff1a; 3.1 #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }3.2 #include <stdio.h> int main() {char a 128;printf("%u\n",a);return 0; }思路分析&#xff1a; 首先二者极其相似%u是无符号格式进行…

基于SSM的旅游网站系统

基于SSM的旅游网站系统【附源码文档】、前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;管理员、用户 管理员&#xff1a;用户管理、景点…

【Linux】多线程互斥与同步

文章目录 一、线程互斥1. 线程互斥的引出2. 互斥量3. 互斥锁的实现原理 二、可重入和线程安全三、线程和互斥锁的封装1. 线程封装1. 互斥锁封装 四、死锁1. 死锁的概念2. 死锁的四个必要条件3. 避免死锁 五、线程同步1. 线程同步的理解2. 条件变量 一、线程互斥 1. 线程互斥的…