【SOD】小目标检测的设计原理

一、SOD任务的含义、特性、分类

小目标的定义

将目标物的bbox表示为 ( x , y , w , h ) (x,y,w,h) x,y,w,h
小目标:短边长度不小于4像素,长边不超过32像素。
m i n ( w , h ) ≥ 4 p i x e l m a x ( w , h ) ≤ 32 p i x e l min(w,h) \ge 4 pixel \\ max(w,h) \le 32 pixel min(w,h)4pixelmax(w,h)32pixel

学术界还细分为:

  • 小目标检测:SOD(Small Object Detection)
  • 微小目标检测:TOD(Tiny Object Detection)

但具体的标准没有明确的标准,这里都统称为小目标检测

小目标的特性

  1. 小目标之间的交叠概率比较低,即使有交叠,其IoU多数情况下也是比较小的
    在这里插入图片描述
    在这里插入图片描述
  2. 小目标自身的纹理显著度有强弱区别,但是总体来说纹理特征都较弱,很多时候需要借助一定的图像上下文来帮助确认

在这里插入图片描述
如图左侧的图片,人都很难判断是什么。但是不断添加上下文信息,看到人的身体轮廓,人肉眼就能识别出是人脸。

小目标的分类

分类依据:

  1. 图像上下文的依赖程度
  • 比如微小人脸,他是人身体的一部分,所以有身体就能确定是人脸。
  • 而微小人体,背景可以随意换,所以上下文变化很大,依赖程度低。
  • 一般目标是a bart of类的,就都是上下文依赖程度强的。
  1. 自身纹理显著程度
  • 比如飞机,轮廓特征就很明显,纹理特征显著。
  • 车辆就是一个矩形,很容易和其他物体混淆。
    在这里插入图片描述

二、基于感受野的理论推出backbone的设计原则

各个backbone的感受野

做任何尺寸目标的检测任务,模型都需要达到一定的感受野。
由于有效感受野不能被精确计算,所以理论感受野必须要大于目标尺度。
要达到某个固定的理论感受野数值,网络结构如何设计。

这里只选取两个层,

  • 3x3步长为1的卷积
  • 3x3步长为2的卷积,用于下采样

达到相同的感受野,有很多不同的设计方式
在这里插入图片描述

基本认识:在不考虑宽度的情况下,网络深度越深(合理范围内),通常来说更有利于特征学习

很早就发现,把一个5x5的卷积换成两层3x3的卷积,有利于特征学习,参数量少了,感受野增量相同。
对于大多数推理来说,优化的最好的OP为,3x3和1x1的卷积操作。

在这里插入图片描述

对于ResNet 有两个版本,

  • typical stem是7x7,步长为2的。感受野为7
  • deep stem 是三个3x3卷积,第一个步长为2,后两个步长为1。感受野为11

deep stem版本的精度高于typical stem 版本

参考:https://github.com/open-mmlab/mmpretrain/tree/main/configs/resnet
在这里插入图片描述

  1. 一个不严谨的共识:在达到相同大小感受野的情况下,网络越深越好。那么方式一,也就是全用步长为1的3x3卷积,达到相同感受野的同时有最深的深度。但实际要权衡速度和精度。

  2. 二次加工以后的共识:在确保网络结构在各种资源消耗可行的前提下,达到相同大小感受野的情况下,网络越深越好

关注步长为2的卷积所在位置,控制的是达到某个大小感受野的网络深度。对于小目标检测,精心设计放置步长为2卷积的位置以及数量非常重要。

  • 如果有多个步长为2的卷积,那么它越多,网络越浅
  • 如果只有一个步长为2的卷积,那么它越靠前,网络越浅

小目标检测backbone的设计

为了有利于小目标检测的特征学习:

  • 使用步长为2的卷积替代pooling操作进行下采样
  • 避免使用步长超过2的卷积,比如步长为4的卷积
  • 在两个步长为2的卷积之间,需要加入若干步长为1的卷积,这里可以是3x3的卷积也可以是1x1的卷积
  • 达到预期感受野大小的前提下,尽可能让网络更深,但是要把握好各项资源消耗和精度的平衡,要具备可行性

三、Neck的设计

feature map

普通目标检测网络中,neck的两大核心作用:

  • 分而治之:FPN能将backbone上的特征图融合后,输出多个不同大小的特征图。不同尺度的目标,分别由不同的特征图进行预测。大目标分配到低分辨率的feature map,小目标分配到高分辨率的feature map
  • 目标匹配:这个目标因该被分配到哪个分辨率的特征图,这个feature map 的那些points负责预测这个目标。

然而小目标检测网络中,上述Neck的两大核心作用发生变化:

  • 分而治之将不再重要
  • 目标匹配也不再错综复杂

检测任务中最小学习样本不是一个图像,而是feature map 上的 point,因为每个point都是被单独监督的。
要增多小目标的学习样本,就是要更多的point被小目标bbox覆盖,就会有 更多的学习机会,成功检测的概率就增加。

所以目的简化为小目标能被更多的points学到

在这里插入图片描述

  • P1虽然分辨率最高,但是计算量太大,得不偿失。
  • P2:4x4的小目标,仅会覆盖一个Anchor point
  • P3:比8x8更小的目标,可能覆盖不到Anchor point。目标越小,覆盖概率越低。

计算一个bbox会有多少感受野中心命中:
N h i t = ⌊ W b b o x / S w ⌋ × ⌊ H b b o x / S h ⌋ N_{hit} = \lfloor W_{bbox}/S_{w}\rfloor \times \lfloor H_{bbox}/S_{h}\rfloor Nhit=Wbbox/Sw×Hbbox/Sh
W b b o x , H b b o x W_{bbox}, H_{bbox} Wbbox,Hbbox分别是bbox的宽和高, S w , S h S_w, S_h Sw,Sh分别是特征图在宽和高方向上的步长,通常它们相等。

Neck的设计

  • 使用更高分辨率的特征图(如P2层)对小目标进行检测,这会显著增多小目标的学习样本数
  • 更多的point命中目标,就意味着目标有更多的被学习到的机会,也就是变相增多了目标的样本数
  • 增加更多的多个不同分辨率的特征图对小目标进行检测,不仅增多了目标的样本数,更多的anchor point 负责预测,同时提供了更多感受野大小的可能性,提升目标被准确预测的概率
  • 使用朴素的命中(覆盖中心)即匹配的策略,可以确保上述两点中增多样本学习数的结论,这种匹配机制简单有效。

三、增强、增多对小目标的学习

### 小目标检测 (Small Object Detection, SOD) 的相关技术和方法 小目标检测是一个具有挑战性的计算机视觉领域问题,尤其是在复杂背景下的小型物体识别。以下是几种常见的用于解决小目标检测的技术和算法: #### 数据增强技术 数据增强是一种有效的方法来提升模型对小目标的鲁棒性。通过增加图像中的小目标数量或者改变其外观特征,可以提高模型的学习能力[^1]。 ```python import albumentations as A transform = A.Compose([ A.RandomResizedCrop(height=512, width=512, scale=(0.8, 1.0)), A.HorizontalFlip(p=0.5), A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.1, rotate_limit=45, p=0.5), ]) ``` #### 特征金字塔网络 (Feature Pyramid Network, FPN) FPN 是一种常用的架构设计,它能够融合不同尺度的特征图以改善小目标的表现。FPN 结构通过自顶向下的路径增强了低层特征的空间分辨率,从而提高了对小目标检测精度[^1]。 ```python class FeaturePyramidNetwork(nn.Module): def __init__(self, in_channels_list, out_channels): super(FeaturePyramidNetwork, self).__init__() # 定义卷积操作... def forward(self, x): pass # 实现前向传播逻辑 ``` #### 锚框调整策略 对于小目标检测任务,传统的锚框可能无法很好地适应较小的目标尺寸。因此,可以通过重新定义更密集的小尺寸锚框分布来改进这一情况[^1]。 #### 多尺度训练与测试 采用多尺度输入图片的方式可以帮助模型更好地捕捉到各种大小的对象信息。这种方法允许神经网络在不同的缩放级别下学习对象表示[^1]。 ```python def multiscale_inference(model, image, scales=[0.5, 1.0, 1.5]): predictions = [] for scale in scales: scaled_image = cv2.resize(image, None, fx=scale, fy=scale) pred = model(scaled_image) predictions.append(pred) return aggregate_predictions(predictions) ``` #### 使用高分辨率骨干网 选择更高分辨率的基础网络结构也有助于捕获更多细节信息,这对于发现微小物体至关重要。例如 ResNet 或者 EfficientNet 都提供了多种变体支持不同程度的计算资源需求[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值