码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【学习笔记】元学习如何解决计算机视觉少样本学习的问题?


    目录

    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
  • 相关阅读:
    如何在Tomcat中配置和使用Session共享!
    C#实现简单人机交互
    NetSuite海鲜书 - 知识会汇编 用户篇 2023
    一文教你如何使用Scan Kit快速生成带有logo的个性化二维码
    如何让GPT不再胡说八道
    Rancher-Longhorn-新增磁盘以及卷创建原理和卷副本调度规则
    性能测试学习——项目环境搭建和Jmete学习二
    激光SLAM多层料箱机器人HEGERLS A42M SLAM|灵活匹配多种作业高度|支持多尺寸纸箱/料箱混合拣选
    tcping下载安装步骤,如何ping端口,tcping详解
    又重新搭了个个人博客
  • 原文地址:https://blog.csdn.net/weixin_38575258/article/details/132706459
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号