学习笔记:IIM:Learning Independent Instance Maps for CrowdLocalization
概述
IIM(Independent Instance Map segmentation)独立实例地图分割,被用于人群定位领域。特点如下:
- 端到端框架(end to end)
- 每个实例是不重叠的。通过将人群分割成独立的连通分量,获得位置和人群计数(分别为中心和分量的数目)
- 创新点:提出可微分二值化模块:(BM)
- 针对不同图像自适应地学习阈值图,以更准确地检测每个实例;
- 使用二进制预测和标签的损失直接训练模型。
- 主要方法:遵循启发式分支,并利用连通分量分割进行人群定位
数据
本文中所使用的数据类型为独立实例映射(Independent Instance Map),每个实例不重叠
其中images文件夹下为真实图片,masks文件夹包含了每张图片对应的独立实例,展示如下:
NWPU-Crowd :是目前最大和最具挑战性的开源人群数据集。它包含标头点和框标签。共有5109张图片和2133238个注释实例。
Shanghai Tech :包含两个子集:A部分有482张图像,共241677个实例,B部分包含716张图像,包括88,488个标记的头。
UCF-QNRF :是一个密集的人群数据集,由1535张图像组成,共有1251642个实例。
FDST :由13个不同场景中捕获的100个视频组成。它包含15000个帧,共有394081个头,包括点和框标签。
方法
首先对人群场景中的头部区域进行置信度预测。图像或像素级二值化模块将置信度图分割成独立的实例图。在推断期间,阈值模块为每个置信图在线预测阈值。最后,通过检测4个连通分量,得到每个独立实例区域的框和中心。
二值化层
二值化层的目标是学习阈值T以分割输入图像,使得其输出图像O尽可能接近目标图像G。
对于输入I,输出O,二值化层B给出如下定义:
其中阈值T是要学习的参数。这个前向过程是不可微的,因为它是一个比较运算。因此,不可能自动计算T的梯度。这里我们定义了一个类似的数学模型来模拟二进制输出O和T之间的关系,其中输出仅与T有关系。
假设I ∈ RH×W满足两个条件:
- H × W → ∞ H ×W → ∞ H×W→∞;
- I ( i , j ) ∼ U ( 0 , 1 ) I(i,j)\sim U(0,1) I(i,j)∼U(0,1),均匀分布
那么,从概率统计的角度来看,累积分布函数FI(i,j)(T)与T的关系如下:
其中
P
(
I
(
i
,
j
)
<
T
)
P(I(i,j)<T)
P(I(i,j)<T)表示I中的像素值小于T的概率。
损失与反向传播
为了计算反向传播的损失,论文中将输出图像O中的所有像素求和为标量,并进行归一化,定义yˆ:
根据上述公式推导,易知y^与阈值T的关系有:
可以看出y ^和阈值T是线性运算,y ^对T的导数值为1。为了使真实标签与预测值具有同样的形式,将G定义为:
即将真实数据中所有点的像素值相加并进行归一化
根据学习速率α,更新阈值T,公式如下:
L
(
y
ˆ
,
y
)
L(yˆ, y)
L(yˆ,y)是真实值G与输出O之间的损失函数,可以选择为
L
1
l
o
s
s
L1loss
L1loss或者其他。
二值化模块
为了使阈值根据图像内容进行更新,文章根据上述二值化层进一步提出了二值化模块(BM),该模块由阈值编码器和二值化层组成。
- 阈值编码器:对图像的特征图进行编码并生成单个值或图
- 二值化层:利用该值/图来二值化置信度图并输出实例图
作为阈值编码器,特征F可以由具有参数Θ的阈值编码器映射到阈值T:
在此公式中,阈值T可以有两种形式,可以是标量或大小与输入I相同的矩阵。这两种阈值表达方式分别对应了固定阈值与逐像素级阈值。固定阈值对于一张图片为一固定标量值,像素级阈值对于每一个像素点处具有不同的阈值。
对于示意图来说,存在用于二值化层的两个输入:欠分割图像I和阈值T。对于阈值编码器,T的每个像素处的导数为-1。这意味着当梯度流到阈值编码器时,梯度将被反转阈值T。因此,阈值学习器中的参数Θ可以通过如下的梯度下降来优化:
其中β是阈值编码器的学习速率。除了优化阈值编码器之外,可以用二进制预测和标签来计算硬损失,并且进行从输入I到置信度图的预测网络的反向传播(例如,置信度预测器)。与阈值编码器不同,置信度预测器的梯度具有与损失L(y,y)相同的符号。假设输入I由具有参数θ的置信度预测器输出,θ利用学习速率γ更新为:
阈值编码器和置信度预测器起对抗作用。置信度编码器希望使目标区域具有较高置信度,背景区域具有较低置信度。阈值学习器力求使目标区域具有低阈值,而背景区域具有高阈值。通过这种方式,可以尽可能多地滤除背景噪声,并且可以保留低置信度前景,如小尺度和大尺度头部,用于定位。由于这两个任务是对抗的,我们在主干网络结构(卷积层)和阈值学习器之间添加梯度分离操作。
框架建立
置信图预测器(CP)
我们希望通过检测连接组件来实现人群定位,因此使用高分辨率特征表示的主干网络结构来提取特征。论文中,有两种流行的网络被用作置信度预测器:
- VGG-16 + FPN,其使用VGG-16作为骨干并利用特征金字塔网络来编码多尺度特征;
- HRNet-W48,一种高分辨率网络,具有强大的视觉识别特征表示能力
阈值编码器(TE)
两种方法: 这里,提出了两种方案来二值化置信图预测器(CP)的输出:图像级和像素级二值化模块(简称“IBM”和“PBM”)。IBM和PBM分别使用单个值和映射对预测进行二进制化。
为了从图像内容学习阈值,设计了阈值编码器(TE),其输入等于原始特征图乘置信度图:
F
:
=
I
⨀
F
F := I \bigodot F
F:=I⨀F 使用预测的置信图进行哈达玛积(即形状相同的矩阵对应位置的元素相乘)以过滤背景噪声。
IBM:在IBM中,应用1 × 1卷积层和全局平均池化(GAP)来输出单个值作为二值化层的可学习阈值。
PBM:IBM只能对于一张输入图像只能学习到一个特定阈值,但不同尺度的头部的置信度分布是非常不同的。因此,PBM中的阈值编码器(TE)被提出以产生像素级阈值图,其由具有PReLU的四个卷积层和具有步长为1的两个大内核平均池化组成。配置如下所示:
Conv:3×3,PReLU; Conv:3×3,PReLU; Conv:3×3,PReLU;Avgpool(平均池化):15 ×15; Conv:1×1,Avgpool(平均池化):15×15,Sigmoid。
在PBM的TE中,为了覆盖大的空间感受野并保存存储器,输入特征被调整为原始尺寸的1/8。此外,在最后两个卷积层之后,应用步长为1的15 × 15平均池化来平滑输出。
压缩Sigmoid :在实验中,TE可能会在阈值图中产生一些很低(小于0.1)或很高(接近1)的值,这使得网络很容易波动。此外,高阈值导致头部区域中的许多空洞。因此,为了限制Sigmoid激活函数的输出范围。提出了压缩Sigmoid,将输出约束在(0.2,0.7)之间,其公式为:
- 在得到阈值图之后,它将与置信度图一起被馈送到二值化层。然后二值化层产生分割图。最后,通过检测连通区域,得到独立实例的盒和中心。
损失函数
在该框架中涉及两个损失函数:
置信图学习损失函数:
置信图学习是一个回归问题,MSELoss(均方误差)可以很好地训练它
阈值映射学习损失函数:
阈值映射学习也是一个回归问题,阈值范围为(0.2,0.7).因此,L1损失函数被应用于等式中的
L(y^,y)用于训练阈值学习器。除此之外,该目标函数为置信度预测器提供梯度。
总结
总的来说,IIM运行的流程为:
- 原图进入置信度预测器(参数为 θ θ θ),可选择 H R − n e t HR-net HR−net或 V G G − 16 + F P N VGG-16 + FPN VGG−16+FPN,得到置信度图为 I ( x , y ) I(x,y) I(x,y),尺寸与原图大小相同
- 置信度图与原图对应位置元素相乘,得到 F : = I ⨀ F F := I \bigodot F F:=I⨀F,作为阈值编码器的输入
- 输入数据 F : F : F:进入阈值编码器后经过具有 P R e L U PReLU PReLU的四个卷积层和池化层后,得到逐像素的阈值图 T ( x , y ) T(x,y) T(x,y)
- 阈值图 T ( x , y ) T(x,y) T(x,y)和置信度图 I ( x , y ) I(x,y) I(x,y)同时进入二值化层,对置信度图进行二值化并输出实例图 O ( x , y ) O(x,y) O(x,y)
- 将输出实例图与真实图转化成标量后进行计算损失,损失函数采用 L 1 l o s s L1loss L1loss,用于训练阈值编码器,不要忘记在二值化层的梯度反转
- 使用 M S E L o s s MSELoss MSELoss训练置信度预测器
模型评估
本文中在模型评估时使用的Instance-level Precision(准确率)、Recall(召回率)和F1-measure(F1值)是用于评估二分类模型性能的常用指标
准确率(Precision)衡量了模型预测为正例的样本中有多少是真正的正例。准确率可以通过以下公式计算:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision= \frac{TP}{TP+FP}
Precision=TP+FPTP
其中,TP表示真阳性(True Positives),FP表示假阳性(False Positives)。准确率越高,模型预测为正例的样本中真正的正例越多。
召回率(Recall)衡量了模型能够正确预测出多少真正的正例。召回率可以通过以下公式计算:
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall= \frac{TP}{TP+FN}
Recall=TP+FNTP
其中,TP表示真阳性(True Positives),FN表示假阴性(False Negatives)。召回率越高,模型能够正确预测出更多的真正的正例。
F1值(F1-measure)是准确率和召回率的加权调和平均值,综合考虑了模型的准确性和召回能力。F1值可以通过以下公式计算:
F
1
=
2
⋅
P
r
e
c
i
s
i
o
n
⋅
R
e
c
a
l
l
P
r
e
c
i
s
i
o
n
+
R
e
c
a
l
l
F1= \frac{2\cdot Precision\cdot Recall}{Precision+Recall}
F1=Precision+Recall2⋅Precision⋅Recall
F1值的取值范围为0到1,值越高表示模型的性能越好。
方法对比
三个经典的人群定位方法和IIM在四个数据集上的性能: