多类别目标计数 Towards Partial Supervision for Generic Object Counting in Natural Scenes 论文笔记
写在前面
趁热打铁,赶紧多看论文啊,开春正是学习的好机会~
- 论文地址:Towards Partial Supervision for Generic Object Counting in Natural Scenes
- 代码链接:Github
- 收录于:TPAMI 2020
一、摘要
现有的计数方法要么依赖于实例水平的标注或者绝对的计数信息来训练出通用的目标计数器。本文引入一种部分监督的设置来减少用于通用目标计数所需的标注,也就是提出了两种新颖的框架:低数量计数 Lower-count(LC),更低的低数量计数 reduced lower-count(RLC)。这两框架是建立在双分支的结构中——图像分类分支和密度分支。仅使用少数量的监督,LC 模块能够减少标注的成本;利用类别的子集和剩下类别的 “类别-标签” 信息,使用 RLC 监督,能够进一步减低大量目标类别的标记成本。RLC 模块采用一种新颖的权重模块层和一种类别无关的密度映射预测模块,拓宽了双分支 LC 框架。数据集采用 COCO,VG,VOC2007,性能牛皮。此外,用于监督 LC 的密度图可进行图像水平的实例分割(弱监督实例分割,👍)。
二、引言
一开始指出通用目标计数定义:枚举出自然场景中不同类别的目标实例。接下来指出目标计数的一些挑战和应用。现有的工作一般利用一种基于定位的策略——先定位后枚举,或者基于回归的方法——直接预测目标的数量。但是这两种方法都需要手工标注,或boxes,或点标注,因此耗时较大。而通过采用图像水平的监督可以减小成本,这就仅仅需要知道图像中每个类别的个数。但是对于大数量多类别的目标计数,基于图像水平的标注也是繁琐的,因为需要标注每一个实例类别的数量。同时随着类别增加,标注时间也在增加,因此现有的基于图像水平标注的方法也不够用。
本文提出一种部分监督的设置来减少标注的成本,这也进一步提升了基于图像水平的监督。思考下标注成本主要源于两个方面:多实例和多类别。因此本文提出了一种新颖的 LC 框架,该框架基于 lower-count(LC) 监督策略,曾受到受到心理学的启发?在 LC 框架中通过在低数量范围内使用目标计数监督。LC 框架由图像分类分支和密度分支组成,图像分类分支估计当前图像内是否存在目标类别,密度分支预测特定类别的目标数量。同时密度分支构建出密度图来预测每个目标类别的实例在空间中的分布,这一空间分布在弱监督实例分割中对于描述相邻位置上的目标实例也十分管用。
LC 监督的设置考虑到了小于4个的目标类别,但自然场景中可能存在大量的目标类别,此种情况下 LC 的标注也是非常麻烦的。因此对于目标计数来说,需要更具有挑战性的部分监督设置,即:所有图像类别的标签是已知的情况下,只需要知道目标类别的一个子集上类别的少数量标注,这就是RLC监督的定义。RLC的作用:使得目标计数器能够泛化到没有数量标注的类别上。RLC 框架是在 LC 双分支框架上拓展的:首先引入一个权重调制层,能迁移标记好的计数类别知识到没有任何数量标注的类别上,同时又为了增强其泛化性(未标记的类别和不相关的类别),在密度分支上又引入了一个子分支。
LC 框架由于产生了更好的密度图,因此可以用在诸如实例分割的任务中。相比之下,RLC 框架可以将目标计数泛化到新类别中(新类别的数量在训练时不会提供)。
需要注意的是:LC模块需要所有类别的数量标注,而 RLC 只需要类别的子集数量标注。
本文贡献如下:
- 提出了两种新颖的框架(LC、RLC)用于通用目标计数。由图像分类和密度图分支组成的 LC 模块能减少多个实例的标注成本,RLC 能减少多个类别的标注成本。RLC 模块用一个新的权重调制层来拓展双端 LC,能够泛化到没有标注的类别上。此外引入了一个类别无关的子分支到 RLC 的密度分支上,能够泛化到独立的类别上,并产生相应的密度图,因此可以估计一幅图像的所有目标数量;
- 提出了用于监督 LC 训练的密度图,证实了其能够应用于图像水平的弱监督实例分割;
- 是第一个引入通用目标计数的方法,旨在将计数能力迁移到监督 RLC 的场景图上(仅提供图像水平的类别标签);
- 在VG和COCO数据集上,对于特定类别以及整个类别或者未提供数量标注类别时的目标计数,表现很好。
三、相关工作
3.1 自然场景中通用的目标计数
首先描述一下目标计数方法的定义,接下来是一些方法的介绍。相比之下,本文提出的方法不需要box类型的监督,不需要超出低数量范围外的计数信息,也不需要后处理,直接对密度图求和即可出结果,无论是在低数量范围内\外的目标,都可以估计出目标的数量。
先检测后计数的方法难以在重叠的场景中精确计数,原因在于该方法可能使得虚假负样本增多以至于计数过低。另外一些采用NMS的方法可能会导致虚假正样本增多以至于过度计数。本文提出的方法详细解释了这种计算损失,因此能够在这种严苛的环境中进行准确的计数。
3.2 监控现场的人群计数
有一些人群计数的方法旨在统计一个或者几个类别的数量,而大多数的人群计数方法通过对预测的密度图求和来获得总数。最近的人群计数方法一般关注于新颖的注意力机制、密度图的产生、上下文或尺度感知设计。
本文解决了大尺度通用化的目标计数,另外就是密集的遮挡、混叠的区域以及众多交错类别的变化使得这个问题更难了。本文提出的 LC 或者 RLC 密度图估计方法在预测特定类别目标数量的同时也能保留目标的空间分布信息。
3.3 在有限制监督上的通用目标计数
本文的目的在于解决通用的带有限制性监督的目标计数,与实例掩码预测(实例分割)和目标检测不同,设计的权重调制层修改了分类分支的卷积权重来估计特定类别的目标数量。本文提出的权重调制层可以从整幅图像中学习而不需要实例级别的标注或池化。
下面指出零次学习,半监督学习和弱监督学习可以应用在目标检测、语义分割中,但是不能应用在自然场景中的目标计数。零样本学习方法一般需要未知类别的自然语言描述,少样本和半监督方法需要每个类别的一些少量训练数据。本文提出的 RLC 框架使用了图像分类任务中的权重,因此不需要数量的标注,但是其权重调制模块并不是卷积层的权重,而是来自于分类任务和计数任务中卷积权重的迁移(无需反向传播)。
3.4 与之前版本的不同之处
本文是之前发表在CVPR2019工作上的拓展,相较于之前版本的拓展有:
- LC 模块之前需要所有类别的少样本数量,现在 RLC 模块仅仅需要类别的子集。也就是说,在 RLC 框架中引入了一种新的权重调制层用于迁移带有标注的计数信息到那些未知的计数信息中去;
- 本文的版本可以预测无关类别的目标总数量,而之前的版本只能预测出特定类别的数量,更甚者能在数百类别的数据集上运行,而这些类别的标注确实很难获得。
- 在COCO数据集上进行了 LC 框架的消融实验,在 VG 和 COCO 上进行了评估。
四、带有部分监督的通用目标计数
首先重复一下之前标注目标计数的成本在于:多实例、多类别。接下来指出 LC 监督:对于所有类别,只需要精确的标记出4个计数样本,极大降低了标注成本;RLC 监督,只需提供目标类别的子集,剩下的类别无需判断是否存在于图像中,进一步降低了多类别多实例标注的成本。
为了提高目标计数在这两个新颖的双端结构下的性能,进一步设计了一种双分支的结构,其中一支为图像类别分支,能够预测出目标类别是否存在于图像中;另外一支名为密度分支,能够产生精确的目标计数密度图。此外,LC 模块在产生特定类别密度图的同时也能保留期空间信息,这可以应用到弱监督实例分割中去。下面一段指出 LC 和 RLC 应用的场合,LC 适合于类别较少的场合,RLC 适合于数百类别的场合。举例:
下图是本文 LC 和 RLC 框架所用符号的说明:
五、低数量(LC)监督框架
设训练图像为
I
I
I,对应的 C 个类别的 GT 计数向量标签为
t
=
{
t
1
,
t
2
,
…
,
t
c
,
…
,
t
C
}
t={\{}t_1,t_2,\dots,t_c,\dots,t_C{\}}
t={t1,t2,…,tc,…,tC}。对于一幅图像来说,可以根据他们包含的实例数量划分为三个不重叠的集合:
S
0
S_0
S0:目标类别并未出现在图像中,即
t
c
=
0
t_c=0
tc=0;
S
S
S:目标类别数量较少,
0
≤
t
c
≤
4
0\le t_c \le 4
0≤tc≤4;
S
~
\tilde{S}
S~:目标类别数量较多,
t
c
≥
t
~
,
t
~
=
5
t_c\ge{\tilde{t}},{\tilde{t}}=5
tc≥t~,t~=5。
LC 的结构
同样建立在 ResNet50 上,为了保留空间信息除去了全局平均池化层。其主干是两个输出分支——分类分支:预测特定类别的目标是否出现在图像上;密度图分支:预测特定类别的数量以及每个目标类别的空间分布;这两个分支的输入都是 2048 维的特征。之后两个分支分别接上两个
1
×
1
1\times1
1×1 卷积分开,得出
P
P
P 个channel 的特征和
C
C
C 个 channel 的特征。
C
C
C 是目标类别的数量,
P
P
P 与
C
C
C 成正比,然后每个再接一个 batch正则化和 ReLU 激活函数。图像分类分支和密度分支最后一层卷积层的输入分别记为
F
cls
\text {F}_{\text {cls}}
Fcls 和
F
cnt
\text {F}_{\text {cnt}}
Fcnt,而之后的输出分别称作 目标类别图:帮助目标定位;密度图:评估给定区域内目标的数量。
损失函数
设图像分类分支中的目标类别图为:
M
=
{
M
c
∈
R
H
×
W
:
c
∈
[
1
,
C
]
}
\mathbf{M}=\left\{\mathbf{M}^{c} \in \mathbb{R}^{H \times W} \quad: c \in[1, C]\right\}
M={Mc∈RH×W:c∈[1,C]}
由密度分支产生的特定类别密度图为:
D
=
{
D
c
∈
R
H
×
W
:
c
∈
[
1
,
C
]
}
\mathbf{D}=\left\{\mathbf{D}^{c} \in \mathbb{R}^{H \times W} \quad: c \in[1, C]\right\}
D={Dc∈RH×W:c∈[1,C]}
其中
H
×
W
H\times W
H×W 为目标类别图和特定类别密度图的尺寸。图像分类分支和密度分支以端到端的方式共同训练:
L
=
L
class
+
L
spatial
+
L
count
⏟
Category-specific density branch
\mathcal{L}=\mathcal{L}_{\text {class }}+\underbrace{\mathcal{L}_{\text {spatial }}+\mathcal{L}_{\text {count }}}_{\text {Category-specific density branch }}
L=Lclass +Category-specific density branch
Lspatial +Lcount
其中第一项为多类别分类损失,后两项为训练密度分支时的空间损失和计数损失。
5.1 图像分类分支
为了解决无点标注监督的问题,本文提出利用图像分类器的粗定位能力来产生一个空间 mask。怎么做呢?利用局部最大位置来产生空间 mask,用作训练密度分支时的伪标签。用公式表示如下:
M
~
c
(
i
,
j
)
=
{
M
c
(
i
,
j
)
,
if
M
c
(
i
,
j
)
>
M
c
(
i
−
r
i
,
j
−
r
j
)
0
,
otherwise
\tilde{\mathbf{M}}^{c}(i, j)=\left\{\begin{array}{ll} \mathbf{M}^{c}(i, j), & \text { if } \mathbf{M}^{c}(i, j)>\mathbf{M}^{c}\left(i-r_{i}, j-r_{j}\right) \\ 0, & \text { otherwise } \end{array}\right.
M~c(i,j)={Mc(i,j),0, if Mc(i,j)>Mc(i−ri,j−rj) otherwise 其中
M
c
∈
R
H
×
W
\text{M}^{c}\in{R}^{H\times W}
Mc∈RH×W 源自于目标类别图
M
\text{M}
M 中的第
c
c
c 个目标类别图。这里
−
r
≤
r
i
≤
r
&
−
r
≤
r
j
≤
r
-r \le r_i \le r ~\&~ -r \le r_j \le r
−r≤ri≤r & −r≤rj≤r,
r
r
r 为计算局部最大值时的半径,这里设为
1
1
1。对于类别
c
c
c 来说,只有
c
∈
{
S
,
S
~
}
c\in{\{}S,\tilde{S}{\}}
c∈{S,S~} or
c
∈
S
0
c\in{S_0}
c∈S0,因此
M
~
c
(
i
,
j
)
\tilde{\mathbf{M}}^{c}(i, j)
M~c(i,j) 非 0 即 1。
为了训练图像分类器, 第
i
i
i 个目标类别的得分
s
c
s^c
sc 设为
M
~
c
\tilde{\mathbf{M}}^{c}
M~c 上的非零元素平均值。而对于这种两分类任务,采用多标签软间隔损失函数来训练。
5.2 密度分支
图像分类分支在峰值图 M ~ c \tilde{\mathbf{M}}^{c} M~c 中使用类别置信度得分可以预测出目标类别在不在图像中,而在图像类别分类分支中获得的目标类别图可以提供一个粗目标定位,为密度图提供空间上的指引。但是由于缺乏有关目标实例数量的先验信息,因此很难区分出单个目标和多个目标,这可能会导致大量的虚假正样本出现在峰值图 M ~ c \tilde{\mathbf{M}}^{c} M~c 中。因此引入了一个硬空间指导模块来利用计数信息并从峰值图 M ~ c \tilde{\mathbf{M}}^{c} M~c 中产生一个空间 mask。
5.2.1 硬空间指导模块
我们用目标类别图中的粗定位能力来产生一个空间 mask。对于所有的目标类别
c
∈
S
c\in{S}
c∈S ,峰值图
M
~
c
\tilde{\mathbf{M}}^{c}
M~c 中的第
t
c
t_c
tc 个最大的峰峰值
h
c
h_c
hc 可以根据 heap-max 算法得到,之后
h
c
h_c
hc 用来产生空间 mask
B
c
\text{B}^{c}
Bc,记为:
B
c
=
u
(
M
~
c
−
h
c
)
\text{B}^{c}=u\left(\tilde{\mathbf{M}}^{c}-{h_c}\right)
Bc=u(M~c−hc)其中
u
(
n
)
u\left(n\right)
u(n) 为单位步长函数,即
n
≥
0
n \ge 0
n≥0 时,
u
(
n
)
=
1
u\left(n\right)=1
u(n)=1 。之后用空间 mask 作为伪标签 mask 来监督密度分支的空间损失,而这个特性也使得密度图中保留着目标的空间分布信息,从而提高了实例分割的性能。
5.2.2 特定类别的密度图
密度分支产生特定类别的密度图
D
c
\text D^{c}
Dc,
D
c
\text D^{c}
Dc 上的像素一方面表明了有多少个目标属于类别
c
c
c,另一方面也可以估计出目标类别
c
c
c 的数量,同时在目标类别图
M
c
\text M^{c}
Mc 上的像素也表明了该像素属于目标类别
c
c
c 的置信度。
L
s
p
a
t
i
a
l
\mathcal L_{spatial}
Lspatial 损失确定了每个目标实例的位置,同时
L
c
o
u
t
\mathcal L_{cout}
Lcout 将特定类别的目标数量给限制在 GT 上
空间损失
空间损失
L
s
p
a
t
i
a
l
\mathcal L_{spatial}
Lspatial 分为:
L
s
p
+
\mathcal L_{sp+}
Lsp+ :其作用是增强
S
S
S 类别中对应的正峰值;
L
s
p
−
\mathcal L_{sp-}
Lsp−:已知
S
0
S_{0}
S0 类别中假的正样本峰值。但是由于绝对的目标数量在训练过程中不会提供,因此
S
S
S 类别不能用在空间损失训练中,而是在之后分别对待。为了采用
L
s
p
a
t
i
a
l
\mathcal L_{spatial}
Lspatial 来监督密度图,本文利用了空间 mask
B
c
\text{B}^{c}
Bc 来作为伪监督 GT mask。
注意:虽然在 空间 mask
B
c
\text{B}^{c}
Bc 上的非零元素意味着目标的位置,但是 0 元素并不意味着该像素对应着背景。因此,可以用 mask 密度图
D
~
c
\tilde{\text D}^{c}
D~c来排除掉 密度图
D
c
\text{D}^{c}
Dc 位置上为 0 的值,该位置对应
B
c
\text{B}^{c}
Bc 位置上为 0 的像素。同时密度图
D
c
\text{D}^{c}
Dc 上的值也可以在训练和反向传播时被除去(防止引入虚假的负样本)。具体操作可用下面的阿达玛乘积来实现:
D
~
c
=
D
c
⊙
B
c
\tilde{\mathrm{D}}^{c}=\mathrm{D}^{c} \odot \mathbf{B}^{c}
D~c=Dc⊙Bc
而空间损失
L
s
p
+
\mathcal L_{sp+}
Lsp+ 表示为:
L
s
p
+
(
D
~
c
,
B
c
)
=
−
∑
∀
c
∈
S
sum
(
B
c
⊙
log
(
σ
(
D
~
c
)
)
)
∣
S
∣
⋅
sum
(
B
c
)
\mathcal{L}_{s p+}\left(\tilde{\mathbf{D}}^{c}, \mathbf{B}^{c}\right)=-\sum_{\forall c \in S} \frac{\operatorname{sum}\left(\mathbf{B}^{c} \odot \log \left(\sigma\left(\tilde{\mathbf{D}}^{c}\right)\right)\right)}{|S| \cdot \operatorname{sum}\left(\mathbf{B}^{c}\right)}
Lsp+(D~c,Bc)=−∀c∈S∑∣S∣⋅sum(Bc)sum(Bc⊙log(σ(D~c)))
其中
∣
S
∣
|S|
∣S∣ 为 类别
S
S
S 的基底,
sum
(
.
)
\text{sum}(.)
sum(.) 表示矩阵内所有元素相加,在
M
~
c
\tilde{\mathbf{M}}^{c}
M~c 中的峰峰值
t
c
t_c
tc 假设落在
t
c
t_c
tc 个类别上,
c
∈
S
c\in{S}
c∈S。
对于
c
∈
S
0
c\in {S}_{0}
c∈S0,
D
c
\text{D}^{c}
Dc 中正的激活值意味着错误的检测,即虚假的正样本。因此一个全为 0 值的 mask
0
H
×
W
\mathbb 0_{H\times{W}}
0H×W 可以用作 GT 来减少这种错误的检测:
L
s
p
−
(
D
c
,
0
H
×
W
)
=
−
∑
c
∈
S
0
sum
(
log
(
1
−
σ
(
D
c
)
)
)
∣
S
0
∣
⋅
H
⋅
W
\mathcal{L}_{s p-}\left(\mathbf{D}^{c}, \mathbf{0}_{H \times W}\right)=-\sum_{c \in S_{0}} \frac{\operatorname{sum}\left(\log \left(1-\sigma\left(\mathbf{D}^{c}\right)\right)\right)}{\left|S_{0}\right| \cdot H \cdot W}
Lsp−(Dc,0H×W)=−c∈S0∑∣S0∣⋅H⋅Wsum(log(1−σ(Dc)))
尽管空间损失能保存目标的空间分布信息,但只依赖于局部信息可能会导致目标计数存在偏差,因此,计数损失登场。
计数损失
计数损失包含两部分:
排序损失
L
r
a
n
k
\mathcal L_{rank}
Lrank:对应超出低数量范围的目标类别(
∨
c
∈
S
~
\vee{c}\in \tilde {S}
∨c∈S~ ),采用排序损失惩罚
S
~
\tilde{S}
S~ 中过低的目标类别计数。需要注意的是,在计算
L
r
a
n
k
\mathcal L_{rank}
Lrank 或
L
M
S
E
\mathcal L_{MSE}
LMSE 时,并未考虑属于
S
~
\tilde{S}
S~ 的类别,而是在这里的排序损失上考虑到了。
L
rank
(
t
c
^
,
t
~
)
=
∑
c
∈
S
~
max
(
0
,
t
~
−
t
c
^
)
∣
S
~
∣
\mathcal{L}_{\text {rank }}\left(\hat{t_{c}}, \tilde{t}\right)=\sum_{c \in \tilde{S}} \frac{\max \left(0, \tilde{t}-\hat{t_{c}}\right)}{|\tilde{S}|}
Lrank (tc^,t~)=c∈S~∑∣S~∣max(0,t~−tc^)从公式上来看,
L
r
a
n
k
\mathcal L_{rank}
Lrank 惩罚的是 预测的数量
t
c
^
<
t
~
=
5
\hat{t_c}<\tilde{t}=5
tc^<t~=5,
c
∈
S
~
c\in\tilde{S}
c∈S~
均方误差损失
L
M
S
E
\mathcal L_{MSE}
LMSE:对应剩余的类别,均方误差惩罚的是那些与 GT 数量不匹配的特定类别的预测。用公式表示为:
L
M
S
E
(
t
c
^
,
t
c
)
=
∑
c
∈
{
S
0
,
S
}
(
t
c
^
−
t
c
)
2
∣
S
0
∣
+
∣
S
∣
\mathcal{L}_{M S E}\left(\hat{t_{c}}, t_{c}\right)=\sum_{c \in\left\{S_{0}, S\right\}} \frac{\left(\hat{t_{c}}-t_{c}\right)^{2}}{\left|S_{0}\right|+|S|}
LMSE(tc^,tc)=c∈{S0,S}∑∣S0∣+∣S∣(tc^−tc)2
其中
t
c
^
\hat {t_c}
tc^ 为类别
c
c
c 的密度图在其整个区域内的求和,即
t
c
^
=
sum
(
D
c
)
\hat {t_c}=\text{sum}\left(\text{D}^{c}\right)
tc^=sum(Dc)。
总结下,在较低计数
S
S
S 的范围内,
L
s
p
a
t
i
a
l
\mathcal L_{spatial}
Lspatial 空间损失用于优化目标实例的定位,
L
M
S
E
\mathcal L_{MSE}
LMSE 损失用于优化特定类别的计数。此外,网络能够将目标定位的能力泛化到超出低数量计数的范围
S
~
\tilde{S}
S~。而
L
r
a
n
k
\mathcal L_{rank}
Lrank 排序损失能够惩罚那些超出低数量范围
S
~
\tilde{S}
S~ 的过低计数。
Mini-batch 损失
在一个小批量范围内的空间损失计算为:
L
s
p
a
t
i
a
l
=
L
^
s
p
⟦
c
∈
S
⟧
+
L
^
s
p
−
⟦
c
∈
S
0
⟧
,
\mathcal {L}_{spatial}=\hat{\mathcal{L}}_{s p}{\llbracket c \in S \rrbracket}+\hat{\mathcal{L}}_{s p-}{\llbracket c \in S_{0} \rrbracket,}
Lspatial=L^sp[[c∈S]]+L^sp−[[c∈S0]],其中
⟦
⋅
⟧
\llbracket\cdot\rrbracket
[[⋅]] 表示艾弗森括号:满足条件为 1,否则 0。另外由于排序损失容易高估计数,所以加上一个相对低的权重
λ
=
0.1
\lambda=0.1
λ=0.1,因此体的计数损失为
L
count
=
L
^
M
S
E
⟦
c
∈
S
0
,
S
⟧
+
λ
∗
L
^
rank
⟦
c
∈
S
~
⟧
.
\mathcal{L}_{\text {count }}=\hat{\mathcal{L}}_{M S E} \llbracket c \in S_{0}, S \rrbracket+\lambda * \hat{\mathcal{L}}_{\text {rank }} \llbracket c \in \tilde{S} \rrbracket .
Lcount =L^MSE[[c∈S0,S]]+λ∗L^rank [[c∈S~]].
所有结构的分支均同时使用两阶段训练策略:第一阶段将空间损失
L
s
p
a
t
i
a
l
\mathcal L_{spatial}
Lspatial 排除在外,因为需要从分类分支中产生伪标签;第二阶段包含空间损失用于训练密度图。在这两个阶段中,分类分支都会用多标签分类损失
L
c
l
a
s
s
\mathcal L_{class}
Lclass 训练。
反向传播
这里再捋一下训练过程:密度图分支利用图像分类分支的目标类别图(包含空间位置信息)生成伪标签 mask
B
c
\text{B}^{c}
Bc 来训练,获得一个密度图,该密度图遵循目标类别图所捕获的目标空间位置。
但是采用计数损失(基于回归的方式)相比于分类分支(梯度通过
B
c
\text{B}^{c}
Bc 反传到分类分支),可能会降低目标定位的能力。反过来,基于密度分支的空间损失(此时目标定位能力削弱)又会导致目标类别图中的峰位错位,如此反复迭代,无可避免的会影响密度图的训练。解决方法是空间 mask
B
c
\text{B}^{c}
Bc 作为伪标签不需要反向传播,这种方法进一步获得一个稳定的分类分支,以及通过目标类别图捕获到的位置信息而得到的密度图。因此,密度分支中最后一个卷积的第
c
c
c 个通道/类别的梯度
δ
c
\delta^{c}
δc 可记为:
δ
s
p
+
c
=
∂
L
^
s
p
+
∂
D
~
c
⊙
B
c
\delta_{s p+}^{c}=\frac{\partial \hat{\mathcal{L}}_{s p+}}{\partial \tilde{\mathbf{D}}^{c}} \odot \mathbf{B}^{c}
δsp+c=∂D~c∂L^sp+⊙Bc
注意,
L
M
S
E
\mathcal L_{MSE}
LMSE、
L
r
a
n
k
\mathcal L_{rank}
Lrank、
L
s
p
−
\mathcal L_{sp-}
Lsp−都采用均方误差计算,因此卷积层输出上的排序损失和二分类损失都会丢失,所以采用离线的方式计算相关梯度。
六、更低的低数量(RLC)监督框架
提出的 RLC 框架仅仅需要类别的子集(例如80个类别里面知道40个或者只知道有这个类别而不知道具体数量)就可以预测出所有类别的数量,也不需要相关的计数标注。
下面再引入一些符号:
- A \mathcal A A:所有类别标签和计数标签都已知的集合,利用 LC 给 A \mathcal A A 中的目标类别打上标注,进一步将 A \mathcal A A 划分为三个子集, S 0 , S , S ~ S_0,S,\tilde S S0,S,S~。这三个子集的含义和第五部分的含义是一致的,只是对于 S ~ \tilde S S~,其精确的计数标记并不会提供;
-
B
\mathcal B
B:类别知道,计数标签不知道。
对比 五、六部分,LC 是所有类别和目标数量小于 5 的计数标签都知道,而 RLC 里面可能存在知道类别而不知道计数标签的情况,也就是说 B \mathcal B B 在 RLC 中可能不为空。
提出的 RLC 结构
观察上图,相较于之前的变化:
- 引入了一个新的权重调制层,能够迁移有数量标注的目标类别到没有标注的类别中去;
- 在密度分支中引入了一个辅助的独立类别子分支来产生一个类别无关的密度图 D t o t \text{D}^{tot} Dtot,旨在提供独立类别的总数量,同时也包含了未知数量标注的目标类别。
总结,RLC 中的密度分支有两个子分支:特定类别的子分支和独立类别的子分支,这两个子分支共享输入 F cnt \text{F}_{\text{cnt}} Fcnt。在 RLC 的监督设定中,特定类别的计数标注是不提供的( B \mathcal B B )。因此,之前的硬空间引导策略失效了。于是,软空间引导策略登场:使用独立类别的密度图 D t o t \text{D}^{tot} Dtot 和分类分支的目标类别图 M c \text{M}^{c} Mc 来产生类别 c c c 的空间注意力图 G c \text{G}^{c} Gc,旨在给特定类别的密度图提供空间信息。
提出的损失函数
整个网络采用端到端的方式训练,损失函数为:
L
=
L
c
l
s
+
L
r
c
o
u
n
t
+
L
t
o
t
{\mathcal L} = {\mathcal L} _{cls} + {\mathcal L} _{rcount} + {\mathcal L} _{tot}
L=Lcls+Lrcount+Ltot
其中第一项
L
c
l
s
\mathcal L_{cls}
Lcls (所有的类别标签都已提供)和之前多标签分类损失函数一致,二、三项用于训练密度分支。
L
r
c
o
u
n
t
\mathcal L_{rcount}
Lrcount 用于训练特定类别的子分支,
L
t
o
t
\mathcal L_{tot}
Ltot 用于训练独立类别的子分支,也就是说,密度分支采用 RLC 来监督。
6.1 密度分支
为了解决 B \mathcal B B 类别中数量标签不提供的情况,引入权重调制层:修改分类分支卷积层的权重来产生特定类别的密度图,该密度图用于估计所有类别中特定类别的数量。
6.1.1 权重调制层
通过类别
A
\mathcal{A}
A 来训练的权重调制层
Ψ
\Psi
Ψ 是类别无关的,之后
Ψ
\Psi
Ψ 用于计算所有类别中的特定类别的子分支,包含那些没有提供数量标签的类别
B
\mathcal{B}
B。这类似于将计数标签中学到的映射泛化到无计数标签的类别中去。
用
A
∪
B
\mathcal A\cup\mathcal B
A∪B 来训练的分类分支中,对于类别
c
c
c,其卷积权重可表示为
ω
c
l
s
c
\omega_{cls}^{c}
ωclsc。
D
=
{
D
c
∈
R
H
×
W
:
c
∈
[
1
,
C
]
}
\mathrm{D}=\left\{\mathrm{D}^{c} \in \mathbb{R}^{H \times W}: c \in[1, C]\right\}
D={Dc∈RH×W:c∈[1,C]} 表示特定类别图,该图用于获得所有类别
C
C
C 的特定类别密度图
D
c
~
{\tilde{\mathcal D^{c}}}
Dc~。之后权重
ω
c
l
s
c
\omega_{cls}^{c}
ωclsc 穿过权重调制层
Ψ
\Psi
Ψ 得到卷积层
ω
c
n
t
c
\omega_{cnt}^{c}
ωcntc。最后,类别
c
c
c 的密度图
D
C
~
{\tilde{\mathcal D^{C}}}
DC~ 可表示为:
w
c
n
t
c
=
Ψ
(
w
c
l
s
c
)
,
D
c
=
w
c
n
t
c
∗
F
c
n
t
w_{c n t}^{c}=\Psi\left(w_{c l s}^{c}\right), \mathrm{D}^{c}=w_{c n t}^{c} * \mathrm{~F}_{\mathrm{cnt}}
wcntc=Ψ(wclsc),Dc=wcntc∗ Fcnt其中
∗
*
∗ 表示卷积。注意这里卷积的参数都不是训练得到的,而是使用的
ω
c
n
t
c
\omega_{cnt}^{c}
ωcntc。
调制层的结构:一个
P
×
P
2
P\times\frac{P}{2}
P×2P 的全连接层,之后跟着一个正则化的 softmax 非线性层,最后跟着 一个
P
2
×
P
\frac{P}{2}\times{P}
2P×P 的全连接层(相当于一个瓶颈结构)。同时为了避免创造差异(第五部分提到了原因),不涉及反向传播,但
ω
c
l
s
c
\omega_{cls}^{c}
ωclsc 的权重是可以通过分类分支训练(
A
\mathcal A
A、
B
\mathcal B
B )的。
6.1.2 软空间引导
独立类别密度图 D t o t \text{D}^{tot} Dtot 和 目标类别图 M c \text{M}^{c} Mc 一起产生空间注意力图 G c \text{G}^{c} Gc,然后利用 sigmoid 激活函数得到归一化后的 M c ^ \hat{\text{M}^{c}} Mc^。类别为 c c c 的空间注意力图 G c = M ^ c ∘ D t o t \mathbf{G}^{c}=\hat{\mathbf{M}}^{c} \circ \mathbf{D}^{t o t} Gc=M^c∘Dtot , G c \mathbf{G}^{c} Gc 之后作为相应的伪标签 D c \text{D}^{c} Dc 来获得特定类别的密度图 D ^ c \hat{\text{D}}^{c} D^c。
总计数损失和独立类别密度图
D
t
o
t
\text{D}^{tot}
Dtot 为独立类别子分支(输入为
F
cnt
\text{F}^{\text{cnt}}
Fcnt,由1个 channel 为 1 的
1
×
1
1\times 1
1×1 卷积组成) 的输出。对
D
t
o
t
\text{D}^{tot}
Dtot 整个区域求和可得独立类别的总数量,即:
t
^
t
o
t
=
∑
i
j
D
i
j
t
o
t
\hat{t}_{t o t}=\sum_{i j} \mathrm{D}_{i j}^{t o t}
t^tot=∑ijDijtot。
采用带有数量标注的
S
S
S 和
S
~
\tilde S
S~ 来训练独立类别分支,其 GT 数量
t
t
o
t
t_{tot}
ttot 记为:
t
t
o
t
=
∑
c
∈
S
t
c
+
(
t
~
×
∣
S
~
∣
)
t_{t o t}=\sum_{c \in S} t_{c}+(\tilde{t} \times|\tilde{S}|)
ttot=c∈S∑tc+(t~×∣S~∣)
独立类别分支的训练损失为:
L
t
o
t
=
L
M
S
E
(
t
^
t
o
t
,
t
t
o
t
)
⟦
Z
=
0
⟧
+
L
r
a
n
k
(
t
^
t
o
t
,
t
t
o
t
)
⟦
Z
>
0
⟧
\mathcal{L}_{t o t}=\mathcal{L}_{M S E}\left(\hat{t}_{t o t}, t_{t o t}\right) \llbracket Z=0 \rrbracket+\mathcal{L}_{r a n k}\left(\hat{t}_{t o t}, t_{t o t}\right) \llbracket Z>0 \rrbracket
Ltot=LMSE(t^tot,ttot)[[Z=0]]+Lrank(t^tot,ttot)[[Z>0]]
其中
Z
Z
Z 为数量标注未提供的目标类别的总数,记为:
Z
=
∣
s
~
∣
+
∣
B
′
∣
Z=|\tilde{s}|+|{\mathcal B}\prime|
Z=∣s~∣+∣B′∣。其中
∣
B
′
∣
|{\mathcal B}\prime|
∣B′∣ 为
B
\mathcal B
B 类别中的正样本集合。
L
M
S
E
=
(
t
^
t
o
t
−
t
t
o
t
)
2
\mathcal{L}_{M S E}=\left(\hat{t}_{t o t}- t_{t o t}\right)^2
LMSE=(t^tot−ttot)2 为均方误差损失,
L
rank
(
t
^
tot
,
t
tot
)
=
max
(
0
,
t
tot
−
t
^
tot
)
\mathcal{L}_{\text {rank }}\left(\hat{t}_{\text {tot }}, t_{\text {tot }}\right)=\max \left(0, t_{\text {tot }}-\hat{t}_{\text {tot }}\right)
Lrank (t^tot ,ttot )=max(0,ttot −t^tot ) 为排序损失。
6.1.3 特定类别的密度图
通过
Ψ
\Psi
Ψ 获得的特定类别图
D
c
\text{D}^{c}
Dc 和空间注意力
G
c
\text{G}^{c}
Gc 一起保存着 密度图
D
^
c
\hat{\mathrm{D}}^{c}
D^c 的空间信息:
D
^
c
=
D
c
∘
G
c
\hat{\mathrm{D}}^{c}=\mathrm{D}^{c} \circ \mathrm{G}^{c}
D^c=Dc∘Gc。其中
∘
\circ
∘ 表示 哈达玛乘积。
通过累积整个空间区域内的
D
^
c
\hat{\mathrm{D}}^{c}
D^c,特定类别的目标总数量为
t
^
c
=
∑
i
j
D
^
i
j
c
{\hat t}_{c}=\sum_{i j} \hat{\mathrm{D}}_{i j}^{c}
t^c=∑ijD^ijc,其中
i
,
j
i,j
i,j 为矩阵中元素的坐标。该特定类别的子分支可用 LRC 损失函数
L
rcount
\mathcal{L}_{\text {rcount }}
Lrcount 来训练:
L
rcount
=
L
M
S
E
(
t
^
c
,
t
c
)
⟦
c
∈
S
⟧
+
L
rank
(
t
^
c
,
t
~
)
⟦
c
∈
S
~
⟧
\mathcal{L}_{\text {rcount }}=\mathcal{L}_{M S E}\left(\hat{t}_{c}, t_{c}\right) \llbracket c \in S \rrbracket+\mathcal{L}_{\text {rank }}\left(\hat{t}_{c}, \tilde{t}\right) \llbracket c \in \tilde{S} \rrbracket
Lrcount =LMSE(t^c,tc)[[c∈S]]+Lrank (t^c,t~)[[c∈S~]]
需要注意的是,预测的总数
t
^
c
{\hat t}_c
t^c 是空间注意力
G
c
\text{G}^{c}
Gc 加权给密度图
D
^
c
\hat{\mathrm{D}}^{c}
D^c 得到的,因此在最小化计数误差的同时,空间分布信息将会保留下来。
由于产生
D
c
\text{D}^{c}
Dc 的卷积权重
ω
c
n
t
c
\omega_{cnt}^{c}
ωcntc 是根据 调制层
Ψ
(
ω
c
l
s
c
)
\Psi\left(\omega_{cls}^{c}\right)
Ψ(ωclsc) 得到的,因此在最小化 LRC 损失
L
rcount
\mathcal{L}_{\text {rcount }}
Lrcount 时也会训练无关类别的权重调制层
Ψ
\Psi
Ψ。
七、训练和推理
Backbone:ResNet50,初始学习率 l r = 1 0 − 4 lr=10^{-4} lr=10−4,图像分类分支和密度分支的初始学习率为 0.01 0.01 0.01,每个分支中最后一层卷积层的输出 channel 为 P = 1.5 × C P=1.5\times C P=1.5×C, b a t c h = 16 batch=16 batch=16,SGD 动量和权重衰减分别为 0.9 , 1 0 − 4 0.9,10^{-4} 0.9,10−4,单块 V100 “即可” 完成训练。
推理
对于 LC 和 RLC 来说,其分类分支的输出为类别置信度
S
c
S^{c}
Sc,当
S
c
>
0
S^{c}>0
Sc>0 时,意味着类别
c
c
c 存在于图像中,此时
t
c
^
>
0
\hat{t_c}>0
tc^>0;反之当
S
c
≤
0
S^{c}\le0
Sc≤0,意味着类别
c
c
c 不存在于图像中,此时
t
c
^
=
0
\hat{t_c}=0
tc^=0。对于 LC,类别
c
c
c 的总数
t
c
{t_c}
tc 通过对密度图
D
c
\text{D}^{c}
Dc 求和得到;对于 RLC,类别
c
c
c 的总数
t
c
^
\hat{t_c}
tc^ 通过对密度图
D
c
^
\hat{\text{D}^{c}}
Dc^ 求和得到。RLC 仅利用低数量(
t
c
≤
4
t_c\le4
tc≤4 )来预测所有在范围内或者不在范围内的目标数量。此外,对独立类别的密度图累加会得到所有类别的总数量。
八、实验
数据集
VOC2007、COCO、Visual Genome(VG)。注意COCO数据集,其验证集的一半作为测试集。对于VG来说,从8万个类别中除去不可视的类别,还剩609类。本文提出的方法仅采用图像水平的监督。
评估标准
绝对均方误差 RMSE 及其三种变体:非零绝对均方误差:RMSE-nz;相对绝对均方误差:relRMSE;非零相对绝对均方误差:relRMSE-nz。
对于类别
c
c
c,有:
R
M
S
E
c
=
1
T
∑
i
=
1
T
(
t
i
c
−
t
i
c
^
)
2
RMSE_{c}=\sqrt{\frac{1}{T} \sum_{i=1}^{T}\left(t_{i c}-\hat{t_{i c}}\right)^{2}}
RMSEc=T1i=1∑T(tic−tic^)2
r
e
l
R
M
S
E
c
=
1
T
∑
i
=
1
T
(
t
i
c
−
t
i
c
^
)
2
t
i
c
+
1
relRMSE_{c}=\sqrt{\frac{1}{T} \sum_{i=1}^{T} \frac{\left(t_{i c}-\hat{t_{i c}}\right)^{2}}{t_{i c}+1}}
relRMSEc=T1i=1∑Ttic+1(tic−tic^)2
其中
T
T
T 为测试集中图像的总数,
t
i
c
^
\hat{t_{i c}}
tic^、
t
i
c
t_{i c}
tic 分别为图像
i
i
i 中
c
c
c 类别预测的总数和 GT 总数。在所有类别上取平均,得到 mRMSE 和 m-relRMSe,同理,mRMSE-nz,m-relRMSE-nz。
对于实例分割来说,采用
m
A
P
r
=
0.25
,
0.5
,
0.75
mAP^r=0.25,0.5,0.75
mAPr=0.25,0.5,0.75 作为衡量标准。
监督层次
- BB:bounding box 监督
- PL:点标注监督
- LC:低数量范围内的图像水平标注的监督;
- IC:同时在低数量范围内和超过范围的图像水平标注的监督
- RLC:更少的低数量范围的图像水平标注的监督
8.1 消融实验
8.1.1 低数量(LC)监督的计数
双分支结构的重要性
不同损失函数的重要性
低数量范围的影响
密度图的评估
利用标准的网格平均绝对误差(GAME)来评估密度图上空间分布的一致性,任务采用人群计数。GAME(n) 表示将图片划分为 4 n , n = 1 , 2 , 3 4^n,n=1,2,3 4n,n=1,2,3 个非重叠的网格。
硬空间引导的评估
8.1.2 更低的低数量计数(RLC)监督
对于权重调制层中可选的结构
D
t
o
t
\text{D}^{tot}
Dtot 的影响
标记速度的比较
8.2 与SOTA的比较
8.2.1 特定类别的计数
表8(上面有,重复),9,10。
8.2.2 独立类别的目标总计数
8.2.3 无监督目标计数的泛化性
8.3 应用到弱监督实例分割上
九、结论
本文提出的网络建立在一个新颖的双分支结构上——图像分类分支和用于估计目标数量的密度分支。提出的 LC 框架只需要少量的计数标记监督,因此能够降低图像中实例标注的成本;RLC 分支仅采用所有类别的子集,因此进一步减少了标注的成本。
本文是第一个提出图像级别的更少计数监督(部分监督)的用于训练密度图的工作,在 COCO、VG、VOC2007 数据集进行评估,能够比得上用更高标记水准的监督训练。
写在后面
这篇文章花了整整2天时间来精度。不得不说,文章的水平很深,工作量充足,实验成本也是够够的,全文废话很少,值得认真品味,接下来就是阅读代码了~
祝你成功~