深度学习最大的诟病就是靠海量的数据就行驱动,与人的认知过程不一样,人可以只通过少量的训练样本就可以快速泛化到目标任务上。受人认知过程的影响。小样本学习被提出并成为当前一个比较热门的研究领域,但问题来了,做cv任务的话深度学习强大的特征表示能力还是很牛掰的。人们希望既能用上DCNN的特征表示能力又能做小样本,吐槽一下学术界对小样本的设置N-way K-shot,虽然每一个任务下样本很少,但是采样的方式就是一堆排列组合的方式。样本是少了,但任务多了。
小样本图像分类现阶段主要的解决方法有三种:首先就是样本少了怎么办,最直接的方法就是数据增强,这个地方数据增强又可划分为两类,基于内部数据的数据增强与基于外部数据的数据增强。其次就是元学习的方法,为了学习而学习。元学习强调的的是元知识的表征,与迁移学习目的一样。但各自强调的点又不一样。最后就是迁移学习了。
说了一堆废话。原型网络属于元学习中的一个方法,基于度量的元学习方法。针对小样本分类问题提出了原型网络。在训练集中,对于每一种出现的类别,只给出少量样本,但分类器能够很好的泛化到其他没有出现于训练集中的新类别。原型网络会学习一个度量空间,在该空间中,可以通过计算与每个类的对应原型表示的距离来进行分类,距离哪个类的原型表示最近,则被判断为哪个类。与其他小样本学习方法相比,该方法反映了一种更简单的归纳偏差,有利于在这种有限的数据范围内使用,并取得优异的效果。论文表明一些简单的设计决策比最近涉及复杂体系结构选择和元学习的方法可以产生较好的改进效果。
接下来对该论文进行复现。
给个代码链接code 论文链接paper 代码复现
ubuntu或windows下复现都一样,默认有计算资源。
ubuntu下或windows需要搭建环境

conda create -n prototypical networks python==3.6
conda activate prototypical networks
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0

环境基本上弄好了,可能还缺一些需要的包。缺啥装啥就行了

本文以miniImageNet为例,吐槽一下原作者给的数据链接没有访问的权限。这里给个可以访问的数据链接google 偷个懒用google colab实现一下,首先先挂上谷歌云硬盘然后运行以下命令下载开源代码

cd /content/drive/MyDrive
git clone https://github.com/yinboc/prototypical-network-pytorch

cd到原型网络项目下

cd prototypical-network-pytorch
pwd
#查看当前目录确保是在prototypical-network-pytorch项目下

环境的话可以不用装了,谷歌云自带pytorch环境就可以用。强迫症当我没说,基本上就行了。别忘了把下载的数据放到prototypical-network-pytorch项目下,至此基本上就可以了。
直接train一下

!python train.py

小样本图像分类2023 小样本图像分类方法_深度学习


实验以5-way 1-shot为例,需要其他实验设置的可自行更改。

训练真花时间,想要个深度学习笔记本。淦

训练200个epoch后记得测试一下

!python test.py

不作具体代码讲解,建议paper 与代码对应看。理解会更深刻!