当前位置: 首页 > news >正文

Yolo底层原理学习--(第二篇)

一,IOU置信度与非极大值抑制NMS

在第一篇文章中我们讲到,对于一张图片,在前向传播的过程后(也就是卷积,池化,全连接等等),会生成许许多多个预测框,那么怎么从这么多预测框筛选出最好的几个框来达到预测功能呢?这里就需要用到IOU和非极大值抑制。


(1)IOU:

什么是IOU?

(1.1)训练阶段:

在模型训练阶段IOU会首先筛选置信度小于阈值的检测框,接着将剩下的预测框与人工标注的真实框做IOU匹配,用来判断是否正确检测到了目标,为后面的反向传播做准备

(1.2)推理预测阶段:

用于非极大值抑制,

推理阶段计算IoU的主要目的是筛选重叠的预测框,避免重复检测同一个目标。具体步骤如下:

  1. 按置信度排序:将所有预测框按置信度从高到低排序。
  2. 选择最高置信度的框:保留置信度最高的框作为有效检测。
  3. 计算IoU:计算该框与其他所有未处理的框的IoU。
  4. 抑制重叠框
    • 如果某个框与当前最高置信度框的IoU超过阈值(如0.5),则认为它们检测的是同一个目标,因此丢弃置信度较低的框
      这里是什么意思呢?就是说因为一个物体必然会占据7*7个小方格中的许多个,都是有效检测的,如果采取只保留置信度最高的,那么如果图片里面有多个同类物体,那么只能检测一个类别物体中的一个,所以我们采用IoU超过阈值(如0.5)舍弃的方法,因为如果两个同类物体虽然置信度都很高,但是彼此不重叠,所以iou值很低,不会被删除,这样既能获取最高的置信度框,又能避免删去同类的其他物体,而这就是非极大值抑制
    • 重复上述过程,直到处理完所有框。

ps:类别置信度=(确实有目标物体的前提下)置信度×类别概率

后处理阶段=IOU+NMS 

二,关于YOLOV2的改进点 

在yolov1的基础上,yolov2进行了许多改进,让我们来看看吧~

改进点有:

2.1 引入批归一化(Batch Normalization, BN)层

问题来源:如下图左边:

当我们在进行数据输入时,我们知道,很多数据的量纲是不统一的。如果此时大小较小的数据 

更为重要,那很明显w1的值就要很大,但是由于梯度下降时渐进的,这时参数更新可能需要很多步才能到达最优点。而如果我们进行归一化操作(如右图),那么梯度更新将变得不那么复杂。也就是说,归一化后的数据分布更稳定,网络在训练时更容易找到最优解,从而加快收敛速度。

当然,加入BN层还有其他好处。


2.1.1 BN层计算步骤


2.2 采用高分辨率网络训练 

相较于yolov1,yolov2先用低分辨率进行训练,之后再用实际检测需要的高分辨率数据进行再训练,有效提高了准确率。

 2.3 删去全连接层 -->convolutional

 

(1)最后的几个全连接层以及前面的最后一个pool层被删去,这有利于获得更高分辨率的图片。

(2)采用416*416进行输入的原因是最后的输出是13*13是奇数矩阵,原来是偶数矩阵的弊端是,按照统计规律,图片目标物体位于中心的可能性较大,这时物体中心点很可能位于映射边框上,使得模型难以区分该点是属于哪一格子里的。

(3)采用解耦合的好处,原来的格子是2个检测框,每个格子的类别概率同属2个检测框,这样会使得两个检测框只能检测同一种物体。而解耦合能使得每个检测框都有自己独立的类别检测概率,从而实现一个格子里面可以检测出多种物体。


2.3.1 采用anchor锚框

 怎么理解这个锚框呢?就是我们考虑到yolo模型通过主干网络提取的信息来确定框框的大小还是有点难的,所以我们给他点“提示”,我们先设定了大小,长宽比不同的box(共9个,后面会通过聚类算法减成5个),之后模型基于此anchor等比例缩放(而不是从0开始画),就能比较好的结合获取到的全局特征,检测出物体并正确画框。


因此,基于convolutional+anchor,我们最后的输出将变成13×13×125.其中125=(5(5个框)*25(每个框都有独立的x,y,w,h,c+20个类别,且每个框都有anchor辅助)

 

同时,作者还采用聚类分析来自动设定anchor锚框,极大提高了准确性。

 2.3.2 引入了新的网络架构Darknet-19

 2.4 采用了passthrough

这里就是说为了能够保留细节信息,我们将某一阶段卷积之后图像先通过passthrough(也就是说如果最后输出是13*13*m,那么我们就要将该图像变换成13*13*4*n(n代表通道数,可以和m不一样),然后将该图像与最后输出的特征图进行contact操作,这样最后输出的图像既有特征提取的,也保留了细节信息。

 

2.5 多尺度训练 

 ok,that's all。知识疯狂涌进脑子,消化不过来了

http://www.lryc.cn/news/602603.html

相关文章:

  • 【HTTP】防XSS+SQL注入:自定义HttpMessageConverter过滤链深度解决方案
  • window显示驱动开发—Direct3D 11 视频设备驱动程序接口 (DDI)
  • 网络编程接口htonl学习
  • CMakelists.txt 实现多级目录编译
  • 星辰大海的征途:星宸科技的中国芯片突围战
  • GaussianMesh运行指南
  • MySQL的常用数据类型详解
  • 飞算科技重磅出品:飞算 JavaAI 重构 Java 开发效率新标杆
  • 塔能科技物联运维平台及城市照明市场竞争力分析
  • kruscal重构树
  • 【Java EE】多线程-初阶-线程的状态
  • Ettus USRP X410/X440 运行 ADC 自校准
  • ubuntu qt环境下出现No suitable kits found解决方案
  • 2025最新Mybatis-plus教程(三)
  • 目前市面上有Android 16KB的手机吗
  • 【Bluedroid】bta_av_sink_media_callback(BTA_AV_SINK_MEDIA_CFG_EVT)流程源码分析
  • OSPF路由协议(上)
  • Linux驱动22 --- RV1126 环境搭建设备树修改
  • 【Linux篇】进程间通信:进程IPC
  • java每日精进 7.28【流程设计6.0(泳池和泳道)】
  • 重生之我在暑假学习微服务第三天《Docker-上篇》
  • 采用黑翅鸢优化算法BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量回归预测,多输入单输出(Matlab)
  • 轻资产革命:连合直租如何用DaaS模式重塑企业资产逻辑
  • 【Apache Tomcat】
  • 设计模式实战:自定义SpringIOC(理论分析)
  • 中国汽车能源消耗量(2010-2024年)
  • 力扣17:电话号码的字母组合
  • 设计模式(二十四)行为型:访问者模式详解
  • ADB+Python控制(有线/无线) Scrcpy+按键映射(推荐)
  • 【学习笔记】AD7708/18(1)-理解官网的参考代码