yolov3详解


title: yolov3算法理解
date: 2021-11-21 14:45:42
tags:
toc: True


本贴记录自己学习完yolov3算法的后的个人理解

首先我们来了解一下yolov3算法物体检测的具体流程:

  • 前向传播:
  1. 对数据集图片进行处理,padding成为大小形状相同的图片,并对数据进行增强操作(注意:处理完后需要对label中的(tx,ty,tw,th)进行相应的修改,且在label中增加置信度初始化为0)
  2. 将图片放入darknet53网络,输出三个不同规格的特征图依次为(1313),(2626),(52*52)分别用来检测大,中,小三个尺寸的物体。
  3. 将特征图中的数据转化为Tensor,计算sigmoid函数得到tx,ty,tw,th,confidence,cls
  4. 通过偏移量计算公式:

计算得出pre_x,pre_y,pre_w,pre_h.(为了计算iou)

  • loss的计算:
  1. 将label转换成为tx,ty,tw,th,confidence,cls相同的格式(为了能计算loss),并通过gt得出obj_mask,noobj_mask数组,(有物体的grid_cell,obj_mask为1,没有物体的grid_cell,[noobj_mask]为1)
  2. 通过pre_x,pre_y,pre_w,Pre_h和gt_bbox计算iou,将没有物体但是iou大于thresh的grid_cell重新设置为1,(即:即使该grid_cell中没有物体,但是产生的预测框还可以,则让他接着回归计算loss)
  3. loss计算公式
  4. loss = 位置误差+分类误差+obj置信度误差+noobj置信度误差(对与obj_mask=0的grid_cell不计算位置误差)
  • 反向传播,优化模型权重参数。

yolov3主要改进

    1. 使用了darknet53骨干网络,有更好的特征提取能力,增强了对于小物体的检测能力
    1. 设置了三种不同规格的anchor,三种scale,每种分配三种不同尺度的anchor
    1. 使用了不同特征融合,融合不同尺度的特征,增加模型对不同尺度物体的检测
    1. 对于softmax进行改进,将多分类任务分解为多个二分类进行判断(sigmoid)

1.Darknet53主干网络

在yolov3中使用了darknet53骨干网络,相比与v2中的darknet19增加了残差链接模块,并使用3*3,strid=2,padding=1的卷积层代替了原有的MAXPOOL层,采用全卷积层搭建网络。将13*13的feature map进行两倍上采样和26*26的进行拼接,26*26的featuremap上采样和52*52的进行拼接,将浅层网络的细粒度像素结构信息和深层网络的抽象化语义信息进行融合。增强模型对于物体的检测。

注意:使用11卷积减少训练参数,最后输出的feature map通道数为(3(80+5)) = 255

这里附上一张别人的流程图 地址

2. 偏移量的计算

这里sigmoid函数的作用:将预测框中心锁定在真实框内部,加快网络在前期的收敛速度。

后面计算loss的时候,通过对该公式反向推导,得出tx,ty,tw,th的值和网络输出的x,y,w,h计算损失。

3.使用k-means聚类得出anchor

yolov3在coco数据集上沿用了v2的k-means聚类得出9中不同的anchor,将其分为三组,分别用来预测大中小三种不同规格的物体。

4.loss计算

loss计算公式

对于有物体的grid_cell计算位置误差,对于没有物体的grid_cell仅计算置信度误差

注:yolov3中仅将真实物体中心所在的grid_cell视作有该物体,其余的都认为没有。且当一个grid_cell恰好有多个形状近似的物体时,yolov3默认覆盖掉前一个物体的信息。

对于位置误差使用使用MSE损失函数,并乘以(2-w*h)项增加了模型对小框的惩罚力度,对于置信度和分类误差使用BCE损失函数,两两计算然后求和得出

好啦,yolov3差不多就结束了,如果有地方有错误的麻烦帮忙提出来一下,谢谢

版权声明:本文为CSDN博主「shier_smile」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_57459724/article/details/121457234

shier_smile

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

yolov5 检测一类物体

使用yolov5官方框架检测一类物体 yolov5的官方框架可较好的对共80种类进行目标检测,本文介绍一种直接修改源代码来只检测一类物体的方法以及通用的方法(利用数据集训练自己的权重)。 一、直接修

yolov5训练数据集划分

yolov5训练数据集划分 按照默认8:1:1划分训练集,测试集,验证集。 txt文件出现在imageset文件夹。 import os import randomtrainval_pe

Pytorch—万字入门SSD物体检测

前言 由于初入物体检测领域,我在学习SSD模型的时候遇到了很多的困难。一部分困难在于相关概念不清楚,专业词汇不知其意,相关文章不知所云;另一部分困难在于网上大部分文章要么只是简要介绍了SS

目标检测-锚框概念和代码实现

前言 经历过图像分类后,进一步的就是更复杂的目标检测了,从这一章开始,将会不断记录图像目标检测中的学习经历,其中大多数思路以及代码来源,来自于李沐的动手学深度学习课程&#x