yolov3网络结构_YOLO v3详解(一)

王老师开讲啦 25d652b8b3ba032a4159a77aee8c2c04.png

王老师是中原动力人工智能骨干研发人员之一,技术深厚,今后会由王老师陆续带来人工智能方向技术干货,以飨读者。欢迎交流。

25d652b8b3ba032a4159a77aee8c2c04.png 针对image_demo.py的解析

9d3f359556963303a4bf3e8c2158d3d9.png

tf.keras.layers.Input   构建输入层

input_layer  = tf.keras.layers.Input([input_size, input_size, 3])  

由于此时input_size = 416,  因此:

input_layer  = tf.keras.layers.Input([416, 416, 3])

tf.keras.layers.Input() 

作用:用于构建网络的第一层——输入层,该层会告诉网络我们的输入的尺寸是什么

参数列表:

    layers.Input(

    shape=None,

    batch_size=None,

    name=None,

    dtype=None,

    sparse=False,

    tensor=None,

    ragged=False,

    **kwargs,)

参数解析(4个常用的):

c501a7ac595e884e0cd0de4277094953.png

l  shape:输入的形状,tuple类型,list类型也没问题。不含batch_size;tuple的元素可以为None类型数据,表示未知的或者说任意的,一般这里不用None

l  batch_size:声明输入的batch_size大小,一般会在预测时候用,训练时不需要声明,会在fit时声明,即dataset类型数据声明了batch_size

l  name:给layers起个名字,在整个网络中不能出现重名。如果name=None,则系统会自动为该层创建名字。

l  dtype:数据类型,在大多数时候,我们需要的数据类型为tf.float32,因为在精度满足的情况下,float32运算更快。

5d1e57f4e0c9af96612efe9f6662291f.png

总结:因此通过tf.keras.layers.Input()  构建了网络的输入层,shape指定了输入图片的形状为 [416, 416, 3]

Input 方法的结果为tf.Tensor类型,shape为 (None,416,416,3)

a026887212a1124d4cd9c40c4a1eabfb.png 

YOLOv3的网络结构

common.py定义了YOLOv3的网络结构,如下:         

(提示:卷积核(1,1,1024(chanels),512(filters) ),表示卷积核的深度(等同于前一层对本层的输入channel)为1024,本层有卷积核512个,将输出512个Feature map,因此对下次的输出channel为512)

只需要一句话就解释清楚了:不管输入图像的深度channel为多少,每经过一个卷积核(filter),最后都通过一堆公式输出一个深度为1的特征图(feature map)。也就是说不管卷积核的深度channel是多少(卷积核的深度,和要被卷积的原始神经元的深度要一样),而卷积终将会合并卷积深度为1,不同的filter可以卷积得到不同的特征,也就是得到不同的feature map。。。我想这才是很多人疑惑的地方。

这里还是想强调一下,卷积核(filter)的深度channel数,其实是与输入图像相同的,所以常常会省略不写,只写输出filters的数量。

9debbb840d525af88323400f3ec712dc.png

图1 YOLO v3结构

YOLOv3的darknet53中,conv2d共有52个:

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

darknet53之后,conv2d共有23个:

(5+2)+(1+5+2)+(1+5+2)=23

因此,YOLOv3的conv2d共有75个。

0 1多尺度检测

YOLOv3 对输入图片进行了粗、中和细网格划分,以便分别实现对大、中和小物体的预测。假如输入图片的尺寸为 416X416, 那么得到粗、中和细网格尺寸分别为 13X13、26X26 和 52X52。这样一算,那就是在长宽尺寸上分别缩放了 32、16 和 8 倍。

YOLOv3预测三种不同大小的box, 并且借鉴了 feature pyramid networks(FPN)的思想,将网络中一些深层特征图上采样之后,与浅层相同大小特征图在深度方向拼接concatenate,得到语义信息更丰富(来自较后面的特征图)且分辨率更高(较前面的特征图)的组合特征图,建议详细阅读一下FPN

0 2Darknet53的使用

可以看到YOLOv3的最初部分,是一个darknet53。此时 input_data的结果为tf.Tensor类型,shape为 (None,416,416,3)

0e5eccf074ebe2aa5db4e4c77e792432.png

作者首先训练一个darknet-53,为了两个目的:

01

这个网路结构能在ImageNet有好的分类结果,从而说明这个网络能学习到好的特征(设计新的网络结构,这个相当于调参,具体参数怎么调,就是炼丹了);

02

为后续检测模型做初始化。darknet-53的确很强,相对于ResNet-152和ResNet-101,darknet-53不仅在分类精度上差不多,计算速度还比ResNet-152和ResNet-101强多了,网络层数也比他们少。

注意

如图2所示:Yolo_v3网络就是使用了darknet-53的前面的52层(没有全连接层FC,ull Connection)。

darknet53中,有5次上采样。对应图1来看,即从左至右的res1、res2、res8、res8、res4。

fada6e8ec0dc64a9661f4ae9fcf2aec6.png

 图2  darknet-53网络结构

03上采样的使用

网络中作者进行了三次检测,分别是在32倍降采样,16倍降采样,8倍降采样时进行检测,这样在多尺度的feature map上检测跟SSD有点像。

在网络中使用up-sample(上采样)的原因:网络越深的特征表达效果越好,比如在进行16倍降采样检测,如果直接使用第四次下采样的特征来检测,这样就只使用了浅层特征,这样效果一般并不好。如果想使用32倍降采样后的特征,但深层特征的大小(shape)太小,因此yolo_v3使用了步长为2的up-sample(上采样),把32倍降采样得到的feature map的大小提升一倍,也就成了16倍降采样。同理8倍采样也是对16倍降采样的特征进行步长为2的上采样,这样就可以使用深层特征进行detection。

Yolo v3通过上采样的方式很好的使16倍降采样和8倍降采样使用深层特征,但进行4次下采样和3次下采样得到的浅层feature map大小是一样的。Yolo_v3想把这些浅层特征也利用起来,就有了route层。把16倍降采样得到的feature map和四次下采样得到的层拼接在一起,在channel那个维度进行拼接。这样拼接的好处:让网络同时学习深层浅层特征,表达效果更好。8倍降采样同样也是这样的操作,把三次下采样的feature map拼接在一起。

9583ee1977ebfed8160c424c86083373.png 596346a552c161df6cb165dd53886876.png 6e09c6a4bdc8be5f1ef56ddf9ccce5d1.png

本期先讲到这里,第二期很快就会再见,敬请关注。


14620b4364f313f7805dc00396e676f6.gif

赞和在看点这里 12c26b2433e8915a0973f412863e99a2.gif
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLOv3是一种目标检测算法,其网络结构可以分为主干网络、FPN特征融合、YOLO Head和不同尺度的先验框anchor box。主干网络负责提取图像的特征,FPN特征融合用于将不同尺度的特征图进行融合,YOLO Head用于生成目标检测的预测结果,而不同尺度的先验框anchor box用于检测不同大小的目标。 主干网络是YOLOv3的基础,它采用了Darknet-53网络结构,包含53个卷积层。这个网络结构可以提取出图像的高级语义特征。 FPN特征融合是为了解决不同尺度目标检测的问题。它通过将不同层级的特征图进行融合,使得网络可以同时检测不同大小的目标。 YOLO Head是YOLOv3的核心部分,它负责生成目标检测的预测结果。它将融合后的特征图输入到多个卷积层和全连接层中,最终输出目标的类别、位置和置信度。 不同尺度的先验框anchor box是为了适应不同大小的目标。YOLOv3使用了3种不同尺度的先验框,分别用于检测小、中、大尺寸的目标。 总的来说,YOLOv3网络结构通过主干网络提取特征,通过FPN特征融合获得不同尺度的特征图,通过YOLO Head生成目标检测的预测结果,最终实现了高效准确的目标检测。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [【YOLOv3 net】YOLOv3网络结构及代码详解](https://blog.csdn.net/weixin_45377629/article/details/124080087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [YOLOv3网络结构解析](https://blog.csdn.net/dz4543/article/details/90049377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值