人群计数之SASNet论文笔记

本篇博客仅作为个人学习的论文笔记使用,如有侵权,请联系删除

原文链接
github地址

To Choose or to Fuse? Scale Selection for Crowd Counting

一、主要针对问题及解决手段

  1. 论文主要针对的问题:人头尺寸在图片中变化大的问题(人体在图片中远小近大问题);
  2. 解决方法:充分利用基于multi-level结构的网络中的多尺度(multi-scale)特征表示。具体地,由于每一层的特征图都有一个最擅长预测的特定的尺度范围,则可以通过一个选择策略来选择合适的特征层,从而使得单个patch内的计数误差尽可能地小,同时作者还利用加权平均来将其它的特征层也考虑了进来,用于平滑离散的特征图和连续的尺度变化之间的差异;
  3. 上述尺度和特征层之间的内部对应关系,可以使用SASNet来自主地学习。

二、其它问题or创新点

  1. 由于图像中局部范围内的头部尺寸大致相同,故可以逐patch地选择特征层;
  2. 由于传统的像素级别损失函数忽略了patch内部不同像素的不同学习难度,故论文给出了一种金字塔区域感知损失函数(PRA Loss);具体地,它会在一个patch中迭代地选择最困难(即最大高估/最小低估)的子区域,直到到达像素级别,此时将该像素视为最困难像素,做进一步优化;
  3. 此外,传统的损失函数强调的是精确的像素级别损失,而常见的评估准则(如MAE/MSE)只关注最终的计数误差。PRA Loss考虑了像素和区域之间的包含关系,有助于平滑训练目标和评估指标之间的不连续性。

三、网络结构

SASNet网络结构

  1. 使用 VGG16的前 13 个卷积层作为编码器网络,共有五个特征层级,下采样步长分别为1、2、4、8、16,对应的特征图记为 V 1 V_1 V1 ~ V 5 V_5 V5
  2. P 1 P_1 P1 ~ P 5 P_5 P5为解码阶段的多尺度特征图表示,每个 P i P_i Pi V i V_i Vi P i + 1 P_{i+1} Pi+1生成;为使 P i + 1 P_{i+1} Pi+1 V i V_i Vi尺寸匹配,需要对 P i + 1 P_{i+1} Pi+1进行上采样,上采样方式为近邻插值法;正如上文所说,由于感受野固定,因此只在某些特定尺寸下表现良好;
  3. 抛开置信图预测分支Confidence Head不谈,直接将 P 1 P_1 P1 ~ P 5 P_5 P5分别输入密度分支Density Head来得到五张密度图 D 1 D_1 D1 ~ D 5 D_5 D5,再在通道维度上对此五张密度图进行拼接,得到Density Maps;
  4. 抛开密度预测分支Density Head不谈,直接将 P 1 P_1 P1 ~ P 5 P_5 P5分别输入置信分支Confidence Head来得到五张置信图 C 1 C_1 C1 ~ C 5 C_5 C5,(特别地,对于输入的 P i P_i Pi首先进行下采样,使其尺寸变为原始输入图片尺寸的 1 k \frac{1}{k} k1,这样 C i C_i Ci中的每个像素值实际代表着 P i P_i Pi中对应位置的一个 k × k k \times k k×k大小的patch的置信度),再在通道维度上对此五张置信图进行拼接,得到Confidence Maps;
  5. 对Confidence Maps在通道维度上进行Softmax操作,使得五张二维的置信图在每个对应位置像素上的值之和都为1(为下一步的加权平均做铺垫);
  6. 对Confidence Maps和Density Maps对应位置逐像素地相乘后,再在通道维度上求和(由此完成加权平均操作,当然,此步操作的前提是两者尺寸匹配,故需要使用近邻插值法 C i C_i Ci插值到与 D i D_i Di相同大小),得到最终的密度图预测 D j , k e s t D_{j,k}^{est} Dj,kest,定义如公式(1)所示: D j , k e s t = ∑ i 5 ( C i , j , k ′ ⋅ D i , j , k ) (1) D_{j,k}^{est}=\sum_i^5 ({C_{i,j,k}}' \cdotp D_{i,j,k}) \tag{1} Dj,kest=i5(Ci,j,kDi,j,k)(1)
    式中 D j , k e s t D_{j,k}^{est} Dj,kest表示最终的密度预测图 D e s t D^{est} Dest ( j , k ) (j,k) (j,k)位置处的密度估计值
  7. 最合适的特征层被认为是计数误差最小的特征层。在推理过程中,拥有最大置信度分数的为最合适的特征层,即对于 ( m , n ) (m,n) (m,n)处的patch,选择置信度分数最大的特征层 j = arg min i ∈ [ 1 , 5 ] C i , m , n j=\text{arg min}_{i\in [1,5]}C_{i,m,n} j=arg mini[1,5]Ci,m,n作为最合适的特征层。

四、损失函数

  1. 五个Density Heads均由同一张GT图监督,即输入图片的原始GT图 D g t D^{gt} Dgt,损失函数定义为Euclidean Distence损失函数,如公式(2)所示:
    L d e n = ∑ i 5 ∥ D i − D g t ∥ 2 2 (2) \mathcal{L_{den}}=\sum_i^5\Vert D_i - D^{gt}\Vert_2^2 \tag{2} Lden=i5DiDgt22(2)
  2. 为了监督Confidence Heads,论文利用 D i D_i Di D g t D^{gt} Dgt之间的比较,构建出了 C i C_i Ci的GT图 C i g t C^{gt}_i Cigt,构建示意图如下图所示:
    构建示例
    上图选取了五张Density maps中的三张作为示例,首先作者将 D i D_i Di划分成一系列互不重叠的大小为 k × k k \times k k×k的patches,然后便可以得到一张计数图 M i M_i Mi,图中每个像素值等于 D i D_i Di中相应位置patch的内部密度和;类似地,也可利用 D g t D^{gt} Dgt构建每张 M i M_i Mi的GT图 M g t M^{gt} Mgt;最后通过公式(3)给出 C i g t C^{gt}_i Cigt
    C i , m , n g t = { 1 , if  arg ⁡ min ⁡ l ∈ [ 1 , 5 ] ∣ M l , m , n − M m , n g t ∣  =  i 0 , if  arg ⁡ max ⁡ l ∈ [ 1 , 5 ] ∣ M l , m , n − M m , n g t ∣  =  i − 1 , otherwise (3) C^{gt}_{i,m,n} =\begin{cases} 1,& \text{if $\mathop{\arg\min}\limits_{l \in [1,5]} | M_{l,m,n} - M_{m,n}^{gt} |$ = $i$} \\ 0,& \text{if $\mathop{\arg\max}\limits_{l \in [1,5]} | M_{l,m,n} - M_{m,n}^{gt} |$ = $i$} \\ -1,& \text{otherwise} \end{cases} \tag{3} Ci,m,ngt= 1,0,1,if l[1,5]argminMl,m,nMm,ngt∣ = iif l[1,5]argmaxMl,m,nMm,ngt∣ = iotherwise(3)
    上式中, C i , m , n g t C^{gt}_{i,m,n} Ci,m,ngt表示第 i i i 个特征层中位于 ( m , n ) (m,n) (m,n) 处的patch的真实标签, M l , m , n M_{l,m,n} Ml,m,n表示第 l l l 个特征层中位于 ( m , n ) (m,n) (m,n) 处的patch的内部密度和, M m , n g t M^{gt}_{m,n} Mm,ngt表示 D g t D^{gt} Dgt中位于 ( m , n ) (m,n) (m,n) 处的patch的内部密度和。对公式(2)的直观解释就是,离 M m , n g t M^{gt}_{m,n} Mm,ngt最远的对应patch的值设置为1,离 M m , n g t M^{gt}_{m,n} Mm,ngt最接近的对应patch的值设置为0,其它情况设置为-1,在训练阶段,值为-1的patch被忽略;
    由此导出损失函数 L c e \mathcal{L_{ce}} Lce L c o n f \mathcal{L_{conf}} Lconf,两者定义为公式(4)和公式(5):
    L c e ( C i , m , n , C i , m , n g t ) = C i , m , n g t ⋅ log ( C i , m , n ) + ( 1 − C i , m , n g t ) ⋅ ( 1 − log ( C i , m , n ) ) (4) \mathcal{L_{ce}}(C_{i,m,n}, C^{gt}_{i,m,n}) = C^{gt}_{i,m,n} \cdotp \text{log}(C_{i,m,n}) + (1- C^{gt}_{i,m,n})\cdotp (1-\text{log}(C_{i,m,n})) \tag{4} Lce(Ci,m,n,Ci,m,ngt)=Ci,m,ngtlog(Ci,m,n)+(1Ci,m,ngt)(1log(Ci,m,n))(4)
    L c o n f = ∑ i = 1 5 ∑ ( m , n ) ∈ K i L c e ( C i , m , n , C i , m , n g t ) ∑ i = 1 5 ∣ K i ∣ (5) \mathcal{L_{conf}} = \frac {\sum_{i=1}^5 \sum_{(m,n)\in \mathcal{K_i}}\mathcal{L_{ce}}(C_{i,m,n}, C^{gt}_{i,m,n})} {\sum_{i=1}^5 |\mathcal{K}_i|} \tag{5} Lconf=i=15Kii=15(m,n)KiLce(Ci,m,n,Ci,m,ngt)(5)
    上式中, K i \mathcal{K_i} Ki在第 i i i层特征图中置信标签为0或者1的patches集合,而 ∣ K i ∣ |\mathcal{K_i}| Ki则代表该集合中patch的数量; L c e ( C i , m , n , C i , m , n g t ) \mathcal{L_{ce}}(C_{i,m,n}, C^{gt}_{i,m,n}) Lce(Ci,m,n,Ci,m,ngt)表示 C i , m , n C_{i,m,n} Ci,m,n C i , m , n g t C^{gt}_{i,m,n} Ci,m,ngt之间的交叉熵损失; L c o n f \mathcal{L_{conf}} Lconf表示Confidence Branch上总损失;
  3. 上文提到,patch 内的像素具有不同的学习难度,并产生不同的计数误差。论文定义“困难的像素”为高估patch中的最高估子区域,以及低估patch中的最低估子区域。以高估区域为例,将一个高估patch均分为四个相同大小的、互不重叠的子区域,那么这四个子区域中至少有一个是高估区域,取其中最高估的子区域为下一步的迭代区域(而高估patch中的低估子区域有助于缓解父区域的高估问题,因此在PRA Loss中被忽略,仅由其它Loss函数进行常规优化),直到到达像素水平。最终选择的像素被认为是整个图像中最难的像素,这些像素通过 PRA Loss 进一步优化;搜索过程的可视化如下图所示:
    迭代寻找困难像素的过程
    上述搜索过程最开始的输入为 D e s t D^{est} Dest,首先将其划分成四个相同大小的、互不重叠的patch,每一个patch要么高估要么低估,然后即可按照上述流程进行迭代搜索(高估patch中寻找高估子区域,低估patch中寻找低估子区域;而patch中的其它子区域则被忽略)。在找到最困难的像素之后,PRA Loss损失函数定义如公式(6)所示:
    L p r a = ∥ D p ∈ G e s t − D p ∈ G g t ∥ 2 2 + γ ∥ D p ∈ H e s t − D p ∈ H g t ∥ 2 2 (6) \mathcal{L}_{pra}=\Vert D^{est}_{p\in \mathcal{G}}-D^{gt}_{p\in \mathcal{G}} \Vert_2^2 + \gamma \Vert D^{est}_{p\in \mathcal{H}}-D^{gt}_{p\in \mathcal{H}} \Vert_2^2 \tag{6} Lpra=DpGestDpGgt22+γDpHestDpHgt22(6)
    式中 p p p表示最终预测图 D e s t D^{est} Dest中的像素, G \mathcal{G} G表示 D e s t D^{est} Dest中的所有像素集合,而 H \mathcal{H} H则表示在 D e s t D^{est} Dest中搜索到的所有困难像素集合, γ \gamma γ表示权重因子。
  4. 最终的损失函数定义如公式(7)所示:
    L f i n a l = L d e n + λ L c o n f + L p r a (7) \mathcal{L}_{final}=\mathcal{L}_{den}+\lambda \mathcal{L}_{conf}+\mathcal{L}_{pra} \tag{7} Lfinal=Lden+λLconf+Lpra(7)
    本篇博客仅作为个人学习的论文笔记使用,如有侵权,请联系删除
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值