这是2019年CVPR的一篇文章,作者来自香港大学和Deepwise AI Lab,该文章是关于细粒度图像分类的
解决的问题
用图像级标签训练的深度神经网络只倾向于聚焦于discriminative parts(有识别力的部分),而忽略了其他object parts。
方法: 我们以弱监督的方式建立互补局部模型(complementary parts model),以检索由卷积神经网络检测到的被domain object parts抑制的信息。
(1)采用基于MASK R-CNN和CRF的分割方法,通过弱监督对象检测和实例分割,提取rough object instances。
(2)估计并搜索每个对象实例的最佳part model
(3)构建双向长短期记忆(LSTM)网络,将这些互补部分的part信息融合并编码成图像分类的综合特征
Weakly Supervised Object Detection and Instance Segmentation
Coarse Object Mask Initialization. 给定一个图像
I
I
I和它的标签
c
c
c,分类网络的最后的卷积层的特征图被标记为
ϕ
(
I
,
θ
)
∈
R
K
×
h
×
w
\phi(I,\theta)\in \R^{K\times h\times w}
ϕ(I,θ)∈RK×h×w,其中
θ
\theta
θ代表网络
ϕ
\phi
ϕ的参数,
K
K
K代表通道数,
h
,
w
h,w
h,w分别代表特征图的高和宽。接下来,在
ϕ
\phi
ϕ上使用全局平均池化获得池化的特征
F
k
=
∑
x
,
y
ϕ
(
x
,
y
)
F_k=\sum_{x,y}\phi(x,y)
Fk=∑x,yϕ(x,y)。在最后添加分类层,对于类别c的分类激活图(CAM)如下所示:
其中
w
k
c
w_k^c
wkc是在全局平均池化层中,对应于第c个类别的第k个通道的权重。获得的类别激活图
M
c
M_c
Mc通过双线性插值被上采样到原始图片的大小
R
H
×
W
\R^{H\times W}
RH×W。因为一个图片能够有多个对象实例,在类激活图
M
c
M_c
Mc上可以观察到多个局部最大响应。我们对这个图应用multi-region level set分割去分割候选对象实例。接下来,对于每个实例,我们将类激活规范化为[0,1]范围。假设我们在CAM中有
n
n
n个对象实例,我们通过归一化CAM建立了一个对象概率图
F
∈
R
(
n
+
1
)
×
H
×
W
F\in\R^{(n+1)\times H\times W}
F∈R(n+1)×H×W。最开始的
n
n
n个对象概率图代表在图片中某个类别的概率,第
(
n
+
1
)
(n+1)
(n+1)个概率图代表背景的概率。背景概率图用下面公式计算
条件随机域(CRF)被用来提取高质量的对象分割。为了使用CRFs,一个标签图
L
L
L通过下面公式产生。
其中
σ
c
\sigma_c
σc通常被设置为0.8,一种固定的阈值,用来确定某个像素属于某个对象或背景。标签图
L
L
L被输入到CRF去产生对象实例分割,它被作为一个用于Mask-RCNN训练的伪groundtruth标签。Fig 2 stage 1 展示了整个对象实例分割的过程。
Jointly Detect and Segment Object Instance. 给定一个图像
I
I
I的分割的对象实例的集合,
S
=
[
S
1
,
S
2
,
.
.
.
,
S
n
]
S=[S_1,S_2,...,S_n]
S=[S1,S2,...,Sn],和他们对应的在前一阶段产生的类别标签,我们得到了每个分割的最小的bounding box去建立一个proposals,
P
=
[
P
1
,
P
2
,
.
.
.
P
n
]
P=[P_1,P_2,...P_n]
P=[P1,P2,...Pn]。proposal P,segments S 和他们对应的类别标签用于训练Mask R-CNN ,使其对proposal和mask进一步的调优。用这种方法,我们将目标检测和实例分割转换为全监督学习。
CRF-Based Segmentation. 假设有对应于类别c的
m
m
m个对象proposals,
P
∗
=
[
P
1
∗
,
P
2
∗
,
.
.
.
,
P
m
∗
]
P^*=[P_1^*,P_2^*,...,P^*_m]
P∗=[P1∗,P2∗,...,Pm∗]和它们对应的分割
S
∗
=
[
S
1
∗
,
S
2
∗
,
.
.
.
,
S
m
∗
]
S^*=[S_1^*,S_2^*,...,S^*_m]
S∗=[S1∗,S2∗,...,Sm∗],它们的分类得分高于
ϕ
0
\phi_0
ϕ0,它是用来移除异常提议的阈值。然后,以重合阈值
τ
\tau
τ来对
m
m
m个提议应用非极大值抑制。假设
n
n
n是对象提议保持之后的,
O
=
[
O
1
,
O
2
,
.
.
.
,
O
n
]
O=[O_1,O_2,...,O_n]
O=[O1,O2,...,On],其中n<<m。
现有的研究大多利用NMS来抑制大量共享同一类标签的提案,以获得少量不同的对象提案。然而,在我们的弱监督设置中,NMS过程中被抑制的提案实际上包含丰富的对象部件信息,如图2所示。具体来说,被对象提案
O
j
O_j
Oj抑制的每个提案
P
i
∗
∈
P
∗
P_i^*\in P^*
Pi∗∈P∗可以被视为
O
j
O_j
Oj的一个补充部分。因此,抑制的提议,
P
i
∗
P_i^*
Pi∗,能够被用来优化
O
j
O_j
Oj。我们通过初始化类别概率图
F
∗
∈
R
(
n
+
1
)
×
H
×
W
F^*\in\R^{(n+1)\times H \times W}
F∗∈R(n+1)×H×W实现了这个方法。对于每个被
O
j
O_j
Oj抑制的提案
P
i
∗
P_i^*
Pi∗,我们通过双线性插值将其提案分割mask
S
i
∗
S_i^*
Si∗的概率图添加到
F
j
∗
F_j^*
Fj∗上相应的位置。类别概率图标准化到[0,1]。对于第
(
n
+
1
)
(n+1)
(n+1)个概率图,即背景图,我们定义如下
给定类别概率图
F
∗
F^*
F∗,如前一阶段所述,再次使用CRF对实例分割结果进行细化和校正。
Iterative Instance Refinement. 我们多次交替使用基于CRF的分割和基于Mask R-CNN的检测和实例分割,逐步细化目标实例的定位和分割。图2为迭代实例细化过程。
Complementary Parts Model
Model Definition. 通过前面阶段的分析,给定一个对象
O
i
O_i
Oi,它的对应的抑制提议,
P
∗
,
i
=
[
P
1
∗
,
i
,
P
2
∗
,
i
,
.
.
,
P
k
∗
,
i
]
P^{*,i}=[P_1^{*,i},P_2^{*,i},..,P_k^{*,i}]
P∗,i=[P1∗,i,P2∗,i,..,Pk∗,i],可能能够获得有用的对象信息和定位正确的对象位置。有必要为下面的分类任务确定信息最丰富的建议。在这一部分,我们提出了一个complementary parts模型
A
\mathcal{A}
A来进行图像分类。该模型由一个覆盖整个对象及其上下文的root部分、一个覆盖对象核心区域的中心部分和一个固定数量的周围建议,涵盖不同的对象部分,但仍然保持足够的区别性信息。一个包含
n
n
n个部件的对象的complementary parts模型被定义为一个
(
n
+
1
)
(n+1)
(n+1)tuple
A
=
[
A
1
,
.
.
.
,
A
n
,
A
n
+
1
]
\mathcal{A}=[A_1,...,A_n,A_{n+1}]
A=[A1,...,An,An+1],其中
A
1
A_1
A1是对象的中心部分,
A
n
+
1
A_{n+1}
An+1是root部分,
A
i
A_i
Ai是第
i
i
i个部分。每部分的模型通过tuple
A
i
=
[
ϕ
i
,
u
i
]
A_i=[\phi_i,u_i]
Ai=[ϕi,ui]定义,其中
ϕ
i
\phi_i
ϕi是第
i
i
i部分的特征,
u
i
u_i
ui是一个
R
4
\R^4
R4的tuple,用来描述part的几何信息,即part 中心和part 大小
(
x
i
,
y
i
,
w
i
,
h
i
)
(x_i,y_i,w_i,h_i)
(xi,yi,wi,hi)。没有任何缺失parts的潜在parts模型称为对象假设(object hypothesis)。为了使对象 parts之间相互补充,它们的外观特征或位置的差异应该尽可能的大,而parts的组合得分也应该尽可能的大。在寻找相互补充的区别性parts的过程中,这些标准起到了约束的作用。对象假设(object hypothesis)的得分
S
(
A
)
\mathcal{S} (\mathcal{A})
S(A)由所有对象部分减去外观相似性和不同部分之间的空间重叠的总和得分给出。
其中
f
(
ϕ
k
)
f(\phi_k)
f(ϕk)是第
k
k
k个part在Mask R-CNN的分类分支上的得分,
d
s
(
ϕ
p
,
ϕ
q
)
=
∣
∣
ϕ
p
−
ϕ
q
∣
∣
2
d_s(\phi_p,\phi_q)=||\phi_p-\phi_q||^2
ds(ϕp,ϕq)=∣∣ϕp−ϕq∣∣2是语义相似和
I
O
U
(
u
p
,
u
q
)
IOU(u_p,u_q)
IOU(up,uq)是parts
p
p
p和
q
q
q之间的空间重合,
λ
0
=
0.01
\lambda_0=0.01
λ0=0.01和
β
0
=
0.1
\beta_0=0.1
β0=0.1是两个常量。给定一组对象假设,我们可以选择一个得分最大的假设作为最终的对象parts模型。搜索最优子集的提议,使上述得分最大化是一个组合优化问题。在下面,我们使用一个快速的启发式算法来寻找一个近似解。
Part Location Initialization. 为了初始化parts模型,我们通过设计一个遵循两个基本规则的基于网格的对象部件模板来简化parts估计。首先,每个parts都应该包含足够的判别信息;第二,parts对之间的差异应该尽可能大。如图2所示,深度卷积神经网络已经证明了其定位对象的最具鉴别性部分的能力。因此,我们将root部分
A
n
+
1
A_{n+1}
An+1设置为表示整个对象的对象提案
O
i
O_i
Oi,然后以
A
n
+
1
A_{n+1}
An+1为中心创建一个
s
×
s
(
=
n
)
s\times s(=n)
s×s(=n)的网格。每一个单位网格的大小是
w
n
+
!
s
×
\frac{w_{n+!}}{s}\times
swn+!×
h
n
+
!
s
\frac{h_{n+!}}{s}
shn+!,其中
w
n
+
1
w_{n+1}
wn+1和
h
n
+
1
h_{n+1}
hn+1是root part
A
n
+
1
A_{n+1}
An+1的宽和高。中心网格单元分配给对象中心部分。其余的网格单元分配给
A
i
A_i
Ai部分,其中
i
∈
[
2
,
3
,
.
.
.
,
n
]
i\in[2,3,...,n]
i∈[2,3,...,n]。然后,我们将每一个part
A
i
∈
A
A_i\in A
Ai∈A初始化为最接近分配的网格单元的提议
P
j
∗
∈
P
∗
P_j^*\in P^*
Pj∗∈P∗。
Parts Model Search. 对于一个包含n个对象parts(我们排除第(n + 1)个parts,因为它是根部分)和k个候选抑制建议的模型,目标函数定义为
其中 K = C k n , k > > n K=C_k^n,k>>n K=Ckn,k>>n是对象假设的总数, S A = [ A 1 , A 2 , . . . , A K ] S_{\mathcal{A}}=[\mathcal{A^1,A^2},...,{\mathcal{A}^K}] SA=[A1,A2,...,AK]是对象假设的集合。如前所述,直接寻找最优的parts的模型是很困难的。因此,我们采用了一个贪心的查找策略去查找 A ^ \mathcal{\widehat{A}} A 。具体地说,我们依次遍历 A A A中的每一个 A i A_i Ai,并找到 P ∗ P^* P∗中使 A ^ \mathcal{\widehat{A}} A 最小的 A i A_i Ai的最优对象部分。总体时间复杂度从指数级降低为线性( O ( n k ) O(nk) O(nk))。从图2中可以看出,搜索过程中产生的对象假设覆盖了对象的不同部分,而不仅仅是核心区域。
Image Classification with Context Enoding
CNN Feature Extractor Fine-tuning. 给定一个输入的图片
I
I
I,和在前一个阶段中被构造的parts 模型
A
=
[
A
1
,
.
.
.
,
A
n
,
A
n
+
1
]
\mathcal{A}=[A_1,...,A_n,A_{n+1}]
A=[A1,...,An,An+1],各部分对应的图像patch记为
I
(
A
)
=
[
I
(
A
1
)
,
I
(
A
2
)
,
.
.
.
,
I
(
A
n
)
,
I
(
A
n
+
1
)
]
I(\mathcal{A})=[I(A_1),I(A_2),...,I(A_n),I(A_{n+1})]
I(A)=[I(A1),I(A2),...,I(An),I(An+1)]。在图像分类过程中,通常使用图像的随机裁剪来训练模型。因此,除了(n+1)个patch外,我们还附加了一个原始图像的随机裁剪作为第(n+ 2)个图像patch。添加随机裁剪的补丁的动机是为了在训练过程中包含更多的上下文信息,因为那些与对象parts对应的patch主要关注对象本身。每个patch都与最初裁剪的图像共享相同的标签。来自所有原始训练图像的所有patch形成一个新的训练集,用于对在ImageNet上预先训练的CNN模型进行细化。这个微调模型作为所有图像patch的特征提取器。
Stacked LSTM for Feature Fusion. 我们提出了一个堆叠的LSTM模型
ϕ
l
(
.
;
θ
l
)
\phi_l(.;\theta_l)
ϕl(.;θl)用于特征融合和性能增强,如Fig 3所示。首先,来自complementary parts模型的(n+2)patch通过上一步训练好的CNN特征提取器
ϕ
c
(
.
;
θ
c
)
\phi_c(.;\theta_c)
ϕc(.;θc)进行增进。当前步的输出被表示为
Ψ
(
I
)
=
[
ϕ
c
(
I
;
θ
c
)
,
ϕ
c
(
I
(
A
1
)
;
θ
c
)
,
.
.
.
,
ϕ
c
(
I
(
A
n
+
2
)
;
θ
c
)
]
\Psi(I)=[\phi_c(I;\theta_c),\phi_c(I(A_1);\theta_c),...,\phi_c(I(A_{n+2});\theta_c)]
Ψ(I)=[ϕc(I;θc),ϕc(I(A1);θc),...,ϕc(I(An+2);θc)]。接下来,我们建立了一个两层叠加的LSTM来融合所提取的特征
Ψ
(
I
)
\Psi(I)
Ψ(I)。第一个LSTM的隐藏状态被输入到第二个LSTM层,但是第二个LSTM与第一个LSTM的顺序相反。让D(=256)作为隐藏状态的维度。我们使用softmax为每个parts
A
i
A_i
Ai生成类概率向量,
f
(
ϕ
l
(
I
(
A
i
)
;
θ
l
)
)
∈
R
C
×
1
f(\phi_l(I(A_i);\theta_l))\in \R^{C\times 1}
f(ϕl(I(Ai);θl))∈RC×1。最终的图片分类的损失函数被定义如下
其中
f
k
(
ϕ
l
(
I
;
θ
l
)
)
f^k(\phi_l(I;\theta_l))
fk(ϕl(I;θl))是图片
I
I
I属于第
k
k
k个类别的概率,
f
k
(
ϕ
l
(
I
(
A
i
)
;
θ
l
)
)
f^k(\phi_l(I(A_i);\theta_l))
fk(ϕl(I(Ai);θl))是图片patch
I
(
A
i
)
I(A_i)
I(Ai)属于第k个类别的概率,
γ
i
\gamma_i
γi是第
i
i
i个patch的固定的权重。我们有两个设定:首先,单一损失集
γ
i
=
0
(
i
=
2
,
.
.
.
,
n
+
2
)
\gamma_i=0(i=2,...,n+2)
γi=0(i=2,...,n+2),且在序列的开始只保留一个损失;第二,多损失集
γ
i
=
1
(
i
=
2
,
.
.
.
,
n
+
2
)
\gamma_i=1(i=2,...,n+2)
γi=1(i=2,...,n+2)。实验结果表明,与第二次LSTM最后一次输出的单个损失相比,这里使用的多个损失显著提高了分类精度。
很多情况下,多损失函数能够明显的带来性能的提升,这也在后面的实验部分得到了证明,使用多损失函数大约能够得到3%的性能提升。
简答的总结一下,对于这篇论文,其实提成了一个很有意思的点,我个人感觉类似于attention的机制,但是有不尽相同,去挖掘complementary parts的信息,来实现对domain parts精度的优化,是一个很有意思的点,关键在于如何去构建更加有效和准确的complementary part model,这也是以后一个值得探索的方向。