Hierarchical Bilinear Pooling for Fine-Grained Visual Recognition

ECCV 2018 华中科技大学

论文

代码

1. Abstract

在细粒度图像分类中,双线性池化(bilinear pooling)的模型已经被证明是有效的,然而,先前的大多方法忽略了这样一个事实:层间部分特征交互和细粒度特征学习是相互关联的并且可以相互加强。根据这一问题,作者提出一种新的模型结构。(1)提出了一种可跨层的双线性池化方法,用来捕获层间部分特征的关系。(2)提出一种集成多个跨层双线性特征的分层双线性池化框架,增强模型的表示能力。

2. Introduction

观察对象局部来区分子类别,e.g. 根据鸟类背部的颜色或喙的形状来辨别它们的品种

两步:firstly localize the foreground object or object parts, e.g., by utilizing available bounding boxes or part annotations, and then extract discriminative features for further classification.

人工标注的不准确性和成本问题 ——>弱监督的细粒度图像分类(只需要给定image level的类别就可)。

3. Hierarchical Bilinear Model

3.1 Factorized Bilinear Pooling

  • 输入图像: II

  • 经CNN后输出的特征图:XRhwcX∈R^{h\cdot w \cdot c}

  • 对X进行空间描述:x=[x1,x2,...,xc]Tx=[x_1,x_2,...,x_c]^T

线性模型定义:
细粒度分类:HBP

其中WiW_iccc*c大小的投影矩阵,ziz_i为双线性模型的输出,对于o维的输出z,要学习的参数是W=[W1,W2,..,Wo]RccoW=[W_1,W_2,..,W_o]∈R^{c \cdot c \cdot o}

对1中投影矩阵WiW_i进行分解:
细粒度分类:HBP

其中UiRcU_i∈R^cViRcV_i∈R^c,o表示 Hadamard product
细粒度分类:HBP
PRdoP∈R^{d \cdot o}表示分类矩阵,URcdU∈R^{c \cdot d}VRcdV∈R^{c \cdot d}zRoz∈R^o

3.2 Cross-Layer Bilinear Pooling

细粒度的子类别往往具有相似的外观,只能通过局部属性的细微差异来区分,例如鸟类的颜色、形状或喙长。

单个卷积层的**是不完全的,因为每个对象部分都有多个属性,这些属性对于区分子类别至关重要。(总结双线性CNN不足)

为了捕获更细粒度的部分特征,开发了一个跨层的双线性池方法,该方法将CNN中的每个卷积层视为部分属性提取器,然后将不同卷积层的特征通过元素乘的方式进行集成,建立部分属性的层间交互模型。

公式(3)可以改写为:
细粒度分类:HBP

x和y表示在同一空间位置不同卷积层的局部描述符。

the convolution activations and project activations encode global and local feature of object respectively. coarse-to-fine perception

3.3 Hierarchical Bilinear Pooling

利用不同卷积层之间的层间特征交互,有利于捕获细粒度子类别之间的鉴别部分属性。增强特征的表示能力。

将分层双线性池化分为交互阶段( interaction stage)和分类阶段(classification stage)
细粒度分类:HBP

为了更好的实现层间特征交互,将跨层的双线性池模块的多个zintz_{int}连接起来,得到HBP模型的交互特征。
细粒度分类:HBP

其中PP表示分类矩阵,U,V,S....U,V,S....分别对应卷积层特征向量 x,y,z 的投影矩阵。代码中concat操作

模型框架:细粒度分类:HBP细粒度分类:HBP

本来以为最后三层conv拉出来做层间部分特征交互,其所包含的语义信息差不多,通过跟老师沟通,最后三层的感受野不同,也会导致准确率不一致。

4. Experiments

数据集:
细粒度分类:HBP

只在实验中使用category labels (”弱监督“:不使用bbox和keypoints)

实现细节:

为了公平与其它model做对比,也采用了VGG16,移去全连接层,留下卷积部分(后续可以改backbone提升效果Inception、ResNet,DenseNet…看知乎总结的论文中常用的效果好的model 知乎链接

输入图片大小 448*448

数据增强:

  • 训练: random sampling and horizontal flipping
  • inference:center cropping

batch size =16、momentum=0.9、weight decay = 51045*10^{-4}、lr=10310^{-3}、周期性退火0.5

5.总结

Hierarchical Bilinear Pooling 比 Bilinear Pooling多的就是层之间的交互:

假设两个CNN都采用VGG-16结构,去掉VGG的全连接层,卷积层最后三层定义为relu5_1, relu5_2, relu5-3,Bilinear Pooling 就是将CNN1的relu5-3和CNN2的relu5-3做了Bilinear Pooling操作,得到的结果进行分类。而Hierarchical Bilinear Pooling是将CNN2的relu5-3分别和CNN1的relu5-1,relu5-2,relu5-3做Bilinear Pooling操作,得到三组特征,并将这些特征拼接在一起,最后进行分类。(特征大大增加了!!特征冗余问题! )

相关文章: