十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

元学习到底是什么?few-shot-meta-baseline 用两阶段训练给出最简答案

元学习到底是什么?few-shot-meta-baseline 用两阶段训练给出最简答案 元学习到底是什么few-shot-meta-baseline 用两阶段训练给出最简答案【免费下载链接】few-shot-meta-baselineMeta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning, in ICCV 2021项目地址: https://gitcode.com/gh_mirrors/fe/few-shot-meta-baseline元学习Meta-Learning是让小模型学会学习的研究方向而 few-shot-meta-baseline 正是解开这个概念的最简答案。这个开源项目实现了 ICCV 2021 论文《Meta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning》用一套两阶段训练流程让新手也能快速理解小样本学习Few-Shot Learning的核心思想并在 miniImageNet 上取得 5-way 1-shot 63.17% 的出色准确率。一、先搞懂什么是元学习与小样本学习小样本学习的任务很直观只给每个类别几张图片模型就要学会识别新类别。5-way 1-shot从 5 个新类别中各取 1 张图片做参考再判断查询图片属于哪一类5-way 5-shot每个类别提供 5 张参考图片传统深度学习需要海量标注数据而小样本学习希望模型举一反三。元学习就是训练这种快速适应新任务能力的统称——它不直接学分类而是学习如何学习。few-shot-meta-baseline 的过人之处在于它把复杂的元学习算法简化成分类器预训练 元学习微调两步思路清晰到令人惊讶。二、Meta-Baseline 的核心思想两阶段训练 Meta-Baseline 认为此前许多元学习算法过于复杂性能却未必更好。它提出一个简单假设一个分类器预训练得到的特征提取器加上基于原型Prototype的元学习微调就足够强大了。整个过程分为两阶段阶段名称做什么入口脚本第一阶段分类器预训练Classifier-Baseline在大规模基类上训练普通分类器学到通用特征train_classifier.py第二阶段元学习训练Meta-Baseline用 episode 方式模拟小样本任务微调特征提取器train_meta.py阶段一先用基类训练一个普通分类器在 miniImageNet 上训练集有 64 个基类。第一阶段就是普通的图像分类训练把图片输入 ResNet-12 编码器接一个线性分类头用交叉熵损失优化。配置见configs/train_classifier_mini.yamlmodel: classifier model_args: encoder: resnet12 classifier: linear-classifier classifier_args: {n_classes: 64}这个阶段学到的是通用的视觉特征——猫和狗的区别、纹理和形状的语义都沉淀在编码器里。阶段二用 episode 方式做元学习训练第二阶段的训练方式完全不同。每个训练批次episode会随机抽取 5 个类别、每类若干张图片模拟真实的 few-shot 测试场景配置见configs/train_meta_mini.yamlmodel: meta-baseline model_args: encoder: resnet12 load_encoder: ./save/classifier_mini-imagenet_resnet12/epoch-last.pth n_way: 5 n_shot: 1注意关键的load_encoder第二阶段直接加载第一阶段训练好的编码器作为初始化这正是两阶段训练的衔接点。三、Meta-Baseline 模型内部是怎么工作的模型实现只有不到 50 行代码在models/meta_baseline.py中。它的前向过程非常简单将支持集support set和查询集query set一起送入编码器提取特征对支持集特征按类别求平均得到每个类别的原型Prototype计算查询特征与各原型的余弦相似度得到分类 logitsif self.method cos: x_shot x_shot.mean(dim-2) # 求类别原型 x_shot F.normalize(x_shot, dim-1) # L2 归一化 x_query F.normalize(x_query, dim-1)核心洞察在于预训练特征 类别均值原型 余弦距离就是最朴素也最有效的元学习方案。它无需复杂的梯度二阶导如 MAML无需额外的注意力机制如 Matching Networks却能在多数基准上超越这些成名算法。四、效果如何用数据说话 以下是项目 README 中公开的 5-way 准确率对比%足以证明简单不等于弱miniImageNet 上的表现方法1-shot5-shotBaseline51.8775.68MetaOptNet62.6478.63Meta-Baseline63.1779.26tieredImageNet 上的表现方法1-shot5-shotLEO66.3381.44MetaOptNet65.9981.56Meta-Baseline68.6283.29在更大规模的 ImageNet-800 上使用 ResNet-50 骨干的 Meta-Baseline 达到1-shot 89.70%、5-shot 96.14%。值得注意的是文中采用的 ResNet-12 骨干通道数 64-128-256-512见models/resnet12.py没有使用任何额外技巧如 DropBlock 或加宽通道这让成绩更具说服力。五、新手如何快速上手运行项目结构清晰运行门槛低。克隆仓库后按以下步骤操作1. 准备环境Python 3.7.3PyTorch 1.2.0tensorboardX数据集miniImageNet / tieredImageNet / ImageNet-800下载后链接到materials/目录下分别命名为mini-imagenet、tiered-imagenet和imagenet。2. 阶段一训练分类器基线python train_classifier.py --config configs/train_classifier_mini.yaml训练完成后模型保存在save/目录其中的编码器就是第二阶段的初始化。3. 阶段二训练 Meta-Baselinepython train_meta.py --config configs/train_meta_mini.yaml4. 测试 few-shot 性能修改configs/test_few_shot.yaml中的load指向第二阶段保存的模型然后运行python test_few_shot.py --shot 1想要测试 5-shot 就把--shot 5想额外评估单类 AUC 指标加上--sauc参数即可。六、值得学习的代码结构清单 对初学者来说这个项目是极佳的教学材料几个文件尤其值得精读models/meta_baseline.pyMeta-Baseline 核心模型理解原型余弦相似度的完整实现models/classifier.py分类器基线与线性分类头对应第一阶段models/resnet12.py小样本学习常用骨干 ResNet-12含初始化细节train_meta.py/train_classifier.py两阶段训练的完整训练循环datasets/samplers.pyepisode 采样器理解按类别随机抽任务如何实现configs/目录mini / tiered / im800 三套数据集的完整配置模板七、总结元学习没有想象中神秘 ✨few-shot-meta-baseline 用最简洁的两阶段训练告诉我们元学习完全可以被拆解为先学通用特征再学快速适应。它不仅是 ICCV 2021 的高引论文实现更是一份优秀的学习范本——无论你是想入门小样本学习还是希望在自己的项目中快速部署 few-shot 能力这个仓库都值得你深入研读。从今天起从models/meta_baseline.py的 50 行代码开始你也能亲手揭开元学习的神秘面纱【免费下载链接】few-shot-meta-baselineMeta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning, in ICCV 2021项目地址: https://gitcode.com/gh_mirrors/fe/few-shot-meta-baseline创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表