Bilinear CNN Models for Fine-grained Visual Recognition

本文提出了一种双线性CNN架构,用于提升细粒度视觉识别的性能。该模型通过两个CNN特征的池化外积捕获局部部件交互,同时具备端到端训练的能力。实验显示,这种方法在速度、精度和内存使用上优于传统的基于部件和纹理的识别方法,并在多个细粒度识别数据集上取得良好结果。
摘要由CSDN通过智能技术生成

Bilinear CNN Models for Fine-grained Visual Recognition

基本信息

博客贡献人

燕青

作者

Tsung-Yu Lin, Aruni RoyChowdhury, Subhransu Maji

标签

Fine-grained recognition, Texture recognition, Bilinear models, Convolutional Neural Networks, Visualization

摘要

本文提出了双线性CNN,一种有效地将图像表示为两个CNN特征的池化外积的架构,该架构能有效用于细粒度识别任务中。这些模型捕获了局部的部件特征交互,类似于基于部件的模型,但也可以看作是一种无序的纹理表示。基于这种观察,本文提出了一类端到端可训练的双线性模型,这类模型在经典的图像表示上进行推广,如二阶池化、Fisher向量、局部聚合描述符和视觉词袋。这允许通过近似反演对学习到的模型进行特定领域的微调和可视化。通过大量的实验,本文展示了这些模型在各种细粒度、纹理和场景识别数据集上提供了更好的精度、速度和内存权衡。

问题定义

  • 细粒度图像的精细识别问题的难点:

    1. 类内差异性大:相同种类的对象差异性很高,一些具有区分性的信息往往存在一些特定的部位,而因为拍摄时对象姿态的变化,可能会导致具有区分性的信息的丢失。

    2. 类间差异性小:不同类别的对象间高度的相似性,在一些部位可能拥有相同的特征信息。

    3. 背景噪声:图像中的光照、背景都会对识别结果产生影响。

    以细粒度鸟类识别任务为例,考虑到鸟类图像目标在头部和身体等关键区域的几何复杂性,区别于传统处理方式以完整鸟类图像为待处理对象,细粒度鸟类识别的一般方法是:首先进行部件检测,然后进行特征提取,最后选择分类器进行分类。这也可以作为细粒度分类任务的一般方法。

  • 以往研究

    Part-based R-CNNs

    与RCNN类似,首先进行部件检测,然后提取特征并进行分类。

    1

    缺点:强监督学习-需要人工标注部件、两步检测-效率低下、非端到端可训练

方法

方法架构图

2

方法描述

纹理表示

由于纹理表示是基于图像中特征的无序聚合,因此通过设计后,它们具有平移和姿态不变性。基于部件的模型通过定位对象的部件并提取基于其检测位置的特征来构建纹理表示,这使得后续关于类别的推理更加容易。而CNN构建的纹理表示已经被证明在细粒度和纹理识别任务中非常有效。但局部特征往往在聚合前被编码到高维空间,其编码步骤通常是不可微的,难以与现有的端到端深度学习通道相结合,纹理表示的潜力尚未得到充分发挥。

本文的关键理解是,几个广泛使用的纹理编码器可以写成两个适当设计的特征的外积。这导致在两个特征上是线性的表示,因此称为双线性模型。最简单的双线性模型是由两个独立的特征结合一个外积构成的模型。一个变体是两个特征相同且与二阶池化( O2P )表示相关的变体。BoVW,Fisher向量和VLAD表示也可以写成双线性模型。

3
双线性池化

用于图像分类的双线性模型 B B B 由一个四元组 B = ( f A , f B , P , C ) B = (f_A, f_B, P, C) B=(fA,fB,P,C) 组成。其中, f A f_A fA f B f_B fB 为特征函数, P P P 为池化函数, C C C 为分类函数。特征函数是一个映射 f : L × I → R c × D f:L × I→R^{c × D} fL×IRc×D,它取图像 I I I 和位置 L L L 并输出一个大小为 c × D c × D c×D 的特征。我们一般所指的位置可以包括位置和尺度。特征输出在每个位置使用矩阵外积进行组合,即在位置 l l l f A f_A fA f B f_B fB 的双线性特征组合为:
b i l i n e a r ( l , I , f A , f B ) = f A ( l , I ) T f B ( l , I ) bilinear\left(l,I,f_A,f_B\right)=f_A\left(l,I\right)^Tf_B\left(l,I\right) bilinear(l,I,fA,fB)=fA(l,I)TfB(l,I)
f A f_A fA f B f_B fB 必须具有相同的特征维数 c c c 才能兼容( c c c 通常为1)。假设两个特征分别有 M M M N N N 个通道,则在位置 l l l 取出的两个双线性特征分别为两个长度为特征通道数的向量:
a l = f A ( l , I ) T ∈ R M × 1 b l = f B ( l , I ) T ∈ R N × 1 a_l=f_A\left(l,I\right)^T\in \mathbb{R}^{M\times 1}\newline b_l=f_B\left(l,I\right)^T\in \mathbb{R}^{N\times 1} al=fA(l,I)TRM×1bl=fB(l,I)TRN×1
ϕ ( l , I ) = b i l i n e a r ( l , I , f A , f B ) = a l b l T ∈ R M × N \phi(l,I) = bilinear\left(l,I,f_A,f_B\right) =a_lb_l^T\in \mathbb{R}^{M\times N} ϕ(l,I)=bilinear(l,I,fA,fB)=alblTRM×N,得到图像 I I I 在位置 l l l 处的双线性特征矩阵。

3

为了获得图像描述子,池化函数 P P P 聚合了图像中所有位置的双线性特征。池化的一种选择是简单地将所有的双线性特征求和(或平均),即 ϕ ( I ) = ∑ l ∈ L ( l , I , f A , f B ) \phi ( I ) =∑ l ∈L\enspace( l , I , f_A , f_B) ϕ(I)=lL(l,I,fA,fB)。一种替代方案是最大池化。这两者都忽略了特征的位置,因此是无序的。

和池化(sum pooling)为例,则 ϕ ( I ) = ∑ l ∈ L ϕ ( l , I ) = ∑ l ∈ L a l b l T ∈ R M × N \phi(I) = \sum_{l\in L}\phi(l,I) = \sum_{l\in L} a_lb_l^T\in \mathbb{R}^{M\times N} ϕ(I)=lLϕ(l,I)=lLalblTRM×N

A = [ a 1 , . . . , a L ] ∈ R M × L A=[a_1,...,a_L] \in \mathbb{R}^{M\times L} A=[a1,...,aL]RM×L B = [ b 1 , . . . , b L ] ∈ R N × L B=[b_1,...,b_L] \in \mathbb{R}^{N\times L} B=[b1,...,bL]RN×L,即可以用矩阵操作来表示生成 ϕ ( I ) = A B T ∈ R N × L \phi(I)=AB^T \in \mathbb{R}^{N \times L} ϕ(I)=ABTRN×L

3

此后,执行一个归一化步骤,其中双线性向量 x = v e c ( ϕ ( I ) ) x = vec(\phi ( I )) x=vec(ϕ(I)) 通过一个带符号的平方根 y ← s i g n ( x ) ∣ x ∣ y\leftarrow sign(x)\sqrt {|x|} ysign(x)x ,然后进行 L 2 L2 L2 归一化 z ← y / ∣ ∣ y ∣ ∣ 2 z\leftarrow y/||y||_2 zy/∣∣y2

整体步骤为:
ϕ ( l , I ) = a l b l T ∈ R M × N ϕ ( I ) = ∑ l ∈ L ϕ ( l , I ) ∈ R M × N x = v e c ( ϕ ( I ) ) ∈ R M N × 1 y = s i g n ( x ) ∣ x ∣ ∈ R M N × 1 z = y / ∣ ∣ y ∣ ∣ 2 ∈ R M N × 1 \begin{align} \phi(l,I) &= a_lb_l^T &\in \mathbb{R}^{M\times N} \\ \phi(I) &= \sum_{l\in L}\phi(l,I) &\in \mathbb{R}^{M\times N} \\ x &= vec(\phi(I)) &\in \mathbb{R}^{MN\times 1} \\ y &=sign(x)\sqrt{|x|} &\in \mathbb{R}^{MN\times 1}\\ z&=y/||y||_2 &\in \mathbb{R}^{MN\times 1} \end{align} ϕ(l,I)ϕ(I)xyz=alblT=lLϕ(l,I)=vec(ϕ(I))=sign(x)x =y/∣∣y2RM×NRM×NRMN×1RMN×1RMN×1

  • 端到端训练

    只要特征 A A A B B B 在模型参数上是可微的,就可以对整个模型进行端到端的训练。

    3
  • 特征函数

    特征函数可以不共享或共享部分/全部前馈计算参数。

    a - 多模态双线性模型

    c - 同源双线性模型

    3

实验

实验设置

数据集
  • CUB-200-2011

    该数据集是由加州理工学院在2010年提出的细粒度数据集的拓展,也是目前细粒度分类识别研究的基准图像数据集。

    该数据集共有11788张鸟类图像,包含200类鸟类子类,其中训练数据集有5994张图像,测试集有5794张图像,每张图像均提供了图像类标记信息,图像中鸟的bounding box,鸟的关键part信息,以及鸟类的属性信息。

基准方法
  • SIFT+FV:以SIFT提取特征,FV编码特征
  • FC:以VGG-M/D提取特征,全连接层编码特征
  • NetBoVW:以VGG-M/D提取特征,BoVW编码特征
  • VLAD:以VGG-M/D提取特征,VLAD编码特征
  • FV:以VGG-M/D提取特征,Fisher向量编码特征
  • B-CNN:以VGG-M/D/[M+D]提取特征,双线性池化编码特征
实验结果
3
其它

在速度方面,双线性CNN与其他CNN架构相比具有优势。BCNN模型架构在基于MatConvNet框架的实现中,使用cudnn - v5进行GPU加速,在NVIDIA Titan X GPU上每秒运行30到100帧。即使用更快的目标检测模块,如Faster R-CNNs、SSD,基于部件的细粒度识别模型也要慢2 ~ 10倍。此外,BCNN模型只需要图像标签,属于弱监督学习,因此可以很容易地应用于不同的细粒度数据集。

相关知识链接

下载

数据集下载:CUB-200-2011

论文源码:bilinear-cnn

基准实验涉及的论文

BoVW:Visual categorization with bags of key points

VLAD:Aggregating local descriptors into a compact image representation

FV:Improving the Fisher kernel for large-scale image classification

相关工作涉及的论文

part-based RCNN:Part-Based R-CNNs for Fine-Grained Category Detection

后续研究涉及的论文

Improved Bilinear Pooling with CNNs

其他

双线性池化 (By:林小北 [知乎])

总结

亮点

  • 解决了现有基于部件和纹理表示的缺陷,将广泛使用的编码器用两个特征的外积表示,使其端到端可训练。
  • 同源双线性池化编码了特征的二阶信息,在一些任务下能比一阶信息表现更为优秀。
  • 弱监督学习,只需要图像类别信息而不需要人工标注框。

[不足]

  • 双线性池化后特征维数过高,导致全连接层参数量巨大,降低训练及测试速度

[启发]

将提取的特征进行高阶编码,可能会得到更好的模型效果。

BibTex

@inproceedings{lin2015bilinear,
    Author = {Tsung-Yu Lin and Aruni RoyChowdhury and Subhransu Maji},
    Title = {Bilinear CNN Models for Fine-grained Visual Recognition},
    Booktitle = {International Conference on Computer Vision (ICCV)},
    Year = {2015}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值