YOLOv3详解

超详细教程:YOLO_V3(yolov3)训练自己的数据 前言:最近刚好做一个项目需要做detection,选择的算法是yolo v3,因为它既有速度又有精度,还非常灵活,简直是工业界良心。做项目免不了需要用到自己的数据集,所以的从头一个脚印的来,走通了之后决定写一个帖子,以免需要用的人少走歪路,节约时间。 官网上已经教我们如何跑起来yolo v3,因此大部分时间其实花在制作数据集上。总体来说,分为四个步骤,分别是:标注数据,利用voc制作自己的数据集,... 阅读详情

图1 YOLOv3目标检测

1. 什么是YOLO

​  YOLO是“You Only Look Once”的简称,它虽然不是最精确的算法,但在精确度和速度之间选择的折中,效果也是相当不错。YOLOv3借鉴了YOLOv1和YOLOv2,虽然没有太多的创新点,但在保持YOLO家族速度的优势的同时,提升了检测精度,尤其对于小物体的检测能力。YOLOv3算法使用一个单独神经网络作用在图像上,将图像划分多个区域并且预测边界框和每个区域的概率。

2. 一个全卷积神经网络——Darknet-53

​  YOLOv3仅使用卷积层,使其成为一个全卷积网络(FCN)。文章中,作者提出一个新的特征提取网络,Darknet-53。正如其名,它包含53个卷积层,每个后面跟随着batch normalization层和leaky ReLU层。没有池化层,使用步幅为2的卷积层替代池化层进行特征图的降采样过程,这样可以有效阻止由于池化层导致的低层级特征的损失。Darknet-53网络如下图左边所示。
图2 Darknet-53结构图

3. 输出

​  输入是(m,416,416,3)。输出是带有识别类的边界框列表,每个边界框由(pc, bx, by, bh, bw, c)六个参数表示。如果c表示80个类别,那么每个边界框由85个数字表示。
  在YOLO中,预测过程使用一个1 × 1卷积,所以输入是一个特征图。由于使用1 × 1卷积,因此预测图正好是特征图大小(1 × 1卷积只是用于改变通道数)。在YOLOv3中,此预测图是每个cell预测固定数量的边界框。
  如图2所示,预测图的深度为75,假设预测图深度为B×(5+C),表示每个cell可以预测的边界框数量。这B个边界框可以指定检测到一个物体。每个边界框有5+C个特征,分别描述中心点坐标和宽高(4)和物体分数(1)以及C个类置信度(图2中C=20)。YOLOv3每个cell预测三个边界框。
  如果对象的中心(GT框中心)落在该cell感受野范围内,我们希望预测图的每个单元格都能通过其中一个边界框预测对象。其中只有一个边界框负责检测物体,首先我们需要确定此边界框属于哪个cell。
  为了实现上面的想法,我们将原始图像分割为最后预测图维度大小的网格。如下图所示,输入图像维度为416×416,步幅为32(最后的预测图降采样32倍),最后预测图维度为13×13,所以我们将原始图像划分为13×13的网格。
图3 图像分割为网格cell示意图

​  cell(输入图像中)包含了目标物体GT边界框中心被选择为对预测物体进行负责。如上图所示,红色的框包含了狗的边界框(黄色框)的中心,因此红色cell对预测狗进行负责。
​  如上图,红色框在第7行第7列的网格,预测特征图是中间的粉黄色长方体,其中的第7行第7列红色的对原图红色方格负责。也就是预测特征图中每个对相对应的原图中的cell负责。
  每个cell可以预测三个边界框(这些边界框都是通过K-means方法聚类得到的长宽,不一定能完整包含物体,后期还会调整边界框范围),那么哪一个边界框会对物体负责呢(被赋为狗的GT标签)?简单介绍下,这里B是每个cell预测的边界框数,这里5是4+1,4个数字表示边界框,1个是边界框类是否有物体的得分,c表示需要预测的物体的数目。
​  下面我们使用另一个例子详细描述(注意这里是YOLOv2例子,每个cell给出5个边界框)。
​  现在我们使用五个边界框。YOLO框架如下:image Deep CNN Encoding 。19是608/32。
图4 图像编码
​  上图是YOLOv2的结果,输出预测特征图,每个cell有五个边界框进行预测,85分别表示是否为物体的分数(1个数字),边界框的表示(4个数字)和类概率(80个类)。如果物体的中心落在某个cell中,那么这个cell对预测物体负责(即使用相对应的预测图中的)。为了简便,我们将的最后两个进行铺平得到。如下图所示:
图5 预测特征图简示
​  现在,对于每个cell的每个锚框我们计算下面的元素级乘法并且得到锚框包含一个物体类的概率,如下图:
图6 每个锚框物体类概率计算
​  下面是YOLO在一张图像上的预测视觉化体现:对于每个表格cell,找到最大的概率分数(在5个锚框和不同类别中获取最大值);每个颜色表示表格cell中认为最可能的类。
图7 每个框最可能表示的类
​  上面的图仅仅是直观上的表现,不是YOLO算法的重点。另一个方法是画出预测的边界框:
图8 预测的边界框
​  上面绘制的框的数量还是太多了,为了减少预测框的数量,我们使用NMS(非极大值抑制)去除多余的边界框。

4. 锚框和预测

​  直接预测框的宽高会导致训练时不稳定的梯度问题,因此,现在的很多目标检测方法使用log空间转换或者简单的偏移(offset)到称为锚框的预定义默认边界框。然后将这些变换应用到锚框以获得预测,YOLOv3具有三个锚框,可以预测每个单元格三个边界框。
  锚框是边界框的先验,是使用k均值聚类在COCO数据集上计算的。我们将预测框的宽度和高度,以表示距聚类质心的偏移量。
  以下公式描述了如何转换网络输出以获得边界框预测:
b x = σ ( t x ) + c x , b y = σ ( t y ) + c y b_x=σ(t_x)+c_x, b_y=σ(t_y)+c_y bx​=σ(tx​)+cx​,by​=σ(ty​)+cy​
b w = p w e t w , b h = p h e t h b_w=p_we^{t_w}, b_h=p_he^{t_h} bw​=pw​etw​,bh​=ph​eth​

​  这里bx,by,bw,bh分别是我们预测的中心坐标、宽度和高度。tx,ty,tw,th是网络的输出。cx,cy是网格从顶左部的坐标。pw,ph是锚框的维度(见下图)。

中心坐标

​  通过sigmoid函数进行中心坐标预测,强制将值限制在0和1之间。YOLO不是预测边界框中心的绝对坐标,它预测的是偏移量:相对于预测对象的网格单元的左上角;通过特征图cell归一化维度。
​  例如,考虑上面狗的图像。如果预测中心坐标是(0.4,0.7),意味着中心在(6.4,6.7)(因为红色框左上角坐标是(6,6))。但是如果预测的坐标大于1,例如(1.2,0.7),意味着中心在(7.2,6.7),现在中心在红色框右边,但是我们只能使用红色框对对象预测负责,所以我们添加一个sidmoid函数强制限制在0和1之间。

5.边界框维度

​  通过对输出应用对数空间转换,然后与锚框相乘,可以预测边界框的尺寸(如上面的计算公式)。
图9 边界框的尺寸
​  这里预测通过图像高度和宽度标准化。因此,如果对于包含狗的边界框的预测为,则特征图上实际宽度和高度为。

6. 物体分数和类置信度

​  物体分数表示一个边界框包含一个物体的概率,对于红色框和其周围的框几乎都为1,但边角的框可能几乎都为0。物体分数也通过一个sigmoid函数,表示概率值。
​  类置信度表示检测到的物体属于一个具体类的概率值,以前的YOLO版本使用softmax将类分数转化为类概率。在YOLOv3中作者决定使用sigmoid函数取代,原因是softmax假设类之间都是互斥的,例如属于Person就不能表示属于Woman,然而很多情况是这个物体既是Person也是Woman。

7. 不同尺度的预测

​  为了识别更多的物体,尤其小物体,YOLOv3使用三个不同尺度进行预测(不仅仅只使用13×13)。三个不同尺度步幅分别是32、16和8。这意味着,输入416×416图像,检测尺度分别为13×13、26×26和52×52(如下图或者更详细如图2所示)。
  YOLOv3为每种下采样尺度设定3个先验框,总共聚类9个不同尺寸先验框。在COCO数据集上9个先验框,9个先验框分配情况如下表:
表1 先验框分配表
图10 不同尺度预测
​  网络降采样输入图像一直到第一个检测层,步幅是32;然后,将此层上采样2倍与上面的同样大小的特征图进行按通道堆叠,第二个检测层按步幅16形成;同样地,相同的上采样过程,最后的检测层步幅为8(详见图2网络步骤)。在每个尺度上,每个cell使用三个锚框预测三个边界框,共9个锚框。所有锚框加起来一共个。
图11 不同尺度预测框

8. 输出处理(在类分数上阈值处理)

​  我们的网络生成10647个锚框,而图像中只有一个狗,怎么将10647个框减少为1个呢?首先,我们通过物体分数过滤一些锚框,例如低于阈值(假设0.5)的锚框直接舍去;然后,使用NMS(非极大值抑制)解决多个锚框检测一个物体的问题(例如红色框的3个锚框检测一个框或者连续的cell检测相同的物体,产生冗余),NMS用于去除多个检测框。
​  具体使用以下步骤:抛弃分数低的框(意味着框对于检测一个类信心不大);当多个框重合度高且都检测同一个物体时只选择一个框(NMS)。
​  为了更方便理解,我们选用上面的汽车图像。首先,我们使用阈值进行过滤一部分锚框。模型有19×19×5×85个数,每个盒子由85个数字描述。将(19,19,5,85)分割为下面的形状:box_confidence:(19×19,5,1)表示19×19个cell,每个cell有5个框,每个框有物体的置信度概率;boxes:(19×19,5,4)表示每个cell的5个框的位置表示;box_class_probs:(19×19,5,80)表示每个cell有5个框,每个框80个类检测概率。
​  即使通过类分数阈值过滤一部分锚框,还剩下很多重合的框。第二个过程叫NMS,里面有个IoU,如下图所示。
图12 IoU
​  实现非极大值抑制,关键在于:选择一个最高分数的框;计算它和其他框的重合度,去除重合度超过IoU阈值的框;回到步骤1迭代直到没有比当前所选框低的框。
图13 使用NMS前后对比

附录

图14 YOLOv3输入输出

参考

AIR_征服天堂_简书
YOLOV3算法详解

补充

yolo2详解及其预测代码复现
yolov1、yolov2、yolov3和SSD的网络结构汇总对比
yolov3的loss组成详解

YOLOV3代码详解 代码分析:https://github.com/eriklindernoren/PyTorch-YOLOv3 论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf 注:本次分析的代码是以上给出的网址,全部根据自己的理解写的,如有不足,还请指正。 1、datasets.py 因为所有模型都包括数据加载,模型载入,训练和测试等,所以先从数据的载... 阅读详情

相关推荐

【YOLOv3 net】YOLOv3网络结构及代码详解

文章目录1 总体介绍2 YOLOv3主干网络3 FPN特征融合4 利用Yolo Head获得预测结果5 不同尺度的先验框anchor box5.1 理论介绍5.2 代码读取6 YOLOv3整体网络结构代码理解7 感谢链接 1 总体介绍 YOLOv3网络主要包括两部分,一个是主干网络(backbone)部分,一个是使用特征金字塔(FPN)融合、加强特征提取并利用卷积进行预测部分。 yolov3网络总体框图如下: 2 YOLOv3主干网络 以采用darknet53网络为例,详解见YOLOv3 backbone

计算机视觉方面的点点滴滴,欢迎一起讨论 1万+

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。购课后可加入白勇老师课程学习交流QQ群:957519975除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括:《YOLOv3目标检测实战:交通标志识别》《YOLOv3目标检测:原理与源码解析》《YOLOv3目标检测:网络模型改进方法》敬请关注并选择学习!

YOLOV3的三个门限值解释以及yolov3详解

YOLOV3 关于yolov3必须了解的三个门限值 ignore_iou_thresh:【IOU门限】标记与真实框有交集的锚框的objectness(框内是否有物体)为1还是-1的分界线 yolov3是对生成的每个锚框进行标记 标记与真实框IOU最大的锚框objectness=1【只有该锚框对应的预测框才参与损失函数计算和类别预测】 标记与真实框的非最大但IOU大于等于ignore_iou_thresh的锚框的objectness=-1表示是真实框对应的锚框(锚框包含真实目标),但其对应的预测框不负责损失

qq_35641067的博客 5721

YOLOv1,YOLOv2,YOLOv3解读

单阶段 YOLO 推荐论文翻译:https://www.jianshu.com/p/a2a22b0c4742 (md格式) 名字解释:You Only Look Once: Unified, Real-Time Object Detection You Only Look Once说的是只需要一次CNN运算,Unified指的是这是一个统一的框架,提供end-to-end的预测,而Real-Tim...

努力充实,远方可期 8562

【目标检测】单阶段算法--YOLOv3详解

论文题目:《YOLOv3: An Incremental Improvement 》 论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf

Roaddd的博客 5447

YOLOv3目标检测算法——通俗易懂的解析

YOLOv3目标检测算法——通俗易懂的解析

chase 9966

YOLOv1到YOLOv3之比较

文章转载自https://www.cnblogs.com/makefile/p/YOLOv3.html 本文逐步介绍YOLO v1~v3的设计历程。 YOLOv1的基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。 每个格子预测B个bounding box及其置信度(confidence scor...

calvinpaean的博客 1万+

GEE开发之Landsat8计算MNDWI和数据分析

上一篇博客介绍了landsat8计算NDWI以及数据的获取,这次介绍MNDWI(改进的归一化差异水体指数)。

等待着冬天的风的博客 8439

YOLOV3详解

通过学习YOLOV3 学习DarkNet网络跟ResNet的区别, 正负样本的匹配,图像金字塔发展史到FPN

bobchen1017的博客 4757

推荐系统[六]:混排算法简介、研究现状混排技术以及MDP-DOTA信息流第三代混排调控框架,高质量项目实战。

混排是指将多个不同的推荐结果混合在一起,以提供更多样化的选择和更全面的覆盖。混排的目的是为了避免推荐系统出现过度偏向某些内容或类型的情况,从而提高推荐的多样性和准确性。混排的实现方式通常是基于多种推荐算法和数据源,通过加权和组合的方式来生成最终的推荐结果。信息流推荐算法的核心是理解用户兴趣,捕捉用户逛买意图,并据此做到高效的人货匹配。

丨汀、的博客 1929

yolov3 详解

通过大量图片去训练这个模型,通过反向传播的方法,神经网络的到一个结果,将其和真实的结果进行比较误差计算(损失函数),我们的目标就是将损失函数降到最低,通过修改卷积核的参数和全连接每一层的权重来进行微调,使得损失函数最小。σ:激活函数,论文作者用的是sigmoid函数,[0,1]之间概率,之所以用sigmoid取代之前版本的softmax,原因是softmax会扩大最大类别概率值而抑制其他类别概率值 ,图解如下。h2是卷积之后的高度,h1是原图像高度,f卷积核高度,p是填充多少,s是卷积核步长。

weixin_45715405的博客 2711

39、低功耗处理器性能评估与Cortex - M23/M33低功耗特性解析

本文深入解析了Cortex-M23和Cortex-M33处理器的低功耗特性及其性能评估方法。介绍了ULPMark、CoreMark、IoTMark-BLE和SecureMark-TLS等基准测试在能效评估中的应用,并详细阐述了处理器的睡眠模式、系统控制寄存器(SCR)配置、WFI/WFE指令、退出时睡眠、挂起时发送事件(SEVONPEND)以及唤醒中断控制器(WIC)等关键低功耗机制。结合状态保留技术,展示了如何通过芯片级设计大幅降低泄漏电流,实现高效能低功耗的物联网与嵌入式系统设计。

Pepper的专栏 129

浅谈YOLOV2与YOLOV3

YOLOv1:YOLOv1论文理解 最近要做目标跟踪,经过调研发现,YOLOv3的速度与精度喜人,超过了同时代的(Faster-R-cnn、SSD、YOLOv2),达到了 art-to-state水平,但是在阅读过程中,尽管我曾经看过v1和v2但是在了解v3的时候还是有点困难,因此重新进行了梳理。 YOLOv2: 不得不说,作者的"分而治之"的策略的确很好,在提高速度的同时,...

xiaomifanhxx的博客 1万+

学习STM32的ADC采集声音

为了采集声音信号,需要一个声音传感器(如麦克风),将声音信号转换为电压信号输入到 ADC 引脚。通过硬件准备、STM32CubeMX 配置和代码实现,我们可以实现将声音信号转换为数字信号,并进行后续处理。STM32 是一款广泛应用于嵌入式系统开发的微控制器平台,其拥有丰富的外设和强大的性能,非常适合进行 ADC(模拟数字转换)的声音采集。函数启动 ADC1 的连续转换模式,然后在一个无限循环中等待 ADC 转换完成,并读取采样结果。四、代码实现 在生成的代码中,会生成一些相关的库文件和示例代码。

m0_75244442的博客 2173

Flink实战(101):双流join(三)双流中实现Inner Join、Left Join与Right Join

声明:本系列博客是根据SGG的视频整理而成,非常适合大家入门学习。 《2021年最新版大数据面试题全面开启更新》 简介 之前文章中提到JoinedStream与CoGroupedStream,例如下列代码: dataStream.join(otherStream) .where(0).equalTo(1) .window(TumblingEventTimeWindows.of(Time.seconds(3))) .apply { ... } 由于joinedStream与

微信搜:import_bigdata,大数据领域硬核原创作者 736

YOLOv2 与 YOLOv3

在 YOLO 出现之前,许多物体检测算法都是基于区域建议(region proposal)的方法,如 RCNN、Fast RCNN 和 Faster RCNN。这些方法通过先生成大量的候选框,再对每个候选框进行分类,尽管精度较高,但计算复杂度较大,难以实现实时性。YOLO 的出现改变了这种局面,它通过将物体检测问题转化为一个回归问题,直接预测边界框和类别。YOLO 的创新之处在于它将整个图像作为输入,一次性输出所有物体的类别和位置,不需要额外的候选框生成步骤,大大提高了检测速度。

2402_85799538的博客 860

21天教你学会PCIe专栏(21)--总结和展望

回顾整个课程的主要内容和知识点总结PCIe技术的发展历程和现状展望PCIe技术的未来发展趋势和应用方向分享学习心得和实践经验1.1 课程回顾基础知识:了解了PCIe的基本概念、发展历程、标准和规范。分层结构:学习了PCIe的物理层、数据链路层和事务层的结构和功能。功能和特性:掌握了PCIe的热插拔、电源管理、多功能设备等高级功能。高速接口技术:学习了PCIe 4.0、5.0和未来趋势。实际案例分析:分析了GPU加速器和存储设备的PCIe设计和优化。常见问题和解决方案。

xiaoheshang_123的博客 671

YOLOv3 与 YOLOv4 总结

目标检测在计算机视觉领域中具有至关重要的地位,YOLO(You Only Look Once)系列算法以其高效性和准确性而备受关注。以下是对 YOLOv3 和 YOLOv4 的总结。YOLOv3 是对 YOLOv2 的进一步改进和优化,在保持快速检测速度的同时,提高了检测精度。它仍然采用将目标检测问题转化为回归问题的思路,将输入图像划分成网格,每个网格预测多个边界框及其对应的类别概率和置信度。YOLOv4 是在 YOLOv3 的基础上进行了大量的改进和优化,进一步提高了检测精度和速度。

djdkfkfw的博客 1543

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《零基础入门AI:YOLOv3、YOLOv4详解》

和前面描述的一样,为了进一步降低模型的复杂度进而提升速度,YOLOv3 选择了重用主干网络所提取的不同尺寸的特征图,主要是 8 倍、16 倍以及 32 倍下采样的特征图,同时采用了 FPN 的设计思想,分别对 16 倍、32 倍以及各自上采样后的结果进行了融合,但是也对其进行了一定的改进,在传统的 FPN 中,特征图通常是通过。对于 416×416×3 输入,YOLOv3 产生三个尺度的特征图:13×13、26×26、52×52,对应总网格数为 13×13+26×26+52×52。这是一种常规的残差单元。

m0_75034893的博客 1575

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

yolov3、yolov4与yolov5性能对比

下面将对yolov3、yolov4与yolov5从性能方面进行对比 1、yolov5四种模型之间的对比 Yolov5s网络最小,速度最少,AP精度也最低。但如果检测的以大目标为主,追求速度,倒也是个不错的选择。 其他的三种网络,在此基础上,不断加深加宽网络,AP精度也不断提升,但速度的消耗也在不断增加。 目前使用下来,yolov5s的模型十几M大小,速度很快,线上生产效果可观,嵌入式设备可以使用。 2、yolov5与yolov3的对比 在相同速度时,yolov5优于yolov3,yolov5有四种模型,

duzhongqiang的博客 5万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iou画 yolov3_YOLOv3详解

Figure 1. YOLOv3目标检测文章组织1. 什么是YOLO?2. 一个全卷积神经网络——Darknet-533. 解释输出4. 锚框和预测5. 边界框维度6. 目标分数和类置信度7. 不同尺度的预测8. 输出处理(在类分数上通过一个阈值过滤)1. 什么是YOLOYOLO是“You Only Look Once”的简称,它虽然不是最精确的算法,但在精确度和速度之间选择的折中,效果也是相当不...

weixin_34526937的博客 896

YOLOv3 从入门到部署:(一)YOLOv3概述

文章目录YOLOv3 从入门到部署:(一)YOLOv3概述VOC数据集合coco数据集YOLO的发展YOLOv3的网络架构yolov3-tiny的工作过程概述yolo-fastes和yolo-fastest-xl YOLOv3 从入门到部署:(一)YOLOv3概述 VOC数据集合coco数据集 这是目标检测领域常用的两个数据集。VOC和coco的区别主要在于图像标注的格式不一样。VOC将目标的标签信息以某种格式保存在.xml格式的文件中,而coco则是保存在.txt文件中。因此有时候VOC和coco不是指数

qq7835144的博客 2933
上一篇: Leetcode #310:最小高度树
下一篇: Markdown(优快云)首行缩进 & 字体居中
wq_0708
博客等级 码龄6年 2万+粉丝 95原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值