论文提出细粒度分类解决方案CAP ,多的细通过上下文感知的重注注意力机制来帮助模型发现细微的特征变化 。除了像素级别的意力有趣注意力机制 ,还有区域级别的机制注意力机制以及局部特征编码方法 ,与以往的粒度视觉方案很不同 ,值得一看
来源 :晓飞的分类方案算法工程笔记 公众号
论文: Context-aware Attentional Pooling (CAP) for Fine-grained Visual Classification
论文认为大多数优秀的细粒度图像识别方法通过发掘目标的局部特征来辅助识别,却没有对局部信息进行标注,重注而是意力有趣采取弱监督或无监督的方式来定位局部特征位置。而且大部分的机制方法采用预训练的检测器,无法很好地捕捉目标与局部特征的粒度关系
。为了能够更好地描述图片内容 ,分类方案需要更细致地考虑从像素到目标到场景的多的细信息,不仅要定位局部特征/目标的重注位置,还要从多个维度描述其丰富且互补的意力有趣特征 ,从而得出完整图片/目标的内容。
论文从卷积网络的角度考虑如何描述目标,提出了context-aware attentional pooling(CAP)模块,能够高效地编码局部特征的位置信息和外观信息 。该模块将卷积网络输出的特征作为输入 ,学习调整特征中不同区域的重要性,从而得出局部区域的丰富的外观特征及其空间特征,进而进行准确的分类。
论文的主要贡献如下:
论文算法的整体流程如上图所示,输入图片,输出具体从属类别,包含3个组件(3组参数) :
定义卷积网络输出的特征为 ,CAP的模块综合考虑像素级特征 、小区域特征 、大区域特征以及图片级特征的上下文信息进行分类。
像素级特征的上下文信息主要学习像素间的关联度,在计算位置的输出时根据关联度综合所有其他像素特征,直接使用self-attention实现,特征转化使用卷积。这一步直接对主干网络输出的特征进行操作,但没在整体流程图中体现。
为了更高效地学习上下文信息,论文在特征图上定义不同粒度级别的基本区域,粒度级别由区域的大小决定。假设位置上的最小的区域为为例 ,可通过放大宽高衍生出一系列区域,, 。在不同的位置产生相似的区域合集,得到最终的区域合集 。覆盖了所有的位置的不同宽高比区域,可以提供全面的上下文信息 ,帮助在图片的不同层级提供细微特征。
按照上一步,在特征图上得到个区域 ,大小从最小的到最大的,论文的目标是将不同大小的区域表示为固定大小的特征,主要采用了双线性插值。定义为坐标转换函数,为区域坐标,对应的特征值为 ,则转换后的图片的坐标上的值为:
为采样函数 ,为核函数,这里采用的是最原始的方法,将目标坐标映射回原图,取最近的四个点,按距离进行输出,最终得到池化后的固定特征。
这里 ,论文使用全新的注意力机制来获取上下文信息,根据与其他特征的相似性进行加权输出 ,使得模型能够选择性地关注更相关的区域 ,从而产生更全面的上下文信息。以查询项和一组关键词项 ,输出上下文向量:
参数矩阵和用来将输入特征转换为查询项核关键项 ,为非线性组合 ,和为偏置项,整体的可学习参数为,而注意力项则代表两个特征之间的相似性 。这样,上下文向量能够代表区域蕴含的上下文信息,这些信息是根据其与其他区域的相关程度获得的,整体的计算思想跟self-attention基本相似。
上下文向量描述了区域的关键程度和特点
,为了进一步加入空间排列相关的结构信息
,论文将区域的上下文向量转为区域序列(论文按上到下 、左到右的顺序) ,输入到循环神经网络中,使用循环神经网络的隐藏单元来表达结构特征。
区域的中间特征可表示为,采用LSTM,包含LSTM的相关参数
。为了增加泛化能力和减少计算量,上下文特征由进行全局平均池化得到,最终输出上下文特征序列对应的隐藏状态序列,后续用于分类模块中。
为了进一步引导模型分辨细微的变化 ,论文提出可学习的池化操作,能够通过组合响应相似的隐藏层来整合特征信息。论文借鉴NetVLAD的思想 ,用可导的聚类方法来对隐藏层的响应值进行转换 ,首先计算隐藏层响应对类簇的相关性 ,再加权到类簇的VLAD encoding中 :