Crowd counting 之 From Open Set to Closed Set: Counting Objects by Spatial Divide-and-Conquer

ICCV2019年的文章,arxiv地址,出发点在于解决自然场景下区域人数范围无上限,与training set中场景人数有限的问题。
自然场景下,人数的变化范围是 [ 0 , + ∞ ) [0,+\infty) [0,+),但是训练集中的图片场景有限,我们很难用有限的场景和有限的人数得到足够好的模型,来应对真实场景中 [ 0 , + ∞ ) [0,+\infty) [0,+)范围的人数变化。Figure 1描述了SHA数据集中的长尾效应,选取了很多 64 × 64 64\times64 64×64的patch,可以看到多数patch包含的人数少,误差低,少数包含人数多,误差大,那么对于回归器来说,是否有必要把所有的情况都统一放在同一个范围处理呢?举例,训练集和测试集中图片包含1000-2000人占5%,1000以下占95%,specifically 200以下80%,200到1000占15%,那么回归器如果对于所有的图片都在0到2000范围来回归,给人的感觉就是没有抓住重点,为了少数图片而极大的增加了搜索区域或优化区域。既然0-200的占80%,不如把主要关注点放在0-200上来,那剩下的200-1000和1000-2000怎么解决呢?counting有个独特的属性,空间可分割性(spatially decomposable),也就是1个区域分割为几个小区域再汇总起来,是典型的divide and conquer分治递归思想。比如我的回归器只关注于0-20人的区域,或者说在包含0-20人的场景/图片中效果好,精度高,那么对于人数多于20的(这个20应该是指初步估计结果),就把图像划分成4块,如果1/4的图像还是多于20人,继续划分。
那么问题来了,如何划分呢?
naive的方法是上采样,再根据密度分割,会导致图像模糊和指数级的复杂度。
Inspired by RoI
把open set转变为closed set问题

SDC

From quantity to interval

把要预测的数字范围从 [ 0 , + ∞ ) [0,+\infty) [0,+)划分为 { 0 } , ( 0 , C 1 ] , ( C 1 , C 2 ] , . . . [ C m , + ∞ ) \{0\},(0,C_{1}],(C_{1},C_{2}],...[C_{m},+\infty) {0}(0,C1],(C1,C2],...[Cm,+),这些子区间对应m+1个类,比如 C 1 &lt; k &lt; C 2 C_{1}&lt;k&lt;C_{2} C1<k<C2对应class=1,如果一个图片被分到 ( C i , C i + 1 ] (C_{i},C_{i+1}] (Ci,Ci+1],那么估计的人数是中位数 C i + C i + 1 2 \frac{C_{i}+C_{i+1}}{2} 2Ci+Ci+1,最后一个 [ C m , + ∞ ) [C_{m},+\infty) [Cm,+)使用 C m C_{m} Cm代替。

Single-Stage Spatial Divide-and-Conquer

Figure2所示,主干网络结构完全采用VGG,结合UNet,除去了最后的全连接,输入都是 64 × 64 64\times64 64×64的patch,由于有5个池化,所以得到 2 × 2 2\times2 2×2的feature maps,输入分类器中得到分类结果 C 0 C_{0} C0,作为整张图的密度估计结果。是为first stage
上采样加与上阶段的feature maps concat,conv得到 4 × 4 4\times4 4×4的feature maps,分为4个 2 × 2 2\times2 2×2区域,输入分类网络得到 2 × 2 2\times2 2×2 C 1 C_{1} C1,每个元素对应原图4个 32 × 32 32\times32 32×32的sub-region。
如何决定分割哪个区域呢?
使用division decider
division decider会生成一个soft mask W 1 W_{1} W1,值在区间 [ 0 , 1 ] [0,1] [0,1],越接近0意味着越不需要分割。并以此计算划分结果division result: D I V 1 = ( I − W 1 ) ⋅ a v g ( C 0 ) + W 1 ⋅ C 1 DIV_{1}=(\mathbb{I}-W_{1})\cdot avg(C_{0})+W_{1}\cdot C_{1} DIV1=(IW1)avg(C0)+W1C1
与此类似, D I V i = ( 1 − W i ) ⋅ a v g ( C i − 1 ) + W i ⋅ C i DIV_{i}=(1-W_{i})\cdot avg(C_{i-1})+W_{i}\cdot C_{i} DIVi=(1Wi)avg(Ci1)+WiCi D I V N DIV_{N} DIVN积分得到最后的结果,作者说two stage已经足够好了,也就是 N = 2 N=2 N=2
loss函数:cross-entropy对应于分类结果, ℓ 1 \ell_{1} 1 loss对应于 D I V N DIV_{N} DIVN,总loss是加和(不需要设置权重吗), L = ∑ i = 1 N L C i + L R N \mathcal L = \sum_{i=1}^{N}L_{C}^{i}+L_{R}^{N} L=i=1NLCi+LRN

Open set or closed set

这一段是想证明,在closed set上训练的模型,很难在open set上的实际场景有好的泛化能力。在cell counting数据集上选了若干个 [ 0 , 10 ] [0,10] [0,10]的patch做训练集,若干 [ 0 , 20 ] [0,20] [0,20]的patch做测试集,发现测试集中 [ 0 , 10 ] [0,10] [0,10]区间的patch精度很高, [ 10 , 20 ] [10,20] [10,20]区间的误差很大。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值