文章目录[隐藏]
代码:https://github.com/Ybowei/P-CNN
目录
2.基本概念--Few-Shot Object Detection
1.研究背景
随着深度学习特别是深度卷积神经网络的兴起,利用其强大的特征提取能力,在自然场景图像中出现了一系列优秀的目标检测算法。近年来,自然场景图像中的少镜头目标检测受到越来越多的关注,这意味着从有限的训练样本中学习概念并进行标注。具体来说,给定一个带有大量标注样例的辅助基类集和只有少量标注样例的新类集,少镜头检测器可以同时检测基类和新类的目标。自然场景图像(图片第二行)中目标的方向相对单一,大多数目标实例位于图像的中间。遥感图像(图片第一行)中的目标具有任意的方向,目标也十分分散,并且从遥感图像复杂的背景环境中识别前景目标也是不容小觑的问题。因此,这些自然场景图像的方法不适合直接应用于少镜头场景下的遥感图像。
2.基本概念--Few-Shot Object Detection
- 深度卷积神经网络最近在目标检测方面的成功很大程度上依赖于大量带有准确边界框标注的训练数据。当标记数据不足时,CNNs会严重过度拟合而不能泛化。深度学习神经网络需要有从少量样本中进行检测的学习能力,因为一些目标类别天生就样本稀缺,或者很难获得它们的注释。
- 传统的目标检测有一个base class集合 Cb,和base dataset Db 。 Db 包含丰富的数据 {(Xi,Yi)} ,Xi表示image,Yi表示对应的标注,包括在集合 Cb 中的类别信息和边界框坐标信息
- 而对于Few-shot目标检测(FSOD)任务,除了上述集合之外,还有novel class集合 Cn 和novel dataset Dn 。并且 Cb和Cn没有交集 。对于 k-shot检测,每个在Cn中的类有k个带标注信息的objects。Few-shot检测器先在基类数据集上进行学习,然后在k很小的情况下快速地在新类数据集上进行泛化,以此在类别集合为基类和新类共同的测试集上达到良好的性能。
3.研究方法
P-CNN是在通用目标检测框架R-CNN上的扩展,P-CNN主要由三部分组成:原型学习网络(prototype learning network,PLN)、原型引导的区域生成网络(prototype-guided region proposal network,P-G RPN)、检测头(detection head)。PLN从图像中学习良好的原型表示;P-G RPN通过融合原型信息来指导更好地预选框生成,因此,它可以从复杂的背景中更好地识别前景目标。
PLN--原型学习网络
支持图像数据处理:我们用支持图像进行一系列处理来得到原型。因为数据集图片本身大小是800*800,并且每张图片中至少有好几个目标,根据目标正确的标注框先对图片进行裁剪,保证每个图片中有一个目标,剪裁后图片大小是224*224,剪裁后的图片就是支持图像。为了处理目标的方向变化问题,设计了一个简单的数据增强方法,即多方向旋转来丰富方向空间。以随机角度旋转支持图像的每个目标实例5次,与原始目标一起,每个目标实例有六个不同的方向。
公式(3)中Xi是支持图像块,fφ是特征提取器,GAP(global average pooling,全局平均池化)是将特征图进行整张图的一个均值池化,形成一个特征点,把支持图像块特征点组成最后的特征向量,最后得到每个支持图像块的特征向量作为每个类的原型。公式(4)中Xj是查询图像,fque是提取后的查询图像特征。shared backbone作为支持图像和查询图像共同的特征提取器fφ,能够减少模型参数。
P-G RPN--原型引导的区域生成网络
公式(5)中我们把所有原型进行元素相加,得到 pfore。公式(6)中然后用一个全连接层对原型总和 pfore进行重构,紧接着用一个滤波预测器来预测RPN分类层的权重w,F(·)就是由三个全连接层组成的滤波预测器。将预测的权重w作为互补分类器的参数。融合原始RPN分类分支和互补分支,两个分数相加形成最终分类输出。
P-CNN与faster R-CNN中RPN部分是一样的。RPN的作用是筛选出可能会有目标的框,输入是CNN卷积后的特征图,输出是候选框图,RPN不关注具体目标是啥,是车,是人或者狗,楼房都可以。它只是将框内认为是目标,框外认为是背景,做了个二分类。至于框内目标具体是啥,最终是交给分类网络去做。RPN是由一个全卷积网络来实现,可以与检测网络共享整幅图像的卷积特征,从而产生几乎无代价的预选框推荐。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal(预选框)。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
ROI Aligh--感兴趣区域对齐
之前用的都是ROI pooling,ROI Aligh和ROI pooling的作用是一样的,但是ROI Aligh的效果更好。ROI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和包围框回归操作。ROI Pooling这一操作存在两次量化的过程。事实上,经过上述两次量化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测的准确度。为了解决ROI Pooling的上述缺点,ROI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作。
Dection head--检测头
为了获得更好的特征表示,我们现在对每个ROI features进行重构,公式(7)将相同类的ROI feature和原型进行一个通道乘法(k表示类,通道乘法是基于通道的软注意,注意力机制是为了让系统忽略无关信息而关注重点信息),然后将结果送到检测头。检测头由一个池化层和一系列完全连接的层组成,最终有两个同级的输出层(一个用于分类,一个用于回归)。分类就是对边界框的目标进行分类,回归就是对边界框微调,使边界框能更好的包住目标。
训练策略
我们的训练流程分为两个阶段(左)。第一个阶段,只在基类训练集上训练我们的模型来获得一个基本的检测器,从包含大量标注图像的基类数据集中获取支持集和查询集组成的小批量。第二个阶段,利用基类和新类共同构建小批量。右图是传统的一阶段训练策略。
4.实验结果
DIOR数据集:我们在DIOR数据集上进行评估P-CNN方法,该数据集一共23463幅光学遥感图像,分为训练集、验证集、测试集。数据集中图像大小是800*800,为了建立少镜头学习设置,从20个对象类中选择5个作为新类,其余15个作为基类。
绿色的是应该被检测出来并且确实被检测出来的(检测正确的),蓝色是漏报的(应该检测出来但没有检测出来),红色是误报的(检测错误的)。失败的案例大致有三种:1.类与类之间的相似性:船舶和车辆在纵横比、大小和外观上看起来很相似,会出现检测错误的情况。2.密度分布太大:篮球场之间密集分布太大,很难检测出实例。3.环境遮挡:最后一排第二张图片,烟囱被烟雾遮挡而被漏报。
版权声明:本文为CSDN博主「小仝爱吃肥牛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43860947/article/details/122397570
暂无评论