yolov5分文件解析(封装部分-detect.py)

在整体学习之前,需要对库中的参数和部分进行搜索学习。在我的学习过程中,我搜索了以下内容

yolov5

说到yolov5的图像处理,就绕不开神经网络卷积处理的Feature Map (特征图)表征的是神经空间内一种特征;其分辨率大小取决于先前卷积核的步长 。 层与层之间会有若干个卷积核(kernel),上一层中的每个feature map跟每个卷积核做卷积,对应产生下一层的一个feature map。 feature map的含义在计算机视觉领域基本一致,可以简单译成特征图,例如RGB图像,所有像素点的R可以认为一个feature map(这个概念与在CNN里面概念是一致的)

卷积:卷积也可以被形式化描述。实际上,它是一种数学运算,与减法、加法、乘法和除法有着本质的区别。虽然操作本身很复杂,但它对于简化更复杂的表达式非常有用。在物理和工程中,卷积被广泛用于简化方程——在稍后对卷积进行简短的正式描述之后——我们将把这些领域的想法与深度学习联系起来,以加深我们对卷积的理解。理解。但是现在让我们从实际的角度来理解卷积。

对比起之前的版本yolov4,v3等,yolov5的网络结构有一定的变化,但是有一个很显著的特点就是:小目标检测效果好(Yolov5的目标检测网络有s,m,l,x四个版本)其大小,深度还有feature map的参数都不同(github上搜索yolov5第一个开源项目底下有四个版本的性能对比)

: 先解释一下里面会出现的一些名词:

1.backbone:翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用的是resnet VGG等,而不是我们自己设计的网络,因为这些网络已经证明了在分类等问题上的特征提取能力是很强的。在用这些网络作为backbone的时候,都是直接加载官方已经训练好的模型参数,后面接着我们自己的网络。让网络的这两个部分同时进行训练,因为加载的backbone模型已经具有提取特征的能力了,在我们的训练过程中,会对他进行微调,使得其更适合于我们自己的任务。

2.head:head是获取网络输出内容的网络,利用之前提取的特征,head利用这些特征,做出预测。

3.neck:是放在backbone和head之间的,是为了更好的利用backbone提取的特征

4.bottleneck:瓶颈的意思,通常指的是网网络输入的数据维度和输出的维度不同,输出的维度比输入的小了许多,就像脖子一样,变细了。经常设置的参数 bottle_num=256,指的是网络输出的数据的维度是256 ,可是输入进来的可能是1024维度的。

5.GAP:在设计的网络中经常能够看到gap这个层,是Global Average Pool全局平均池化,就是将某个通道的特征取平均值,经常使用AdaptativeAvgpoold(1),在pytorch中,这个代表自适应性全局平均池化,说人话就是将某个通道的特征取平均值。
重点:卷积神经网络 feature map 特征工程算法
# Inference
t1 = time_synchronized()
“””
前向传播 返回pred的shape是(1, num_boxes, 5+num_class)
h,w为传入网络图片的长和宽,注意dataset在检测时使用了矩形推理,所以这里h不一定等于
num_boxes = h/32 * w/32 + h/16 * w/16 + h/8 * w/8
pred[…, 0:4]为预测框坐标
预测框坐标为xywh(中心点+宽长)格式
pred[…, 4]为objectness置信度
pred[…, 5:-1]为分类结果
“””

Yolov5中的网络文件是yaml格式,和3,4代的cfg不同,3代和4代我只是浏览了一下,所以不会涉及

接下来是内部参数的介绍

weights:训练的权重(之前提到的s,m,l,x)
source:测试数据,可以是图片/视频路径,也可以是’0′(电脑自带摄像头),也可以是rtsp等视频流

0是本机摄像头 1是其他usb摄像头以此类推(也可以下载IP摄像头,对地址和ip进行链接,从而达到使用手机摄像头的作用)
output:网络预测之后的图片/视频的保存路径
img-size:网络输入图片大小
conf-thres:置信度阈值
iou-thres:做nms的iou阈值
device:设置设备
view-img:是否展示预测之后的图片/视频,默认False
save-txt:是否将预测的框坐标以txt文件形式保存,默认False
classes:设置只保留某一部分类别,形如0或者0 2 3
agnostic-nms:进行nms是否也去除不同类别之间的框,默认False
augment:推理的时候进行多尺度,翻转等操作(TTA)推理
update:如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
help函数用在解释引用东西的说明
>>help(‘sys’)             # 查看 sys 模块的帮助
>>>help(‘str’)             # 查看 str 数据类型的帮助
>>>a = [1,2,3]
>>>help(a)                 # 查看列表 list 帮助信息
>>>help(a.append)          # 显示list的append方法的帮助

版权声明:本文为博主huyichrn原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_58652978/article/details/123326631

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年3月8日 下午11:32
下一篇 2022年3月11日 上午10:37

相关推荐