论文阅读笔记《Dense Classification and Implanting for Few-Shot Learning》

原文下载:https://arxiv.org/pdf/1903.05050.pdf
 源码地址:无
 论文来源:CVPR2019
 部分引用格式的是我自己添加的一点认识,其他部分都是摘自深视大佬:https://blog.csdn.net/qq_36104364/article/details/106545685

核心思想

   本文是对基于度量学习的小样本学习算法进行改进。常见的度量学习算法通常利用一个嵌入式网络对图像进行特征提取,然后利用一个线性分类器进行分类。在训练过程中得到的线性分类器权重可以看作对应每个类别的权值(class weights),在测试时,就比较查询图像对应的特征值与每个类别权值之间的相似性,并以此进行分类预测。二维图像经过特征提取后得到的特征信息是高维的张量,因此通常需要压缩维度,以便于计算相似性。常见的压缩维度的方式有两种:压平(Flattening)或者池化(Pooling).
论文阅读笔记《Dense Classification and Implanting for Few-Shot Learning》_第1张图片

   图a所示的就是压平操作,就是将原本为h × w × d 维的张量,拉伸为r × d维的张量,其中r = h w。这一方法具有较高的区分能力,但是不具备空间不变性(直接展平,失去了空间维度的信息 )b所示的是池化操作,利用全局平均池化将每个通道的特征图都压缩为一个值,得到一个长度为d 的特征向量a 。这一方式能够显著降低维度,并且具有空间不变性,但区分能力较差。本文提出一种称之为稠密分类(Dense classificatio)的方法,对于提取到的特征图*ϕ ( x )*不进行维度压缩,而是对空间中的每一点对应的特征向量进行分类预测。具体而言,假设特征提取网络最后一层输出了维度为h × w × d 的张量ϕ ( x ) ,那可以将其拆分成r = h w 个长度为d 的特征向量ϕ (k)(x),然后分别计算类别权重与ϕ ^( k )^ ( x ) 之间的距离,对每个空间上的点都进行类别预测,如下图所示。
论文阅读笔记《Dense Classification and Implanting for Few-Shot Learning》_第2张图片

   在元测试阶段,对于新类别的样本,通常是对已训练好的特征提取网络ϕθ 进行微调训练,以满足新类别样本特征表达的需要。在低层级的网络中特征信息的通用性较强,对于不同类别的样本都能提取到有用的信息,而随着网络的加深,在高层级的网络中,特征信息就具备较强的区分度,而不具备通用性了。因此本文提出一种称为“神经移植”(Neural Implants)的方法,针对高层级的特征提取网络进行改进,改进的结构如下图所示
论文阅读笔记《Dense Classification and Implanting for Few-Shot Learning》_第3张图片

   如图所示,低层级的特征提取网络保持不变,在高层级的卷积层上增加一个新的分支,与原有的卷积层构成一个平行的结构。冻结原本高层级网络的权重,使其不再更新,以保留对于原有类别的特征提取能力,然后对于新类别的样本,其特征信息会分别经过两个分支网络,并且将原本高层级网络提取的特征图,与新添加的网络提取的特征图级联起来,作为新添加网络分支下一层的输入。最后得到新类别样本对应的特征信息ϕθ,θ’ (x)。这一方法既消除了使用深层网络出现过拟合的问题,又提高了特征提取网络对于新类别样本的表征能力。

实现过程

网络结构

   嵌入式特征提取网络采用ResNet-12

损失函数

   如上文所述,计算损失要对空间中的每个点分别计算再求和,如下式
在这里插入图片描述

其中
在这里插入图片描述
在这里插入图片描述

   s τ 表示scaled cosine similarity,计算过程如下

   其中,x ^ = x / ∥ x ∥,⟨,⟩表示Frobenius内积,τ 表示放缩系数。

Frobenius内积其实就是指矩阵内积,把两个同样大小的矩阵对应的元素进行相乘就可以了。
https://blog.csdn.net/oldlybaby/article/details/108307712

训练策略

   在stage1,学习域的表示,对于n个基类。对应fig4中的紫色和黑色的箭头流动。
   在stage2阶段,在元测试过程中,给定一个新任务,

  • 首先利用阶段1训练好的网络,计算新类n’的原型,并移植到分类器上,整个网络可以预测n+n’个类(n’指新类)。
    -然后使用新任务中的支持查询集继续优化。对应Fig4中的红色和黑色的箭头流动。
    没有代码,理解的不一定对,

元测试阶段,每次只选择一个样本作为查询样本,其余样本都作为支持集,类似《Few-Shot Learning with Localization in Realistic Settings》提出的留一交叉验证法

创新点

  • 提出了稠密分类的方法,对空间中的每个点都进行分类预测,并计算损失,提高了分类的细粒度

这里称为对空间中的局部信息进行分类更合适一点,可以看做对一个图像划分为5*5的网格,然后对每个网格都进行了分类,充分利用了局部信息。

  • 提出了神经移植的方法,保留已训练好的网络参数,增加新的网络分支用于处理新的类别样本

算法评价

   作者针对原有的小样本学习算法提出两点改进:稠密分类与神经移植。首先要说明的是,这两点改进都是针对元测试阶段,也就是网络已经在一个数据集上训练好了,目前要针对新的类别,且每个类别仅包含少量样本的情况进行微调训练。稠密分类的思想与DN4算法中提到的局部描述子的概念非常相似,都是通过增加分类的细粒度,不在图片级别上进行类别预测,而在像素(或超像素)级别上进行类别预测,如果细粒度进一步提高到对原图中每个像素进行类别预测,那么就成为语义分割任务了。而神经移植的思想有点类似于迁移学习的一些方法,只不过是在保留原有网络的基础上,对网络结构进行了“拓宽”,但是新增加网络分支的参数初始化怎么处理呢?如果是从随机状态开始训练,少量的数据集是否足够呢?

这篇论文写得还是比较拗口的,个人看来公式太杂太乱了,而且没有开源代码。

————————————————
版权声明:本文为CSDN博主「深视」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36104364/article/details/106545685

你可能感兴趣的:(小样本)