CVPR FRN小样本学习新突破近年来,随着深度学习技术的发展,CVPR 发表的论文提出了一种新的小样本学习方法FRN(Feature Reconstruction Network)。它将传统的分类问题转化为特征重构问题,通过从支持样本中重建查询样本的特征来提高性能和效率。复现PaddlePaddle的框架展示了FRN在mini-ImageNet上的卓越效果,并探讨了数据集选择、环境依赖性、快速启动步骤以及代码结构等细节。这个模型为小样本学习领域带来了新的思路与解决方案,值得进一步研究和应用。
FRN小样本学习SOTA模型
一、论文概述
新发现一种创新小样本学习技术:Few-Shot Classification with Feature Map Reconstruction Networks,已在CVPR 议上发表!此方法在基准测试中表现出色,为小样本学习领域带来重大突破!
小样本学习的新突破:FRN研究人员FRN将小样本分类问题归结为潜在空间中的特征重构问题。通过支持样本重构查询样本特征的能力,决定了查询样本的所属类别。在小样本学习中引入了一种新的机制,从闭合解的形式直接将支持样本特征回归到查询样本特征上,无需引入新的模块或者大规模的训练参数。上述方法得到的模型(FRN),相比先前的其他方法,在计算效率和性能表现上都更有优势。在四个细粒度数据集和通用的粗粒度数据集mini-ImageNet及tiered-ImageNet上均取得了SOTA指标。 关键点总结:- 问题归类:小样本分类问题转化为潜在空间中的特征重构。 - 方法创新:FRN通过闭合解直接回归,无需引入新模块或参数。 - 效果显著:在多个数据集上的实验表明,在细粒度和通用数据集上均取得了优于其他方法的性能。
下图展示了FRN的基本工作流程。
二、复现精度
基于PaddlePaddle深度学习框架实现,本项目在mini-ImageNet上的准确率为,优于现有研究。
模型训练包含两个关键步骤:首先进行模型预训练,借鉴典型分类网络的训练方式,所有训练数据集全部用于backbone网络的训练;随后是微调阶段,采用episode training的培训范式,设定为Way Shot的方式对网络进行微调。两个过程中的超参数设置如下: 预训练阶段:使用整个训练集进行backbone网络的前向传播和反向传播。 微调阶段:采用episode training范式,每类任务中只有样本用于训练,迭代后更新权重。这两个步骤通过精心设置的超参数来调整模型的学习速率、学习范围等关键参数,旨在提高模型在特定领域的适应性和泛化能力。
(1)预训练过程 超参数名 设置值 lr 0.1 gamma 0.1 epoch 350 milestones 200 300 batch_size 512
(2)微调训练过程 超参数名 设置值 lr 1e-3 gamma 0.1 epoch 150 train_n_episode 1000 milestones 70 120 train_n_way 20 n_shot 5
三、数据集
DeepMind团队首次将miniImageNet数据集应用于小样本学习研究,自此miniImageNet成为了元学习和小样本领域的基准数据集。关于该数据集的详细介绍,请参考https://blog.csdn.net/wangkaidehao/article/details/
miniImageNet是由Oriol Vinyals等在Matching Networks中首次提出的,该文献被认为是小样本分类任务的开山之作,也是本次复现论文关于该数据集的重要参考文献。在Matching Networks中,作者提出对ImageNet中的类别和样本进行抽取(见其附录B),形成了一个数据子集,该子集被称为miniImageNet。划分方法仅在文本文件中进行了简要说明。Vinyals在文中指明了miniImageNet图片尺寸为因此后续小样本领域的研究者均是在原始图像的基础上进行预处理,将图像缩放到这一规格。这样做的好处是可以保持数据的多样性和信息量,同时简化模型训练的过程和数据集规模。
至于如何缩放到84x84,本领域研究者各有各的方法,通常与研究者的个人理解相关,但一般对实验结果影响不大。本次文献论文原文,未能给出 miniImageNet的具体实现方法,本项目即参考领域内较为通用的预处理方法进行处理。 数据集大小:miniImageNet包含100类共60000张彩色图片,其中每类有600个样本。 mini-imagenet一共有2.86GB 数据格式:
|- miniImagenet| |- images/| | |- n0153282900000005.jpg | | |- n0153282900000006.jpg| | |- …| |- train.csv| |- test.csv| |- val.csv登录后复制
数据集链接:miniImagenet
四、环境依赖
硬件: x86 cpu NVIDIA GPU
框架: PaddlePaddle = 2.4
其他依赖项: numpy==1.19.3 tqdm==4.59.0 Pillow==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`和存储数据的`dataset.py`。接着,文章讨论了核心算法,指出在神经网络(Neural Network)构建过程中,FRN(Feature Representation Networks)是关键组成部分之一。对于模型相关的部分,介绍了`methods`目录下的`FRN.py`代码实现。紧接着,文章详细描述了`network`目录中的模块,主要涉及的代码包括用于处理图像和视频等输入的卷积网络(Conv)和ResNet架构的实现。在`scripts`目录下,包含了用于训练、预训练和测试的脚本程序,比如运行微调训练和测试所需的命令文件。此外,还包括了用于生成迷你Imagenet数据集列表的辅助脚本。最后,文章提到了几个关键的公共函数模块,包括用于数据处理的`utils.py`以及用于执行具体任务(如预训练、微调训练)的`meta_train.py`和`pretrain.py`代码。总的来说,这篇文章提供了一个完整的机器学习模型构建和训练框架的指南。
6.2 参数说明
可以在pretrain.py中设置训练与评估相关参数,具体如下: 参数 默认值 说明 ----batch_size 128 batch size --lr 0.05 初始学习率 --wd 5e-4 weight decay超参 --gamma 0.1 lr_scheduler衰减系数 --milestones 80, 120 达到相应epoch后,lr_scheduler开始衰减 --epoch 150 遍历数据集的迭代轮数 --gpu True 是否使用GPU进行训练 --dataset mini_imagenet 指定训练数据集 --data_path ' 指定数据集的路径 --model ResNet-12 指定采用的backbone --val meta 指定验证方式 --train_n_way 20 小样本训练类别数 --val_n_episode 600 验证时测试多少个episode --val_n_way 5 小样本验证类别数 --n_shot 1 给定支持样本的个数 --n_query 15 指定查询样本的个数 --num_classes 64 指定base set类别总数 --save_freq 50 指定每隔多少个epoch保存一次模型参数 --seed 0 指定随机数种子 --resume ' 指定恢复训练时加载的中间参数文件路径
6.3 训练流程
可参考快速开始章节中的描述
训练输出
执行训练后,会展示以下输出:每轮epoch中显示当前的训练损失、准确率、验证损失和准确率,以及训练中的KL散度值。
Epoch 0 | Batch 0/150 | Loss 4.158544 best model! save... val loss is 0.00, val acc is 37.46 model best acc is 37.46, best acc epoch is 0 This epoch use 7.61 minutes train loss is 3.72, train acc is 10.84 Epoch 1 | Batch 0/150 | Loss 3.052964 val loss is 0.00, val acc is 37.46 model best acc is 37.46, best acc epoch is 0 This epoch use 3.73 minutes train loss is 2.96, train acc is 25.28 Epoch 2 | Batch 0/150 | Loss 2.588413 val loss is 0.00, val acc is 37.46 model best acc is 37.46, best acc epoch is 0 This epoch use 3.71 minutes train loss is 2.59, train acc is 33.27 ...登录后复制
6.4 测试流程
可参考快速开始章节中的描述
此时的输出为:
<br/>登录后复制
八、模型信息
训练完成后,模型和相关LOG保存在./results/5w1s和./results/5w5s目录下。
训练与测试记录存于results目录;框架版本Paddle 支持GPU、CPU,应用场景为小样本学习,Aistudio项目:https://aistudio.baidu.com/aistudio/projectdetail/contributionType=sUid=shared=ts=
以上就是FRN小样本学习SOTA模型的详细内容,更多请关注其它相关文章!

