FRN——小样本学习SOTA模型
本文介绍CVPR2024论文提出的小样本学习模型FRN,其将分类问题归为特征重构问题,以闭合解形式从支持样本回归查询样本特征,性能与效率更优。文中展示了基于PaddlePaddle复现的FRN在mini-ImageNet上的精度,还介绍了数据集、环境依赖、快速开始步骤、代码结构及模型信息等内容。

FRN——小样本学习SOTA模型
一、论文概述
论文Few-Shot Classification with Feature Map Reconstruction Networks是顶会CVPR2024上发表的一种小样本学习经典方法。该方法在小样本学习的benchmark上依然具有最佳的性能指标,是该领域的重要方法。
FRN将小样本分类问题归结为潜在空间中的特征重构问题。作者认为,通过支持样本重构查询样本特征的能力,决定了查询样本的所属类别。作者在小样本学习中引入了一种新的机制,以闭合解的形式从支持样本特征直接向查询样本特征做回归,无需引入新的模块或者大规模的训练参数。上述方法得到的模型(FRN),相比先前的其他方法,无论在计算效率上还是性能表现上都更有优势。FRN在四个细粒度数据集上展现出实质性提升。在通用的粗粒度数据集mini-ImageNet和tiered-ImageNet上,也达到了SOTA指标。
下图展示了FRN的基本工作流程。
二、复现精度
基于paddlepaddle深度学习框架,对文献算法进行复现后,本项目在mini-ImageNet上达到的测试精度,如下表所示。
模型训练包括了两个过程,首先是模型预训练,按照典型分类网络的训练过程,将整个训练集送入backbone进行训练;然后是微调过程,按照episode training的训练范式,配置为20-Way 5-Shot方式进行微调训练。这两个训练过程的训练超参数设置如下:
(1)预训练过程
(2)微调训练过程
三、数据集
miniImageNet数据集节选自ImageNet数据集。 DeepMind团队首次将miniImageNet数据集用于小样本学习研究,从此miniImageNet成为了元学习和小样本领域的基准数据集。 关于该数据集的介绍可以参考https://blog.csdn.net/wangkaidehao/article/details/105531837
miniImageNet是由Oriol Vinyals等在Matching Networks 中首次提出的,该文献是小样本分类任务的开山制作,也是本次复现论文关于该数据集的参考文献。在Matching Networks中, 作者提出对ImageNet中的类别和样本进行抽取(参见其Appendix B),形成了一个数据子集,将其命名为miniImageNet。 划分方法,作者仅给出了一个文本文件进行说明。 Vinyals在文中指明了miniImageNet图片尺寸为84x84。因此,后续小样本领域的研究者,均是基于原始图像,在代码中进行预处理, 将图像缩放到84x84的规格。
至于如何缩放到84x84,本领域研究者各有各的方法,通常与研究者的个人理解相关,但一般对实验结果影响不大。本次文献论文原文,未能给出 miniImageNet的具体实现方法,本项目即参考领域内较为通用的预处理方法进行处理。
数据集大小:miniImageNet包含100类共60000张彩色图片,其中每类有600个样本。 mini-imagenet一共有2.86GB数据格式:|- miniImagenet| |- images/| | |- n0153282900000005.webp | | |- n0153282900000006.webp| | |- …| |- train.csv| |- test.csv| |- val.csv登录后复制
数据集链接:miniImagenet
四、环境依赖
硬件:
x86 cpuNVIDIA GPU框架:
PaddlePaddle = 2.4其他依赖项:
numpy==1.19.3tqdm==4.59.0Pillow==8.3.1五、快速开始
1、解压数据集和源代码:
!unzip -n -d ./data/ ./data/data105646/mini-imagenet-sxc.zip
In [ ]%cd /home/aistudio/!unzip -n -d ./data/ ./data/data105646/mini-imagenet-sxc.zip登录后复制 In [ ]
%cd /home/aistudio/work/!unzip -o frn.zip登录后复制 In [ ]
# 生成json文件!cp write_miniImagenet_filelist.py /home/aistudio/data/mini-imagenet-sxc/%cd /home/aistudio/data/mini-imagenet-sxc/!python write_miniImagenet_filelist.py登录后复制
2、执行以下命令启动预训练:
python pretrain.py --dataset mini_imagenet --data_path /home/aistudio/data/mini-imagenet-sxc --method stl_frn --lr 1e-1 --gamma 1e-1 --epoch 350 --milestones 200 300 --batch_size 512 --val_n_episode 600 --image_size 84 --model ResNet12 --n_shot 1 --n_query 15 --gpu登录后复制
模型开始训练,运行完毕后,训练log和模型参数保存在./checkpoints/mini_imagenet/ResNet12_stl_frn_pretrain/目录下,分别是:
best_model.pdparams # 最优模型参数文件output.log # 训练LOG信息登录后复制登录后复制
训练完成后,可将上述文件手动保存到其他目录下,避免被后续训练操作覆盖。
In [ ]%cd /home/aistudio/work!python pretrain.py --dataset mini_imagenet --data_path /home/aistudio/data/mini-imagenet-sxc --method stl_frn --lr 1e-1 --gamma 1e-1 --epoch 350 --milestones 200 300 --batch_size 512 --val_n_episode 600 --image_size 84 --model ResNet12 --n_shot 1 --n_query 15 --gpu登录后复制
3、执行以下命令启动微调训练:
python meta_train.py --dataset mini_imagenet --data_path /home/aistudio/data/mini-imagenet-sxc --method meta_frn --lr 1e-3 --gamma 1e-1 --epoch 150 --train_n_episode 1000 --val_n_episode 600 --milestones 70 120 --image_size 84 --model ResNet12 --train_n_way 20 --val_n_way 5 --n_shot 5 --n_query 15 --gpu --pretrain_path ./checkpoints/mini_imagenet/ResNet12_stl_frn_pretrain/best_model.pdparams登录后复制
模型开始训练,运行完毕后,训练log和模型参数保存在./checkpoints/mini_imagenet/ResNet12_meta_frn_20way_5shot_metatrain/目录下,分别是:
best_model.pdparams # 最优模型参数文件output.log # 训练LOG信息登录后复制登录后复制
训练完成后,可将上述文件手动保存到其他目录下,避免被后续训练操作覆盖。
In [ ]%cd /home/aistudio/work!python meta_train.py --dataset mini_imagenet --data_path /home/aistudio/data/mini-imagenet-sxc --method meta_frn --lr 1e-3 --gamma 1e-1 --epoch 150 --train_n_episode 1000 --val_n_episode 600 --milestones 70 120 --image_size 84 --model ResNet12 --train_n_way 20 --val_n_way 5 --n_shot 5 --n_query 15 --gpu --pretrain_path ./checkpoints/mini_imagenet/ResNet12_stl_frn_pretrain/best_model.pdparams登录后复制
4、执行以下命令进行评估
python test.py --dataset mini_imagenet --data_path /home/aistudio/data/mini-imagenet-sxc --model ResNet12 --method meta_frn --image_size 84 --gpu --n_shot 1 --model_path ./checkpoints/mini_imagenet/ResNet12_meta_frn_20way_5shot_metatrain/best_model.pdparams --test_task_nums 1 --test_n_episode 600登录后复制
用于评估模型在小样本任务下的精度。
In [ ]# 5-Way 1-Shot评估%cd /home/aistudio/work!python test.py --dataset mini_imagenet --data_path /home/aistudio/data/mini-imagenet-sxc --model ResNet12 --method meta_frn --image_size 84 --gpu --n_shot 1 --model_path ./checkpoints/mini_imagenet/ResNet12_meta_frn_20way_5shot_metatrain/best_model.pdparams --test_task_nums 1 --test_n_episode 600登录后复制 In [ ]
# 5-Way 5-Shot评估%cd /home/aistudio/work!python test.py --dataset mini_imagenet --data_path /home/aistudio/data/mini-imagenet-sxc --model ResNet12 --method meta_frn --image_size 84 --gpu --n_shot 5 --model_path ./checkpoints/mini_imagenet/ResNet12_meta_frn_20way_5shot_metatrain/best_model.pdparams --test_task_nums 1 --test_n_episode 600登录后复制
六、代码结构与详细说明
6.1 代码结构
├── data # 数据处理相关│ ├── datamgr.py # data manager模块│ ├── dataset.py # data set模块├── methods # 模型相关│ ├── FRN.py # FRN核心算法├── network # backbone│ ├── conv.py # Conv-4和Conv-6代码实现│ ├── resnet.py # ResNet-12代码实现├── scripts # 运行工程脚本│ ├── mini_imagenet │ │ ├── run_frn │ │ │ ├── run_frn_metatrain.sh # 运行微调训练│ │ │ ├── run_frn_pretrain.sh # 运行预训练│ │ │ ├── run_frn_test.sh # 运行测试├── meta_train.py # 微调训练代码├── pretrain.py # 预训练代码├── test.py # 测试代码├── utils.py # 公共调用函数├── wirite_miniImagenet_filelist.py # 生成mini-ImageNet数据json文件登录后复制
6.2 参数说明
可以在 pretrain.py 中设置训练与评估相关参数,具体如下:
6.3 训练流程
可参考快速开始章节中的描述
训练输出
执行训练开始后,将得到类似如下的输出。每一轮epoch训练将会打印当前training loss、training acc、val loss、val acc以及训练kl散度。
Epoch 0 | Batch 0/150 | Loss 4.158544best model! save...val loss is 0.00, val acc is 37.46model best acc is 37.46, best acc epoch is 0This epoch use 7.61 minutestrain loss is 3.72, train acc is 10.84Epoch 1 | Batch 0/150 | Loss 3.052964val loss is 0.00, val acc is 37.46model best acc is 37.46, best acc epoch is 0This epoch use 3.73 minutestrain loss is 2.96, train acc is 25.28Epoch 2 | Batch 0/150 | Loss 2.588413val loss is 0.00, val acc is 37.46model best acc is 37.46, best acc epoch is 0This epoch use 3.71 minutestrain loss is 2.59, train acc is 33.27...登录后复制
6.4 测试流程
可参考快速开始章节中的描述
此时的输出为:
登录后复制
八、模型信息
训练完成后,模型和相关LOG保存在./results/5w1s和./results/5w5s目录下。
训练和测试日志保存在results目录下。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Trae在Python数据分析与机器学习项目中的实际应用评测
Trae在Python数据分析与机器学习项目中主要通过四种方式提供支持:利用Auto模式自动生成并执行端到端分析脚本;通过AgentCLI命令行自动化机器学习建模流程;对现有代码进行智能调试与优化;借助语音交互快速构建数据处理函数。这些功能覆盖了从需求描述到代码生成、模型构建及代码优化的全流程。
吉利银河星耀7 MAX四驱版上市 售价10.88万起性能解析
吉利银河星耀7正式上市,共五款配置,售价10 88万元起。新车定位中型SUV,提供MAX四驱版本,搭载e-AWD智电四驱系统,零百加速5 4秒。设计延续“涟漪美学”,配备发光格栅与贯穿式尾灯。内饰采用环抱式座舱,配备智慧中岛扶手与Eva车载机器人。智能驾驶方面搭载千里浩瀚H3方案,支持高速NOA与自动泊车功能。
AI视频教程:如何制作镜头推进效果
在即梦AI中实现镜头推进效果,可通过慢推模板或手动运镜控制来设置轨道距离与速度。结合运动笔刷可增强局部动态,利用分镜与预设指令库能优化节奏与效率。需注意主体描述明确,参数匹配画面比例。
通义万象制作壁纸与头像的图片效果实测
通义万相生成图像时,主体模糊、比例失调等问题多因指令不精准。优化方法包括:严格按“主体-特征-场景-风格-参数”五要素构建清晰提示词,细节越具体效果越可控;生成前根据用途手动设定正确画幅比例,避免拉伸或裁切,确保成品直接可用。
Qoder新手入门教程:从零开始创建第一个全栈项目
Qoder平台为新手提供了三种创建首个项目的方式。通过浏览器访问云端工作台,可直接用自然语言描述需求并快速生成完整项目。使用QoderCLI工具可在本地终端通过命令交互,生成并初始化项目。安装QoderIDE客户端则能在深度定制的开发环境中,打开并智能编辑已有项目文件。
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

