目标检测算法(YOLOv3)

article/2025/8/24 17:53:23

目标检测算法(YOLOv3)

YOLOv3在YOLOv2的基础上,改良了网络的主干,利用多尺度特征图进行检测,改进了多个独立的Logistic regression分类器来取代softmax来预测类别分类.

论文题目:YOLOv3: An Incremental Improvement

主干网络

YOLOv3提出了新的主干网络: Darknet-53 ,从第0层到第74层,一共有53层卷积层,其余均为Resnet层.

和Darknet-19相比,Darknet-53去除了所有的maxpooling层,增加了更多的1X1和3X3的卷积层,但因为加深网络层数很容易导致梯度消失或爆炸,所以Darknet-53加入了ResNet中的Residual 块来解决梯度的问题.

由下图的Darknet-53架构可以看到共加入了23个Residual block.

由于加深了网络层数,Darknet-53相比Darknet-19慢了许多,但是Darknet-53处理速度78fps,还是比同精度的ResNet快很多,YOLO3依然保持了高性能.

多尺度预测

YOLOv3借鉴了FPN的方法,采用多尺度的特征图对不同大小的物体进行检测,以提升小物体的预测能力.

YOLOv3通过下采样32倍 16倍和8倍得到3个不同尺度的特征图,例如输入416X416的图像,则会得到13X13(416/32),26X26(416/16) 以及52X52(416/8),这3个尺度的特征图.如下所示:

每个尺度的特征图会预测出3个Anchor prior, 而Anchor prior的大小则采用K-means进行聚类分析(YOLOv3延续了YOLOv2的作法). 在COCO数据集上,按照输入图像的尺寸为416X416,得到9种聚类结果(Anchor prior的wxh): (10X13),(16X30),(33X23),(30X61),(62X45),(59X119),(116X90),(156X198),(373X326)

不同大小特征图对应不同的Anchor prior

  • 13X13的特征图(有较大的感受野)用于预测大物体,所以用较大的Anchor prior 即(116X90),(156X198),(373X326)
  • 26X26的特征图(中等的感受野)用于预测中等大小物体,所以用中等的Anchor prior 即(30X61),(62X45),(59X119)
  • 52X52的特征图(较小的感受野)用于预测小物体,所以用较小的Anchor prior 即(10X13),(16X30),(33X23)

网络结构

我们先来看YOLOv3的网络结构如下所示:

  • 若输入416X416的图像,在79层卷积后,会先经过32倍的下采样,在通过3X3,1X1的卷积层后,得到13X13的特征图(第82层)
  • 为了实现能够检测小物体,借鉴了FPN的方法,将第79层13X13的特征图进行上采样,与第61层的特征图进行合并(concat),在经过16倍的下采样以及3X3,1X1的卷积后,得到26X26的特征图(第94层)
  • 接着第91层26X26的特征图再次上采样,并与第36层26X26的特征图进行合并(concat),在经过8倍下采样以及3X3,1X1的卷积层后,得到52X52的特征图(第106层)

YOLOv2 VS YOLOv3

  • YOLOv2采用passthrough结构来检测小物体的特征,而YOLOv3采用3个不同尺度的特征图来进行检测
  • YOLOv2预测输出的bounding box共有13X13X5=845个, 而YOLOv3有13X13X3+26X26X3+52X52X3=10647个

YOLOv1 VS YOLOv2 VS YOLOv3

  • YOLOv1在特征图(7X7)的每一个网格里预测出2个bounding box以及分类概率值,每个bounding box预测5个值
  • YOLOv1总输出为 7X7X(2X5+20)
  • YOLOv2在特征图(13X13)的每一个网格里预测5个bounding box(对应5个Anchor Box),每个bounding box预测出5个值以及分类概率值
  • YOLOv2总输出为 13X13X5X(5+20)
  • YOLOV3在3个特征图的每一个网格中预测出3个bounding box(对应3个Anchor prior),每个bounding box预测5个值以及分类概率值(YOLOv3采用的为COCO数据集,共有80类)
  • YOLOv3总输出为13X13X3X(5+80)+26X26X3X(5+80)+52X52X3X(5+80)

框的预测

YOLOv3使用Logistic regression来预测每个bounding box的confidence,以bounding box与gt的IOU为判定标准,对每个gt只分配一个最好的bounding box.通过利用这种方式,在做Detect之前可以减少不必要的Anchor进而减少计算量.

  • 正样本: 将IOU最高的bounding box, confidence score设置为1
  • 忽略样本: 其他不是最高IOU的bounding box 并且IOU大于阈值(0.5),则忽略这些bounding box, 不计算loss
  • 负样本: 若bounding box 没有与任一gt对应,则减少其confidence score

为什么YOLOv3要将正例confidence score设置为1?

  • 因为confidence score是指该bounding box是否预测出一个物体的置信度,是一个二分类.并且在学习小物体时,有很大程度会影响IOU.如果像YOLOv1使用bounding box与gt的IOU作为confidence,那么confidence score始终很小,无法有效学习,导致检测的Recall不高.

为什么存在忽略样本?

  • 由于YOLOV3采用了多尺度的特征图进行检测,而不同尺度的特征图之间会有重合检测的部分.
  • 例如检测一个物体时,在训练时它被分配到的检测框是第一个特征图的第三个bounding box, IOU为0.98, 此时恰好第二个特征图的第一个bounding box与该gt的IOU为0.95,也检测到了该gt,如果此时给其confidence score强行打0,网络学习的效果会不理想.

类别的预测

YOLO之前都是使用softmax去分类每个bounding box,但softmax只适用于单目标多分类(甚至类别是互斥的假设),而预测目标里可能有重叠的标识(属于多个类并且类别之间有相互关系),比如Person和Women

因此YOLOv3改采用多个独立的Logistic regression分类器(可以对多标识进行多分类预测)替代,使用二分类交叉熵作为损失函数,并且保证准确率不会下降.

损失函数

1、bounding box中心点坐标xy与宽高

  • 一样沿用YOLOv2的offset做计算
  • ( b x i , b y i ) (b_{xi},b_{yi}) (bxi,byi) 为gt框的中心点坐标, ( b ^ x i , b ^ y i ) (\hat{b}_{xi},\hat{b}_{yi}) (b^xi,b^yi)为预测框的中心点坐标
  • ( b w i , b h i ) (b_{wi},b_{hi}) (bwi,bhi)为gt框的宽和高, ( b ^ w i , b ^ h i ) (\hat{b}_{wi},\hat{b}_{hi}) (b^wi,b^hi)为预测框的宽和高
  • 1 x i o b j 1^{obj}_{xi} 1xiobj 为第i个网格中第j个bounding box是否为正例,若是则输出1,否则为0
  • λ c o o r d = 5 \lambda_{coord}=5 λcoord=5使模型着重于物体定位能力

2、bounding box物体的置信度

  • 1 x i o b j 1^{obj}_{xi} 1xiobj 为第i个网格中第j个bounding box是否为负例,若是则输出1,否则为0
  • 若是忽略样例(不是正例及负例),则皆输出0 (不产生任何loss)
  • 无物体的系数 λ n o b j = 5 \lambda_{nobj}=5 λnobj=5使得模型专注于有物体的识别,并降低找到没有物体的情形

YOLOv3在bounding box坐标与宽高的loss 计算时多乘了 ( 2 − b w i ∗ b h i ) (2-b_{wi}*b_{hi}) (2bwibhi)系数并且在confidence score跟class的损失函数中使用二分类的交叉熵,如下所示:

YOLOv2 VS YOLOv3

模型评价

由下图可以看到:若采用COCO AP做为评价标准,YOLOv3在处理608X608图像速度可以达到20FPS;若采用COCO mAP50做评估标准, YOLOv3的表现达到57.9%,与RetinaRet的结果相近,并且速度快4倍,在实现相同准确度下YOLOv3要显著地比其他检测方法快.

总结

本文介绍了YOLO V3的网络架构和相应的具体实现细节,重点介绍了利用多尺度特征图进行检测以及利用多个独立的Logistic regression分类器来取代softmax来预测类别分类.


http://chatgpt.dhexx.cn/article/9w6Lxuqm.shtml

相关文章

最新目标检测算法回顾2022笔记

目标检测算法回顾2022笔记[附PPT] 总目录篇章1:目标检测的应用与需求篇章2:目标检测的定义与挑战篇章3:目标检测损失函数的进展篇章4:目标检测IOU的发展历程篇章5:目标检测评价指标及数据集[篇章6: 目标检测…

目标检测算法——YOLOV7——详解

1、主要贡献 主要是现有的一些trick的集合以及模块重参化和动态标签分配策略,最终在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器。 当前目标检测主要的优化方向:更快更强的网络架构;更有效的特征集成方法&#xff1…

3D点云目标检测算法综述

一、概述 在3D点云目标检测领域,对于数据输入的处理一般有三种: 多视角。将三维点云投射到多个二维平面形成图像 体素,voxel,将三维点云切割成多个小块,这些小块就叫体素,类似像素。这是最自然的一种想法…

传统目标检测算法

目标分类:给一张图片,分类 目标检测:给一张图片,找到目标,并用矩形框画出 分类是对一幅图整体,检测是更进一步,找出一幅图中一部分。一般检测以分类为基础, 目标检测就是找出图像中…

目标检测算法基础

人脸检测算法综述 0 前言1 人脸检测算法难点2 人脸检测算法流程2.1 选择检测窗口2.2 提取图像特征2.3 设计分类器2.3.1 AdaBoost2.3.2 SVM分类器2.3.3 决策树与随机森林 3 人脸检测算法3.1 传统的人脸检测算法3.2 深度学习3.2.1 基于候选框的二阶段检测算法3.2.2 直接预测结果框…

目标检测算法回顾之传统算法

传统的目标检测算法 总体回顾基于特征基于分割 一般流程经典算法HarrAdaboost流程Harr特征Adaboost算法 HOG SVM概述方法HOG特征的优缺点 DPMDPM特征DPM流程 DPM vs HOG 总结 说明:本文仅供学习 虽然传统的目标检测方法现在比较少用,但我们认为有必要了…

目标检测算法发展综述

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法 1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xf…

目标检测算法研究

1、目标检测基本介绍 1.1、项目结构 1.2、目标检测的算法分类 1.2.1两步走的目标检测:先进行区域推荐、而后进行目标分类 代表算法 :R-CNN、 SPP-net、Fast-R-CNN、Faster R-CNN 1.2.2、端到端的目标检测:采用一种网络一步到位 代表&#x…

目标检测算法分类

目标检测算法分类: 1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类 代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN 2、端到端的目标检测:采用一个网络一步到位,输入图片,输…

目标检测算法

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xff…

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 转自:七月在线实验室 一、目标检测常见算法 object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解…

目标检测算法总结

一、基于候选区域的目标检测器 滑动窗口检测器 根据滑动窗口从图像中剪切图像块,把图像块处理成固定大小。随后输入CNN分类器中,提取特征。最后使用SVM分类器识别种类,并且用线性回归器得到边框。 选择性搜索selective search 首先将每个…

万字长文详解目标检测算法,超大超全(2022最新)

摘要 1 概述 2 目标检测回顾 2.1 two-stage 2.2 one-stage 3 目标检测配方 3.1 基础概念 3.1.1 损失函数 3.1.2 Anchor-based 和 Keypoint-based 3.1.3 NMS 3.2 目标检测中的挑战 4 目标检测中的Head 4.1 ThunderNet 4.2 You Only Look Once(YOLO) 4.3 Single Sh…

常见经典目标检测算法

1、目标检测基本概念 1.1 什么是目标检测 目标检测(Object Dectection)的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置。 1.2 目标检测要解决的核心问题 除图像分类外,目标检测要解决的核心问题是&#xff1a…

目标检测的各种算法总结

这里是引用腾讯云博客文章:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 文章目录 一、目标检测常见算法二、传统的目标检测算法2.1 从图像识别的任务说起2.2 物体检测(Object Detection) 三、候选区域/窗 深度…

【NLP】预训练模型——GPT1

背景 废话不多说,先把三篇论文链接放出来:GPT1:Improving Language Understanding by Generative Pre-Training、GPT2:Language Models are Unsupervised Multitask Learners、GPT3:Language Models are Few-Shot Learners。李沐老师也在B站上放了介绍G…

ResNet50修改网络适应灰度图片并加载预训练模型

此博文是修改https://blog.csdn.net/jiacong_wang/article/details/105631229 这位大大的博文而成的,自己根据自己的情况稍微加了点东西 要修改的地方有4处 1.修改网络第一层,把3通道改为1 法一:直接在定义网络的地方修改 self.conv1 nn.…

TD-LTE R8 预编码学习笔记

预编码: MIMO系统中,当发射端通过某种方式获得一定的CSI(瞬时值,短期或中长期统计信息),就能通过一定的预处理方式对各个数据流加载的功率,速率乃至发射方向进行优化,并通过预处理在…

Task2-基于MobileaNet的预训练模型优化

##项目背景 mobilenet_v2_0.75_224 预训练模型是基于224224的训练集图片训练而来,需要通过imagenet 100M数据集把模型训练成适用于448448的预训练模型 ##思考的问题 1、预训练模型怎么使用和导入 2、如何在服务器上训练 3、如何把训练集弄出来 4、如何评价训练效果…

波束形成 基于对角加载的稳健自适应波束形成

前言 本人刚刚入门阵列信号处理的波束形成方向,因此仿真过程中可能会出现错误,如果诸位大佬发现仿真过程中有错误,请不吝指出谢谢。 对角加载(Diagonal Loading, DL)是一种比较常用的提高Capon波束形成器鲁棒性的方法,通过在样本协…