论文“Perceptual Generative Adversarial Nets for small object detection”的实现

数据挖掘 Python 物体检测 生成模型
2022-01-20 21:00:09

我研究了关于Perceptual Generative Adversarial Nets for small object detection的研究论文。

他们在那里详细介绍了生成器网络的结构,如下图所示: 在此处输入图像描述

我是GAN领域的新手。我在设计生成器功能时遇到问题。谁能帮我吗?

1个回答

生成器函数只是一个 CNN,它在这里将图像映射到特征图(好吧,无论如何,ROI 都是池化的)。作为 GAN 并没有什么特别之处。使 GAN 成为一种东西的是它作为密度估计器的用途以及它是如何训练的(即对抗性的),而不是它的架构。所以不用担心对 GAN 不熟悉。

无论如何,在我看来,这里的复杂部分是对象检测框架部分的存在。为了更好地理解它,尽管您可能已经这样做了,但我建议阅读“RCNN 三部曲论文”:RCNNFast RCNNFaster RCNN,或者至少是中间的一篇,这与此处相关。另请参阅这篇文章这篇关于 ROI 池化的文章,它采用不同大小的 ROI 并将它们中的每一个映射到一个小的固定大小的特征图。

该架构的其余部分主要是标准的卷积层,您可能对此很熟悉。不过,回顾一下ResNet可能会很有用,因为这里使用了 ResBlocks。管道的核心(“骨干”)依赖于 VGG 网络;它的使用在论文的参考文献 24 和 41 中有更详细的解释。

无论如何,这就是正在发生的事情。给定带有提案P的图像I(其中n=|P|),我们首先I上运行,得到低级特征L。然后会发生两件事:Pn=|P|conv1IL

  • 在“顶部路径”上,贯穿for ,产生一个新的特征图,然后通过汇集 ROI 。这给了我们一堆提案,每个提案都是一个特征图像。Lconvii=2:5LTPS1,,Sn

  • 在“底部路径”上,运行通过两个小的 conv 层,然后也将 ROI 池化,给出类似的建议堆栈然后这些由标准 ResBlocks 处理,给我们残差Lf1,,fnBnr1,,rn

给出的一堆超分辨率提案, 其中这里仅表示元素总和(即,在大多数基于数组的语言中)。

Y=(y1,,yn)=(S1r1,,Snrn)
S_k + r_k

基本上,问题在于 ROI 池化特征对于大物体来说“看起来不错”,但对于小物体来说却很糟糕,因为后者的像素数量较少。这里的解决方法是在顶部路径中进行“标准”对象检测,但在底部路径中为每个 ROI学习一个“残差”,这样当这个残差被添加到一个小的提议时,它会被赋予细节通常只出现在大型提案中。换句话说,我们基本上是在小 ROI 上进行超分辨率,以帮助检测器检测小物体。rjSj


正如论文作者在标题中所写:

生成器是一个深度残差网络,它将来自较低层的具有细粒度细节的特征作为输入,并将它们传递给 3×3 卷积滤波器,然后是 1×1 卷积滤波器,以增加特征维度以与“转换5”。然后使用 B 个残差块,每个残差块由卷积层组成,然后是批量归一化和 ReLU 激活,用于学习残差表示,用于将池化特征从小对象的“Conv5”增强为逐元素的超分辨率表示求和运算。

以及在主要论文中:

如图 3 所示,生成器将来自底部卷积层的特征作为输入,保留了许多低级细节,并为特征超分辨率提供了信息。得到的特征首先被传递到 3×3 卷积滤波器,然后是 1×1 卷积滤波器,以将特征维度增加到与“Conv5”相同。然后,引入 B 个具有相同布局的残差块,包括两个 3×3 卷积滤波器,然后是批归一化层和 ReLU 激活层,以学习大对象和小对象之间的残差表示,作为生成模型。然后,通过逐元素求和操作,通过 RoI 池化 [11] 将学习到的残差表示用于增强从“Conv5”池化的小对象提议的特征,