YOLOv10s训练代码解析11:图像测试2

本专栏会手把手带你从源码了解YOLOv10(后续会陆续介绍YOLOv8、RTDETR等模型),尽可能地完整介绍整个算法,这个专栏会持续创作与更新,大家如果想要本文PDF和思维导图,后台私信我即可(创作不易,不喜勿喷),大家如果发现任何错误和需要修改的地方都可以私信我,我会统一修改。

上一步在加载完成source后,正式开始图像测试(ultralytics/engine/predictor.py)

首先第244行对输入图像处理,numpy转tensor,/ 255 (ultralytics/engine/predictor.py)

调用pre_transformer方法处理图像尺寸(ultralytics/engine/predictor.py)

ultralytics/data/augment.py:调整图像宽高尺寸为32的整数倍,第707行计算宽高调整最小比如,第716行计算最小填补差(使得调整后的图像宽高尺寸为32的整数倍),第第729、730计算上下左右填补的像素个数,第731行灰度值填充(填充后图像的宽高尺寸为32的整数倍)

图像预处理后,开始模型推理(ultralytics/engine/predictor.py)

在ultralytics/engine/predictor.py中调用inference方法

ultralytics/nn/autobackend.py:根据之前选的Backend框架来推理

在ultralytics/nn/tasks.py中调用BaseModel类的forward方法

在ultralytics/nn/tasks.py中调用BaseModel类的_forward_once方法

ultralytics/nn/tasks.py: 最终得到的是one2many和one2one的输出,one2many有两个输出,第一个是三层特征图的预测输出,第二个是预测的三层特征图

ultralytics/nn/modules/head.py:对于v10Detect模块,第512行直接对三层特征图调用one2one_cv2以及one2one_cv3模块来得到输出;第514行以及第517行得到的one2many和one2one包含两个输出,第一个输出是模型的预测输出,维度为[1, 84, 5040],80为四个坐标+80个类别预测,5040为三层特征图对应锚点的数量,第二个输出是三层特征图,对应维度为[1,144,48,80], [1,144,24,40], [1,144,12,20]

ultralytics/nn/modules/head.py:第514行的one2many和one2one类似,多了一个inference步骤

ultralytics/nn/modules/head.py:第57行将输出特征图划分为边框和类别预测;第68行将输出边框预测结合锚点得到目标边框预测值;第69行在拼接目标边框和类别预测输出

ultralytics/nn/modules/head.py:dfl分布转换成bbox

ultralytics/utils/tal.py

在推理完成后,执行后处理

ultralytics/models/yolov10/predict.py:YOLOv10DetectctionPredictor(直接拿的是one2one的结果)

ultralytics/utils/ops.py:检测后处理;第854行计算每个锚点类别预测的最大得分,第855行得到前300个锚点预测的最大得分以及对应的index,第857和858行根据index得到这top300锚点的坐标和类别预测得分,第860行首先将得分展开再得到top300的得分机器对应的index;(由于860行的flatten操作)第861行index % 类别数首先确定索引是属于哪个锚点的,再862行的index // 类别数得到索引是属于锚点的哪个类别的;第863得到对应锚点对应类别预测的bbox

之后后处理仅包括置信度的过滤,没有非极大值抑制NMS(ultralytics/models/yolov10/predict.py)

ultralytics/utils/ops.py:预测图坐标映射回原图

处理后返回到ultralytics/engine/predictor.py;第259计算有多少张测试图片,第262行将运行时间对应到每张图片的每个阶段中,第268行保存结果

self.Results输出结果

在一个完成之后,接着继续从dataloader中读取下一个数据(ultralytics/data/loaders.py)

最后在ultralytics/engine/predictor.py,释放资源,打印输出(至此图片测试完成)

这部分关于的整体流程如下图所示,需要原图和思维导图的朋友关注我私信获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值