Keras YOLO v3代码详解(一):darknet53网络结构分析+Netron工具

上周我们搭建了一套“Windows 10+YOLO v3+Deep_Sort多目标跟踪实验环境”,并做了一些简单的测试记录,具体内容请参考:

https://blog.csdn.net/weixin_41943311/article/details/93747924

那么本周,我们需要详细了解一下YOLO v3的darknet53的网络是什么样的,或者说,是怎样在Keras+Tensorflow环境中一步步构造出这个darknet53网络的(C++环境下的构造过程,先放一放),那么下面我们就来看一看。

 

Keras YOLOv3源代码下载地址:https://github.com/qqwweee/keras-yolo3

关于darknet53网络的构建,请查看源文件:keras-yolo3-master\yolo3\model.py

作为新手,如果对卷积核/过滤器、特征图、卷积层这些概念还不是很清楚,可以先跳到这篇文章来简单学习一下:

https://blog.csdn.net/weixin_41943311/article/details/94434958

这篇文章主要内容分为三部分,(一)darknet53的网络结构,(二)darknet53网络的输出,(三)Netron工具。

 

(一)darknet53的网络结构

darknet53的网络结构如下图所示(图中默认的输入是256X256大小的图片,而实际上YOLO v3建议的输入图片大小为416 X416,因而下图中的256 X256、128 X128、64 X64、32 X32、16 X16、8 X8分别应修改为:416 X416、208 X208、104 X104、52 X52、26 X26、13 X13):

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561983279747&di=21b9bfd69f72bfc47239f75621925621&imgtype=0&src=http%3A%2F%2Ffile.elecfans.com%2Fweb1%2FM00%2F52%2F78%2Fo4YBAFsV5QqAMSHQAADt9IUCdEY637.png

 

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

这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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值