从反向传播角度解读YOLOV5源码:如何从改变优化器,损失函数计算方式等角度提升模型的性能?

本文详细解读了YOLOV5中计算损失函数和优化器反向传播的过程,包括如何调整Loss_items,以及如何利用build_targets函数构建目标并计算各种损失。

前言

上一篇文章中,作者主要聚焦于前线推理,也就是forward的部分,并解决了对于调整模型结构的一个重要问题:应该在哪里调整?如何添加使用新的网络层?对于希望利用YOLO V5的框架改进得到自己的模型的初学者指明了一条道路。本文将致力于解释另一部分问题:在何处能修改反向传播相关参数以达到更好的效果呢?关于这一部分,问题导向可能不在适用于讲清楚整个模块,于是作者决定采用先梳理整个框架,最后一个部分中再根据前文的内容获得问题的答案。

Part 1:对于反向传播内容的概述(总体概述)

产出结果:

Loss:经过损失函数计算出来的损失值

Loss_items:把三个损失值拼接在一起返回

loss, loss_items = compute_loss(pred, targets.to(device))

函数结构:

Step 1:将标注框加载于图片上以便后续能进行计算损失函数

对应函数:build_targets()

产出结果:tcls: targetclass类别数组;tbox: target的预测框的whxy信息;indices: target是针对于这一批的第几张图片而言的;anchors: 用来拟合targetanchor框在当前分辨率下的序号。

tcls, tbox, indices, anchors = self.build_targets(p, targets)

Step 2:利用加载出来的target的信息计算多种损失

对应函数:bbox_iouBCEclsBCEobj

产出结果:loss:单张图片对应的平均损失值

Part 2 细读build_target函数部分

Step1:targets,也就是yaml中的标注内容加载到图片

1)对于targets文件进行维度的扩充

对应代码:
ai = torch.arange(na, device=self.device).float().view(na, 1).repeat(1, nt)  # same as .repeat_interleave(nt)
targets = torch.cat((targets.repeat(na, 1, 1), ai[..., None]), 2)  # append anchor indices

直观效果:178,6)变成了3,178,7

分析:

增添的最后一列是用来模拟这个target框的anchor框的序号(0-2

增添的第一个维度中的3对应的是某一个分辨率大小下的三个对应的Anchor框。这里给预测框增加了一个维度实际上是利用了枚举的一个思想,现将所有情况列举出来,后续经过判断筛选出合适的留存下来,得到问题“对于某个标注框,应该使用哪个预测框来对应地预测它?”的答案。

(2)targets文件中的比例换算成在不同分辨率下的实际坐标

之前在数据集那一篇文章中提到,在数据集中的标注框的位置是通过比例的形式储存的,因此一定是需要一段代码将比例转化成实际的位置信息。

<
Linux创始人LinusTorvalds有一句名言:Talk is cheap, Show me the code.(冗谈不够,放码过来!)。 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。  YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。  本课程将解析YOLOv3的实现原理和源码,具体内容包括: YOLO目标检测原理  神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算 代码阅读工具及方法 深度学习计算的利器:BLAS和GEMM GPU的CUDA编程方法及在Darknet的应用 YOLOv3的程序流程及各层的源码解析本课程将提供注释后的Darknet的源码程序文件。  除本课程《YOLOv3目标检测:原理与源码解析》外,本人推出了有关YOLOv3目标检测的系列课程,包括:   《YOLOv3目标检测实战:训练自己的数据集》  《YOLOv3目标检测实战:交通标志识别》  《YOLOv3目标检测:原理与源码解析》  《YOLOv3目标检测:网络模型改进方法》 建议先学习课程《YOLOv3目标检测实战:训练自己的数据集》或课程《YOLOv3目标检测实战:交通标志识别》,对YOLOv3的使用方法了解以后再学习本课程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值