目标检测:Yolov3网络详解

现在来仔细理解下Yolov3这个网络细节。
目标检测的经典网络有Yolo和SSD,还有今天要记录的Yolov3。
Yolo:将一张图划分为众多个小格子,每个小格子检测到一种物体,并预测两个bounding box,问题是当小格子内的物体众多时,Yolo很可能会漏检。
SSD:不太适合检测小物体,VGG19限制了输出大小为38X38。
Yolov3:当下采样越大,resolution越小,感受野越大,越不容易检测到小物体。Yolov3可以检测到三个尺度(小,中,大)的物体。

下面来看Yolov3。

框架

图1

图2

图3

Yolov3的backbone是darknet-53(53个卷积层),其中N为下采样次数。

DarkNet_53= Conv3x3 + Sum_(下采样 Conv3x3_步长为2 + N x DarkNetBlock)   
DarkNetBlock(含2层卷积)= Conv1x1 + Conv3x3 + Residual

所以我们可以发现DarkNet-53共有1 + (1 + 1 x 2 ) + (1 + 2 x2) + (1 + 8 x 2) + (1 + 8 x 2) + (1 + 4 x 2) +全连接= 53个卷积层。

Yolov3采用了类似SSD网络的mul-scales策略,使用3个scale在这里插入代码片(13x13,26x26,52x52)的feature map进行预测。

有别于Yolov2,这里作者将每个grid cell预测的边框数从Yolov2的5个减为Yolov3的3个。最终输出的tensor维度为N × N × [3 ∗ (4 + 1 + 80)]。其中N为feature map的长宽,3表示3个预测的边框,4表示边框的tx,ty,tw,th,1表示预测的边框的置信度,80表示分类的类别数。

和Yolov2一样,anchor的大小作者还是使用kmeans聚类得出。在coco数据集上的9个anchor大小分别为:(10× 13); (16× 30); (33× 23); (30× 61); (62× 45); (59×119); (116 × 90); (156 × 198); (373 × 326)

其中在Yolov3中,最终有3个分支输出做预测,输出的特征图大小分别为13x13,26x26,52x52,每个特征图使用3个anchor:

13x13的特征图使用 (116 × 90); (156 × 198); (373 × 326) 这3个anchor
26x26的特征图使用(30× 61); (62× 45); (59×119) 这3个anchor
52x52的特征图使用(10× 13); (16× 30); (33× 23) 这3个anchor

在Yolov3里面,前向传播过程中,张量的尺寸变换是通过改变卷积核的步长来实现的,比如stride=(2, 2),这就等于将图像边长缩小了一半(即面积缩小到原来的1/4)。在Yolov2中,要经历5次缩小,会将特征图缩小到原输入尺寸的1/32。若输入为416x416,则输出为13x13(416/32=13)
Yolov3也和Yolov2一样,backbone都会将输出特征图缩小到输入的1/32。所以,通常都要求输入图片是32的倍数。

类别预测方面主要是将原来的单标签分类改进为多标签分类
因此网络结构上就将原来用于单标签多分类的softmax层换成用于多标签多分类的逻辑回归层。首先说明一下为什么要做这样的修改,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类,需要用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输入约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类。

bounding box的坐标预测方式还是延续了YOLO v2的做法
简单讲就是下面这个公式,tx、ty、tw、th就是模型的预测输出。cx和cy表示grid cell的坐标,比如某层的feature map大小是13x13,那么grid cell就有13x13个,第0行第1列的grid cell的坐标cx就是0,cy就是1。pw和ph表示预测前bounding box的size。bx、by。bw和bh就是预测得到的bounding box的中心的坐标和size。坐标的损失采用的是平方误差损失。
在这里插入图片描述
Loss Function
在目标检测任务里,有几个关键信息是需要确定的:(x,y),(w,h),class,confidence 。根据关键信息的特点可以分为上述四类,损失函数应该由各自特点确定。最后加到一起就可以组成最终的loss function了,也就是一个loss function搞定端到端的训练。
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLOv7是一种目标检测深度学习网络结构。根据引用,YOLOv7的基本结构包括YOLOv7的整体结构和YOLOv7 head。 YOLOv7的整体结构可以参考引用。YOLOv7是YOLO系列的最新版本,它在YOLOv5的基础上进行改进。引用中提到,YOLOv7是由YOLOv5和YOLOv6演化而来,同时还有YOLOv76的出现。YOLOv7的网络结构相对于之前的版本更加先进和复杂。 而YOLOv7 head是指网络结构中的头部部分,根据引用,YOLOv7 head采用了pafpn结构。pafpn结构是一种特征金字塔网络结构,用于多尺度目标检测。在YOLOv7中,pafpn结构被用于将不同层次的特征图进行融合和处理。 具体来说,YOLOv7 head首先对骨干网络(backbone)最后输出的32倍降采样特征图C5进行处理,通过SPPCSP操作,将通道数从1024降低为512。然后,根据top-down和C4、C3融合的原则,得到P3、P4和P5特征图。接着,根据bottom-up的原则,将P4和P5与其它特征图进行融合。 与YOLOv5相比,YOLOv7在融合模块方面做了一些改进。引用中提到,YOLOv7采用了ELAN-H模块替代了YOLOv5中的CSP模块,并且将下采样换成了MP2层。ELAN-H模块是一种新的模块,不同于backbone中的ELAN模块,它的主要区别在于cat的数量不同。 至于引用中提到的E-ELAN模块以及代码中的shuffle操作,目前还没有明确的说明。所以,有关这些方面的具体细节还需要进一步研究和理解。 综上所述,YOLOv7是一种目标检测深度学习网络结构,它通过pafpn结构对不同层次的特征图进行融合处理,以实现多尺度的目标检测能力。YOLOv7相对于之前的版本有一些改进,包括头部结构的改进和模块的替换。然而,关于YOLOv7的更多细节和技术细节还需要进一步的研究和理解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [深入浅出 Yolo 系列之 Yolov7 基础网络结构详解](https://blog.csdn.net/u010899190/article/details/125883770)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值