目标检测YOLOv3

2024-03-30 03:08
文章标签 目标 检测 yolov3

本文主要是介绍目标检测YOLOv3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.目标检测基础概念
    • 1.2 边界框(bounding box,bboxx)
      • 1.2.1 锚框(Anchor box)
      • 1.2.2 交并比(Intersection if Union, IoU)
  • 2. 单阶段目标检测模型YOLOv3
    • 2.1 YOLOv3模型设计思想
    • 2.2 产生候选区域
      • 2.2.1 生成锚框
      • 2.2.2 生成预测框(xywh)
      • 2.2.3 对候选区域进行标注
    • 2.3 卷积神经网络提取特征
    • 2.4 根据输出特征图计算预测框位置和类别
      • 2.4.1 建立输出特征图与预测框之间的关联
      • 2.4.2 计算预测框是否包含物体的概率
      • 2.4.3 计算预测框位置坐标
      • 2.4.4 计算物体属于每个类别概率
    • 2.5 损失函数
    • 2.6 多尺度检测
    • 2.7 预测

参考:https://www.paddlepaddle.org.cn/tutorials/projectdetail/1659421

1.目标检测基础概念

1.2 边界框(bounding box,bboxx)

表示物体的位置,是正好能包含物体的矩形框

表示形式:

1. xyxy,即(x~1~, y~1~, x~2~, y~2~),其中(x~1~,y~1~)是矩形框左上角的坐标,(x~2~,y~2~)是矩形框右下角的坐标.
2. xywh,即(x,y,w,h),其中(x,y)是矩形框中心点的坐标,w是矩形框的宽度,h是矩形框的高度。

1.2.1 锚框(Anchor box)

锚框是由人们假想出来的一种框。先设定好锚框的大小和形状,再以图像上某一个点为中心画出矩形框。

1.2.2 交并比(Intersection if Union, IoU)

描述两个框之间的重合度
I o U = A ∩ B A ∪ B IoU=\frac{A\cap B}{A \cup B} IoU=ABAB

在这里插入图片描述

# 计算IoU,矩形框的坐标形式为xyxy,这个函数会被保存在box_utils.py文件中
def box_iou_xyxy(box1, box2):# 获取box1左上角和右下角的坐标x1min, y1min, x1max, y1max = box1[0], box1[1], box1[2], box1[3]# 计算box1的面积s1 = (y1max - y1min + 1.) * (x1max - x1min + 1.)# 获取box2左上角和右下角的坐标x2min, y2min, x2max, y2max = box2[0], box2[1], box2[2], box2[3]# 计算box2的面积s2 = (y2max - y2min + 1.) * (x2max - x2min + 1.)# 计算相交矩形框的坐标xmin = np.maximum(x1min, x2min)ymin = np.maximum(y1min, y2min)xmax = np.minimum(x1max, x2max)ymax = np.minimum(y1max, y2max)# 计算相交矩形行的高度、宽度、面积inter_h = np.maximum(ymax - ymin + 1., 0.)inter_w = np.maximum(xmax - xmin + 1., 0.)intersection = inter_h * inter_w# 计算相并面积union = s1 + s2 - intersection# 计算交并比iou = intersection / unionreturn iou
# 计算IoU,矩形框的坐标形式为xywh
def box_iou_xywh(box1, box2):x1min, y1min = box1[0] - box1[2]/2.0, box1[1] - box1[3]/2.0x1max, y1max = box1[0] + box1[2]/2.0, box1[1] + box1[3]/2.0s1 = box1[2] * box1[3]x2min, y2min = box2[0] - box2[2]/2.0, box2[1] - box2[3]/2.0x2max, y2max = box2[0] + box2[2]/2.0, box2[1] + box2[3]/2.0s2 = box2[2] * box2[3]xmin = np.maximum(x1min, x2min)ymin = np.maximum(y1min, y2min)xmax = np.minimum(x1max, x2max)ymax = np.minimum(y1max, y2max)inter_h = np.maximum(ymax - ymin, 0.)inter_w = np.maximum(xmax - xmin, 0.)intersection = inter_h * inter_wunion = s1 + s2 - intersectioniou = intersection / unionreturn iou

2. 单阶段目标检测模型YOLOv3

2.1 YOLOv3模型设计思想

  1. 按一定规则在图片上产生一系列的候选区域,根据这些候选区域与物体真实框之间的位置关系进行标注(与真实框足够近的候选区域标记为正样本,偏离真实框较大的区域被标注为负样本)。

  2. 使用卷积神经网络提取图片特征并对候选区域的位置和类别进行预测。

    每个预测框可以看成一个样本,其标签为相对真实框的位置和预测的类别。通过网络模型预测其位置和类别,将网络的预测值和标签值进行比较,就可以建立起损失函数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y4VI9Mtw-1626073973964)(%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8BYOLOv3.assets/image-20210505160342147.png)]

2.2 产生候选区域

  1. 按一定规则在图片上生成一系列位置固定的锚框,将这些锚框看作是可能的候选区域。
  2. 对锚框是否包含目标物体进行预测,如果包含物体还需预测所包含物体的类别、预测框相对锚框位置需要调整的幅度。

2.2.1 生成锚框

将原始图片划分成 m × n m\times n m×n个区域,每个区域产生 k k k 个锚框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3pAvosqD-1626073973965)(%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8BYOLOv3.assets/image-20210505161406607.png)]

2.2.2 生成预测框(xywh)

锚框预测框
中心坐标(以小方格宽度为单位长度) c x + 0.5 c y + 0.5 c_x+0.5 \\ c_y+0.5 cx+0.5cy+0.5 b x = c x + σ ( t x ) b y = c y + σ ( t y ) b_x=c_x+\sigma(t_x)\\b_y=c_y+\sigma(t_y) bx=cx+σ(tx)by=cy+σ(ty)
大小 p h p w p_h \\ p_w phpw b h = p h e t h b w = p w e t w b_h=p_he^{t_h} \\ b_w=p_we^{t_w} bh=phethbw=pwetw

σ ( x ) = 1 1 + e x p ( − x ) \sigma(x)=\frac{1}{1+exp(-x)} σ(x)=1+exp(x)1

2.2.3 对候选区域进行标注

  • 标注锚框是否包含物体

    m × n × k m\times n \times k m×n×k 个锚框中选取 I o U IoU IoU最大的标注为正类1,其他标注为负类0( I o U IoU IoU大于ios_threshold的设置为-1,不参与损失函数的计算),最终每个真实框可对应一个标注为正类的锚框。

  • 标注预测框的位置坐标标签
    d x ∗ = σ ( t x ∗ ) = g t x − c x d y ∗ = σ ( t y ∗ ) = g t y − c y t w ∗ = l o g ( g t w p w ) t h ∗ = l o g ( g t h p h ) d^*_x=\sigma(t^*_x)=gt_x-c_x \\ d^*_y=\sigma(t^*_y)=gt_y-c_y \\ t^*_w=log(\frac{gt_w}{p_w}) \\ t^*_h=log(\frac{gt_h}{p_h}) dx=σ(tx)=gtxcxdy=σ(ty)=gtycytw=log(pwgtw)th=log(phgth)
    网络预测 ( σ ( t x ) , σ ( t y ) , t w , t h ) (\sigma(t_x),\sigma(t_y),t_w,t_h) (σ(tx),σ(ty),tw,th)与目标值 ( d x ∗ , d y ∗ , t w ∗ , t h ∗ ) (d^*_x,d^*_y,t^*_w,t^*_h) (dx,dy,tw,th)计算损失函数,建立起回归问题,通过网络学习使得 t t t足够接近 t ∗ t^* t,从而求解出预测框位置。

  • 标注锚框包含物体类别的标签

    使用one-hot向量标注物体类别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBqQGUZo-1626073973966)(%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8BYOLOv3.assets/image-20210508221830053.png)]

2.3 卷积神经网络提取特征

通过卷积网络提取图像特征。

YOLOv3使用的骨干网络为Darknet53

在这里插入图片描述

2.4 根据输出特征图计算预测框位置和类别

对于一个预测框,网络需要输出 ( 5 + C ) (5+C) (5+C)个实数来表征包含物体、位置和形状尺寸以及属于每个类别的概率。则所有预测框一共需要网络输出的预测值数目为:

2.4.1 建立输出特征图与预测框之间的关联

输出特征图大小与方块区域大小相等

最后输出通道数为 k ( 5 + C ) k(5+C) k(5+C)

在这里插入图片描述

P 0 [ t , 0 : 4 + C , i , j ] P0[t,0:4+C,i,j] P0[t,0:4+C,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框所需要的 5 + C 5+C 5+C个预测值对应

P 0 [ t , ( k − 1 ) ( 5 + C ) : k ( 5 + C ) − 1 , i , j ] P0[t,(k-1)(5+C):k(5+C)-1,i,j] P0[t,(k1)(5+C):k(5+C)1,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框所需要的 5 + C 5+C 5+C个预测值对应

2.4.2 计算预测框是否包含物体的概率

P 0 [ t , 4 , i , j ] P0[t,4,i,j] P0[t,4,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的objectness对应

P 0 [ t , ( k − 1 ) ( 5 + C ) + 4 , i , j ] P0[t,(k-1)(5+C)+4,i,j] P0[t,(k1)(5+C)+4,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的objectness对应

2.4.3 计算预测框位置坐标

P 0 [ t , 0 : 3 , i , j ] P0[t,0:3,i,j] P0[t,0:3,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的位置对应

P 0 [ t , ( k − 1 ) ( 5 + C ) : ( k − 1 ) ( 5 + C ) + 3 , i , j ] P0[t,(k-1)(5+C):(k-1)(5+C)+3,i,j] P0[t,(k1)(5+C):(k1)(5+C)+3,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的位置对应

2.4.4 计算物体属于每个类别概率

P 0 [ t , 5 : 4 + C , i , j ] P0[t,5:4+C,i,j] P0[t,5:4+C,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的类别对应

P 0 [ t , ( k − 1 ) ( 5 + C ) + 5 : k ( 5 + C ) − 1 , i , j ] P0[t,(k-1)(5+C)+5:k(5+C)-1,i,j] P0[t,(k1)(5+C)+5:k(5+C)1,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的类别对应

2.5 损失函数

  • 表征是否包含目标的损失函数
  • 表征物体位置的损失函数
  • 表征物体类别的损失函数

2.6 多尺度检测

目的:能够检测尺寸较小的目标,需要在尺寸较大的特征图上建立预测输出。

方法:将高层的特征图尺寸放大后跟低层级的特征图进行融合。

在这里插入图片描述

  • 开启端到端训练

在这里插入图片描述

2.7 预测

在这里插入图片描述

这篇关于目标检测YOLOv3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860324

相关文章

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景