PaddleDetection算法分析(2)

本文详细分析了基于Dacknet53的YOLOv3算法,解释了darknet53网络的构成,包括1个32个过滤器的卷积层和5组残差单元。每组残差单元由1x1和3x3卷积层组成,总共52层。此外,还讨论了残差网络、DarknetConv2D的定义以及如何构建三个不同尺度的检测图,用于检测不同大小的物体。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

特色垂类模型有两个模型 一个是车辆检测 一个是行人检测 查看源代码是痛苦的事 因此只看他的关键算法

基于Dacknet53的YOLOv3算法

darknet53一共53层卷积,除去最后一个FC(全连接层,实际上是通过1x1卷积实现的)总共52个卷积用于当做主体网络。

首先分析darknet53的网络结构

这52个卷积层是这样组成的:

首先是1个32个过滤器的卷积核,然后是5组重复的残差单元resblock_body(这5组残差单元,每个单元由1个单独的卷积层与一组重复执行的卷积层构成,重复执行的卷积层分别重复1次、2次、8次、8次、4次;在每个重复执行的卷积层中,先执行1x1的卷积操作,再执行3x3的卷积操作,过滤器数量先减半,再恢复),一共是52层。残差计算不属于卷积层计算。

52 = 1+ (1+1*2 ) + (1+2*2) + (1+8*2) + (1+8*2) + (1+4*2)

每组残差单元的第一个单独的卷积层操作均是一次步长为2的卷积操作,因此整个YOLO v3网络一共降维5次32倍,即:32=2^5,最后输出的特征图维度是13,即:13=416/32;最后1层的通道数是1024,最终的输出结构是(?, 13, 13, 1024)。所以,darknet53模型的输入是(?, 416, 416, 3),输出是(?, 13, 13, 1024)。

这个52层网络是这么定义的:

def darknet_body(x):
 
    '''Darknent body having 52 Convolution2D layers'''
 
    x = DarknetConv2D_BN_Leaky(32, (3, 3))(x)
 
    x = resblock_body(x, num_filters=64, num_blocks=1)
 
    x = resblock_body(x, num_filters=128, num_blocks=2)
 
    x = resblock_body(x, num_filters=256, num_blocks=8)
 
    x = resblock_body(x, num_filters=512, num_blocks=8)
 
    x = resblock_body(x, num_filters=1024, num_blocks=4)
 
    return x


其中,

(1)第1个卷积层DarknetConv2D_BN_Leaky,是这么定义的:

def DarknetConv2D_BN_Leaky(*args, **kwargs):
 
    """Darknet Convolution2D followed by BatchNormalization and LeakyReLU."""
 
    no_bias_kwargs = {'use_bias': False}
 
    no_bias_kwargs.update(kwargs)
 
    return compose(
 
        DarknetConv2D(*args, **no_bias_kwargs),
 
        BatchNormalization(),
 
        LeakyReLU(alpha=0.1))


即:

(1.1)1个Darknet的2维卷积Conv2D层,即DarknetConv2D;

(1.2)1个批正则化层,将输入数据x进行正则化,即BatchNormalization();

(1.3ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值