论文地址:An end-to-end generative adversarial network for crowd counting under complicated scenes | IEEE Conference Publication | IEEE Xplore
本文主要是提出了用GAN(生成式对抗网络)解决人群计数问题。将有条件的GAN把输入图像转为密度图。用图片和密度图训练有条件的GAN。本文不使用图片增强策略。
人群计数两个问题:视角失真和因为相机高度角度带来的遮挡。传统CNN越复杂,越需要更多数据。人群计数标注好的数据集比较小,为了解决这个问题,提出训练一个CGAN(条件生成式对抗网络)。
1.第一次把CGAN引入人群计数,结合了GAN和CNN。
2.端到端的新方法,输出是该模型输出估计密度图,其像素累积表示计数值。既计数值不错还能减少手工。该方法不仅具有较好的计数精度,而且需要较少的人工。我们的算法很容易实现,此外,该方法可以得到更清晰的密度图,具有良好的空间结构信息和较少的背景干扰。
1.先用高斯核生成ground truth的密度图
2.用训练图片和ground truth的密度图训练CGAN
3.用生成器测试test图片。
如图:
上面的U型ENCODER-DECODER是生成器,下面的D是判别器。
生成器中encoder:Convolution-BatchNorm-LeakyReLU,decoder:Convolution-BatchNorm-Dropout-ReLU。卷积全用的4x4,stride=2,encoder-decoder中第一层不用BN(BatchNorm),图中一共16层,左边9层是encoder,剩下的decoder。
生成器比较简单,就是一个U型网络,输入是训练图片,输出是预测密度图。
判别器写的更简单,只说对不同patch level的patch惩罚,怎么罚没说。判别器网络一共五层,每个和生成器的encoder一样,第一层也没有BN。
x表示GT的密度图,y表示对应GT的image。这篇文章的思想应该是来源于Conditional Generative Adversarial Nets这篇文章。在CGAN这篇文章中,将y作为额外的输入引导信息的生成,可以看到生成器和判别器的输入都多了一个y。
对照CGAN,我自己对这篇文章的理解是:判别器的输入是GT的密度图和对应GT的image,输出是一个概率。生成器的输入是GT的密度图和噪声,输出是伪造的密度图。
不过他的描述挺矛盾的,前文里对于生成器他又说,G是在x(这里的x是指原始图片)的指导下学习噪声向量z到某个图片y的映射。公式和这里有点冲突。
最后他说道因为我们需要把ground truth考虑进入,所以她算了一下y(原始图片)和生成器输出的L1距离??(存疑),超参也没解释。
我看这篇文章的主要目的是想看看GAN怎么用在人群计数中,但是这篇文章实在看的我一头雾水。不过生成器将用于生成测试图像的密度图,这些结果将用作预测密度图。也就是说,生成器用于测试阶段的推理。这个想法还是挺有意思的。