小目标检测 FPN(一)

小目标检测 FPN(一)

小目标的介绍:有两种定义方式,一种是相对尺寸大小,如目标尺寸的长宽是原图像尺寸的0.1,即可认为是小目标,另外一种是绝对尺寸的定义,即尺寸小于32*32像素的目标即可认为是小目标。
方法一:FPN

论文:feature pyramid networks for object detection

主要思想
在FPN之前,大多数目标检测的方法和分类网络一样,用特征提取网络的最后一层来进行回归和预测。

缺点:这种方法只用到高层的语义信息,对于前面特征提取的信息,利用率非常低。在目标检测中位置幸喜尤为重要。位置信息主要在网络的底层,语义信息主要存在于高层。该文章采用不同特征层多尺度融合的方法(特征融合)来进行预测。
在这里插入图片描述
a. 第一幅图是典型的图像金字塔形象,该方法主要是将图像生成不同的尺寸,在每一个尺寸上生成相应的特征图,在每一个特征层上面都要进行预测。
缺点:占用的内存和时间都是比较大的,比较浅的特征层没有必要这样做。

b. 这个和yolov1,比较相似,faster rcnn 一样,在最后一层进行预测,和常见的分类网络也一样。
缺点:对于前面的特征层信息丢失严重。

c. 这个就是单阶段SSD网络了,利用了多层特征层来进行预测,与a比较,不是利用全部特征层来进行预测,与b比较利用多层来进行预测。
缺点:在预测的过程中,每一个尺度都相对独立,没有配合使用。

d. 这个就是FPN层,将小的特征层经过上采样之后与大的特征层进行尺度融合之后再做预测。这样就既可以利用到高层的语义信息,又可以利用到底层的位置信息。

Ps:这个方法在yolov3上面完美体现。

def DarknetConv2D(*args, **kwargs):
    darknet_conv_kwargs = {'kernel_regularizer': l2(5e-4)}
    darknet_conv_kwargs['padding'] = 'valid' if kwargs.get('strides')==(2,2) else 'same'
    darknet_conv_kwargs.update(kwargs)
    return Conv2D(*args, **darknet_conv_kwargs)

#---------------------------------------------------#
#   卷积块
#   DarknetConv2D + BatchNormalization + LeakyReLU
#---------------------------------------------------#
def DarknetConv2D_BN_Leaky(*args, **kwargs):
    no_bias_kwargs = {'use_bias': False}
    no_bias_kwargs.update(kwargs)
    return compose( 
        DarknetConv2D(*args, **no_bias_kwargs),
        BatchNormalization(),
        LeakyReLU(alpha=0.1))

#---------------------------------------------------#
#   卷积块
#   DarknetConv2D + BatchNormalization + LeakyReLU
#---------------------------------------------------#
def resblock_body(x, num_filters, num_blocks):
    x = ZeroPadding2D(((1,0),(1,0)))(x)
    x = DarknetConv2D_BN_Leaky(num_filters, (3,3), strides=(2,2))(x)
    for i in range(num_blocks):
        y = DarknetConv2D_BN_Leaky(num_filters//2, (1,1))(x)
        y = DarknetConv2D_BN_Leaky(num_filters, (3,3))(y)
        x = Add()([x,y])
    return x

#---------------------------------------------------#
#   darknet53 的主体部分
#---------------------------------------------------#
def darknet_body(x):
    x = DarknetConv2D_BN_Leaky(32, (3,3))(x)
    x = resblock_body(x, 64, 1)
    x = resblock_body(x, 128, 2)
    x = resblock_body(x, 256, 8)
    feat1 = x
    x = resblock_body(x, 512, 8)
    feat2 = x
    x = resblock_body(x, 1024, 4)
    feat3 = x
    return feat1,feat2,feat3`
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
改进 YOLOv8 小目标检测层的方法有很多,以下是一些常见的改进方法: 1. 特征金字塔网络(Feature Pyramid Network,FPN):通过在网络中添加多个尺度的特征图,可以提高对小目标的检测能力。FPN 可以通过上采样和下采样操作来生成不同尺度的特征图,然后将这些特征图进行融合,使得网络可以同时关注不同尺度目标。 2. 高效的感受野增强方法:为了提高对小目标的感知能力,可以使用一些感受野增强方法,例如使用空洞卷积(Dilated Convolution)或者可变形卷积(Deformable Convolution)来扩大感受野。这样可以使得网络在保持计算效率的同时,增加对小目标的感知范围。 3. 数据增强策略:通过在训练数据中增加一些针对小目标的数据增强策略,可以提高网络对小目标的检测能力。例如,可以使用随机裁剪、缩放、旋转等操作来生成更多的小目标样本,从而增加网络对小目标的学习能力。 4. 损失函数设计:设计合适的损失函数可以帮助网络更好地学习小目标的特征。例如,可以使用 Focal Loss 来缓解类别不平衡问题,或者使用 IoU Loss 来更准确地度量目标框的位置和大小。 5. 网络结构改进:可以通过改进网络的结构来提高对小目标的检测能力。例如,可以增加网络的深度或宽度,或者使用更复杂的模块(如残差模块)来增强网络的表达能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值