yolov3源码分析

代码主要分四个部分

  1. 数据读取与处理
  2. 网络代码
  3. loss计算
  4. 预测解码
    以下主要对上面4个部分的关键代码进行详解,同时记录自己当前的一些疑问
    1. 数据读取与处理
    后面再补
    2. 网络代码
    后面再补
    3. loss计算
    本文代码主要简介pytorch版本的yolov3,和源码及ultralytics版本都有所出入,主要去思考其中的细节。
    本节主要从三个函数进行讲解
    1. loss主函数 forward:loss计算过程
      先贴一张loss公式图
      在这里插入图片描述
      yolov3的loss分为三个组要部分:定位损失,置信度损失,类别损失。
      由图中可知边框损失使用mse loss, (2-w * h) 是为了平衡大框和小框带来的影响,yolov1使用宽高的开方进行平衡,类别损失使用二分类交叉熵损失,解除了类别之间的互斥性。置信度仍然使用mse loss计算
     # l代表特征尺度的索引
    
 bs = input.size(0)
 in_h = input.size(2)
 in_w = input.size(3)

 #计算当前特征层的步长
 stride_h = self.input_shape[0] / in_h
 stride_w = self.input_shape[1] / in_w

 #将anchor缩放到当前特征图尺寸
 scales_anchors = [(a_w / stride_w, a_h / stride_h)  for a_w, a_h in self.anchors]

 prediction = input.view(bs,len(self.anchors_mask[l]), self.bbox_attrs,  in_h, in_w).premute(0,1,3,4,2).contiguous()

 #获取预测结果,其中x,y,conf,class_conf需要归一化
 x = torch.sigmoid(prediction[...,0])
 y = torch.sigmoid(prediction[...,1])
 w = prediction[...,2]
 h = prediction[...,3]
 conf = torch.sigmoid(prediction[...,4])
 pred_cls = torch.sigmoid(prediction[...,5:])

 #样本匹配获取mask
 y_true, noobj_mask, box_loss_scale = self.get_target(l, targets, scales_anchors, in_h, in_w
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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的使用方法了解以后再学习本课程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值